Как найти динамический элемент с помощью Selenium и Python - PullRequest
0 голосов
/ 07 марта 2019

Я пишу сканер с питоном и селеновым webdriver в win10 и firefox.
Я столкнулся с трудностями в понимании страницы по адресу:

https://irs.thsrc.com.tw/IMINT/

На странице есть всплывающее окно с сообщением. Xpath ссылки во всплывающем окне сообщения:

//html/body/div[2]/form[1]/div[2]/div[1]/div[1]/div[1]/div[1]/span[1]/a[1]

Исходный HTML-файл, возвращаемый веб-драйвером selenium для Firefox, не содержит этот тег для окна сообщения. Поэтому я отправляю r = requests.get('https://irs.thsrc.com.tw/IMIT/'), чтобы снова получить исходный документ html, а затем получаю тег в html.

После того, как я получил новый исходный документ HTML с тегами для всплывающего окна сообщения, я заметил, что это окно сообщения имеет style:"display:none".
Я не уверен, как это влияет на возвращаемые значения webdriver.

Предположительно, все активные теги должны быть отключены.
Но вебдрайвер сказал мне, что все они отображаются и активируются после того, как я найду им элемент тега с их xpath.
Когда я использовал webdriver, чтобы найти ссылку во всплывающем окне сообщения с xpath в приведенном выше, webdriver сказал, что элемент не может быть найден. В этом случае я не мог использовать веб-драйвер, чтобы щелкнуть ссылку в окне всплывающего сообщения. Кто-нибудь знает, как заставить webdriver возвращать истинный статус элементов тега? Например, я ожидаю, что веб-драйвер скажет мне, что все элементы отключены, за исключением a-ссылки и кнопки подтверждения во всплывающем окне сообщения.
Любой ответ и предложения будут с благодарностью.

1 Ответ

0 голосов
/ 07 марта 2019

Всплывающее окно , о котором вы говорите, должно взять ваш анализ файлов cookie и другие технологии отслеживания , и вам нужно click() для элемента с текстом как Я согласен стимулирование WebDriverWait для element_to_be_clickable(), и вы можете использовать любое из следующих решений:

  • Использование CSS_SELECTOR:

    WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input.button_main#btn-confirm"))).click()
    
  • Использование XPATH:

    WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//input[@class='button_main' and @id='btn-confirm']"))).click()
    
  • Примечание : необходимо добавить следующие операции импорта:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
...