如何通过 Selenium Webdriver 查找具有动态 id 的元素

我是在 Python 中使用带有 Selenium 的 webdriver 的新手,并且在我正在致力于从 Web 门户自动提取一些数据的事情上遇到了障碍。我正在尝试在文本框中输入日期,但NoSuchElementException无论我尝试以哪种方式搜索元素,我的脚本都会返回一个。


使用 Chrome,我可以使用以下 ID 轻松识别检查窗口中的元素,但使用 Python 无法找到它。


我试图隔离的 HTML 元素:


input id="6A8A7718100001256A44465A5ED3AEAC-toDate" type="text" value="01/15/2019" size="10" maxlength="10" onchange="validateDateField('to', '6A8A7718100001256A44465A5ED3AEAC-fromDate', '6A8A7718100001256A44465A5ED3AEAC-toDate', '6A8A7718100001256A44465A5ED3AEAC-absRangeErr')"

这是我尝试过的:


from_date = driver.find_elements_by_id("6A8A7718100001256A44465A5ED3AEAC-fromDate")

from_date = driver.find_element_by_xpath("//input[@id='6A8A7718100001256A44465A5ED3AEAC-fromDate']")

from_date = from_date = driver.find_element_by_css_selector("input[id='6A8A7718100001256A44465A5ED3AEAC-fromDate']")

任何帮助表示赞赏,谢谢!


繁花如伊
浏览 249回答 2
2回答

开心每一天1111

'-toDate' 之前的字母数字字符似乎是自动生成的。这意味着它们可能会在站点的构建之间发生变化,或者可能在 js 运行时动态创建。因此我会在 xpath 中使用 contains 关键字,因为它应该对这些更改更加健壮。to_date = driver.find_element_by_xpath("//input[contains(@id, '-toDate')]")from_date = driver.find_element_by_xpath("//input[contains(@id, '-fromDate')]")
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python