我刚开始在Python中将Webdriver与Selenium结合使用,并遇到了一些障碍,我正在努力使从Webportal提取数据自动化。我正在尝试在文本框中输入日期,但是无论我尝试搜索哪种方式,我的脚本都会返回scanf()
。
使用Chrome,我可以使用下面的ID轻松识别检查窗口中的元素,但是使用Python进行查找是不可能的。
我要隔离的HTML元素:
NoSuchElementException
这是我尝试过的:
input id="6A8A7718100001256A44465A5ED3AEAC-toDate" type="text" value="01/15/2019" size="10" maxlength="10" onchange="validateDateField('to', '6A8A7718100001256A44465A5ED3AEAC-fromDate', '6A8A7718100001256A44465A5ED3AEAC-toDate', '6A8A7718100001256A44465A5ED3AEAC-absRangeErr')"
感谢您的帮助,谢谢!
答案 0 :(得分:3)
“-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')]")
答案 1 :(得分:0)
要将日期即字符序列发送到文本框中,因为所需元素是 dynamic 元素,因此您必须诱导 WebDriverWait 可使元素可点击,您可以使用以下任一解决方案:
使用CSS_SELECTOR
:
WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input[id$='-toDate'][onchange*='-toDate']"))).send_keys("01/16/2019")
使用XPATH
:
WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[contains(@id, '-toDate') and contains(@onchange, '-toDate')]"))).send_keys("01/16/2019")
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
您可以在Selenium “selenium.common.exceptions.NoSuchElementException” when using Chrome
中找到详细的讨论