Драйвер Selenium: Как найти элемент, добавленный после загрузки веб-страницы? - PullRequest
2 голосов
/ 29 февраля 2020

Таким образом, на веб-странице есть кнопка, которая после нажатия добавит элемент на веб-страницу, в котором я не могу найти, используя selenium

Некоторый воображаемый код, описанный ниже, чтобы объяснить возникшую проблему:

from selenium import webdriver
d = webdriver.Chrome()
#Go to my target website
d.get("https://some_website_url") #ref1
#Okay now loading of the website is done. `d` will not be updated and this is the problem!!

#Click my target button and an element with id="SecretButton" is loaded.
d.find_element_by_css_selector("#secretlyupdatethewebpage").click()

#Find #SecretButton but to no avail. 
#It can be found in the html panel of Chrome Developer Tools
#but cannot be found in the webdriver `d`, as `d` won't be 
#updated after #ref1
d.find_element_by_css_selector("#SecretButton").click()

Как мне найти #SecretButton?

1 Ответ

2 голосов
/ 01 марта 2020

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

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

    WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, "SecretButton"))).click()
    
  • Использование CSS_SELECTOR:

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

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

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...