我正在使用Selenium和Chrome驱动程序,但是我一直无法通过ID查找元素。但是,该元素在浏览器的Web检查器中可见。我认为这是因为元素是动态生成的(我一直在浏览器Url栏中看到相同的URL,但内容动态变化)。使用Selenium查找嵌套的动态生成元素
解决此问题的方法是正确下划线和等待驱动程序。登录页面,我可以成功地闯过:
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
delay = 5
username = driver.find_element_by_name('Username')
password = driver.find_element_by_name('Password')
username.send_keys('my_username')
password.send_keys('my_password')
login = driver.find_element_by_id('login_button')
login.click()
这一步我能成功地找到一个名为说,button_a,之后我点击这个元素后,页面生成一个新的按钮说,button_b,为此,我使用等待存在命令。
button_a = driver.find_element_by_id('button_a')
button_a.click()
WebDriverWait(driver, delay).until(
EC.presence_of_element_located(
driver.find_element_by_id('button_b')))
但是,这将引发经典异常:
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"id","selector":"button_b"}
看来,司机是保持老DOM参考,不跟踪添加到DOM新元素,页面没有点击后重载在button_a上,但我只是得到了客户端动态生成新内容的经典Spin Wheel。在这一点上,我可以清楚地看到,通过右键单击浏览器,然后检查button_b id存在。
Selenium可以解决这个问题吗?
对不起,我只是网络浏览器自动化中的总noob。