Селен - Невозможно получить xpath в элементе Dynami c - PullRequest
0 голосов
/ 26 мая 2020

Я пытаюсь получить xpath элемента в Google Trends, который кажется динамическим c, вызывая странную перезагрузку в консоли, которая не позволяет мне получить путь. Из-за этого я также попытался выбрать по идентификатору, который я видел, но все еще не работал.

Что я пытаюсь сделать, так это добавить запрос сравнения в поле поиска с заголовком «добавить поисковый запрос» (после сначала щелкните этот же элемент).

Вот пример URL: https://trends.google.com/trends/explore?q=python%20programming&geo=US

Возможно, мне нужно подождать? Я озадачен скрытым html, когда я пытаюсь проверить в консоли.

# click to add and compare query
driver.find_element_by_xpath('//*[@id="explorepage-content-header"]/explore-pills/div/button/span/span[1]').click()
time.sleep(10)

# find comparisson search box
driver.maximize_window() 
driver.implicitly_wait(20) 
ele = driver.find_element_by_id('input-139')
time.sleep(1)

ele.send_keys('r programming') <-- im not able to add this query in the comparison box
ele.send_keys(Keys.RETURN)

Это сообщение об ошибке.

NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"[id="input-139"]"}
  (Session info: chrome=81.0.4044.138)

Ответы [ 2 ]

0 голосов
/ 26 мая 2020

Поле ввода с динамическим c id, вы не можете использовать .find_element_by_id('input-139'). И попробуйте добавить WebDriverWait, как показано ниже:

driver.get('https://trends.google.com/trends/explore?q=python%20programming&geo=US')
compare = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CLASS_NAME, 'add-term-text')))
compare.click()
input_elmnt = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, '#explorepage-content-header > explore-pills > div > div:nth-child(2)')))
action = ActionChains(driver)
action.move_to_element(input_elmnt).send_keys('r programming').send_keys(Keys.ENTER).perform()

После импорта:

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver import ActionChains
from selenium.webdriver.common.keys import Keys
0 голосов
/ 26 мая 2020

Кажется, что страница генерирует разные идентификаторы во время перезагрузки страницы и в разных браузерах. Я предполагаю, что это, скорее всего, связано с тем, что на странице используется angular.

Я использовал следующий код и смог заставить его работать, но я предположил, что мы всегда будет входить во вторую строку поиска. Первое поле поиска - это исходный запрос.

search_boxes = driver.find_elements_by_css_selector('input[aria-label="Add a search term"]')
target_box = search_boxes[1] # Second Box, we're assuming there is always one term.

target_box.send_keys('r programming')
target_box.send_keys(Keys.RETURN)
...