Python selenium - 找不到元素
Python selenium - cant find element
我对 selenium 不是很陌生,但我无法解决这个问题。我应该做一个篮子自动化,但我在第一页遇到了麻烦。
我应该首先填写三个输入框才能继续实际订单,但我在第一个输入框时失败了。我们几乎每个输入都有唯一的 ID,所以应该不难找到它,但不知何故。
<input class="form-input--text" data-validitytext-empty="Položka je povinná.<br>Prosíme, vyplňte ji." data-validitytext-invalid="Položka má špatný formát.<br>Prosíme, opravte ji." data-label-selector="closest(.form-item--required)->find(label.form-label)" id="surname003" name="Prijmeni" type="text" value="" data-form-required="true" xpath="1">
这是第一个输入的描述方式,id 为“surname003”,所以我的第一个尝试就是这样做
driver.find_element_by_xpath("//*[@id='surname003']").send_keys("text")
然后我尝试用id访问它
driver.find_element_by_id("surname003").send_keys("text")
这一切都不起作用,所以我试图获取它的完整 xpath,但那没有用。
这是整个代码的样子
driver = webdriver.Chrome(executable_path=r"C:\Users\KDK\Desktop\Selenium setup\chromedriver.exe")
driver.get(URL2)
driver.maximize_window()
driver.implicitly_wait(10)
driver.find_element_by_xpath("//*[@id='surname003']").send_keys("test")
driver.find_element_by_xpath("//*[@id='phone03']").send_keys(telefon)
driver.find_element_by_xpath("//*[@id='email03']").send_keys(email)
这是我得到的错误
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element:
这是我正在使用的页面:
我在想定位元素的问题是否与您可以在预订页面中的两个“windows”之间切换这一事实有某种联系。您可以在“不绑定预订”和“在线购买”之间切换,我不知道这是否会使获取元素变得更加困难。
我希望有人能帮我解决这个问题。如果有什么不清楚的地方,请问我,感谢阅读,并提前感谢您的回答! :)
他们很少有相同 ID 的输入,第一个来自另一个。但它不能提高 NoSuchElementException
。
像那样尝试 XPATH
//div[@id="koupit-online"]//*[@id='surname003']
。
您需要将此部分 //div[@id="koupit-online"]
添加到所有 xpath 或用作上下文
form = driver.find_element_by_xpath("//div[@id='koupit-online']")
form.find_element_by_xpath(".//input[@id='surname003']").send_keys("test")
form.find_element_by_xpath(".//input[@id='phone03']").send_keys(telefon)
form.find_element_by_xpath(".//input[@id='email03']").send_keys(email)
第二个问题可以是chrome驱动。当我将 chrome 与 selenium 一起使用时,我无缘无故地得到了这个异常。我将浏览器更改为 firefox 和 geckodriver,这再也没有发生过
我对 selenium 不是很陌生,但我无法解决这个问题。我应该做一个篮子自动化,但我在第一页遇到了麻烦。
我应该首先填写三个输入框才能继续实际订单,但我在第一个输入框时失败了。我们几乎每个输入都有唯一的 ID,所以应该不难找到它,但不知何故。
<input class="form-input--text" data-validitytext-empty="Položka je povinná.<br>Prosíme, vyplňte ji." data-validitytext-invalid="Položka má špatný formát.<br>Prosíme, opravte ji." data-label-selector="closest(.form-item--required)->find(label.form-label)" id="surname003" name="Prijmeni" type="text" value="" data-form-required="true" xpath="1">
这是第一个输入的描述方式,id 为“surname003”,所以我的第一个尝试就是这样做
driver.find_element_by_xpath("//*[@id='surname003']").send_keys("text")
然后我尝试用id访问它
driver.find_element_by_id("surname003").send_keys("text")
这一切都不起作用,所以我试图获取它的完整 xpath,但那没有用。
这是整个代码的样子
driver = webdriver.Chrome(executable_path=r"C:\Users\KDK\Desktop\Selenium setup\chromedriver.exe")
driver.get(URL2)
driver.maximize_window()
driver.implicitly_wait(10)
driver.find_element_by_xpath("//*[@id='surname003']").send_keys("test")
driver.find_element_by_xpath("//*[@id='phone03']").send_keys(telefon)
driver.find_element_by_xpath("//*[@id='email03']").send_keys(email)
这是我得到的错误
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element:
这是我正在使用的页面:
我在想定位元素的问题是否与您可以在预订页面中的两个“windows”之间切换这一事实有某种联系。您可以在“不绑定预订”和“在线购买”之间切换,我不知道这是否会使获取元素变得更加困难。
我希望有人能帮我解决这个问题。如果有什么不清楚的地方,请问我,感谢阅读,并提前感谢您的回答! :)
他们很少有相同 ID 的输入,第一个来自另一个。但它不能提高 NoSuchElementException
。
像那样尝试 XPATH
//div[@id="koupit-online"]//*[@id='surname003']
。
您需要将此部分 //div[@id="koupit-online"]
添加到所有 xpath 或用作上下文
form = driver.find_element_by_xpath("//div[@id='koupit-online']")
form.find_element_by_xpath(".//input[@id='surname003']").send_keys("test")
form.find_element_by_xpath(".//input[@id='phone03']").send_keys(telefon)
form.find_element_by_xpath(".//input[@id='email03']").send_keys(email)
第二个问题可以是chrome驱动。当我将 chrome 与 selenium 一起使用时,我无缘无故地得到了这个异常。我将浏览器更改为 firefox 和 geckodriver,这再也没有发生过