Python 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:

这是我正在使用的页面

https://www.nev-dama.cz/zima/rakousko/lungau/residence-carpe-solem-mariapfarr/rezervaceNova?termin=2021-01-10&typologie=[26225]&delka=3

我在想,元素定位的问题是否与您可以在预订页面中的两个“窗口”之间切换的事实有关。您可以在“不具有约束力的预订”和“在线购买”之间进行切换,但我不知道这是否会使获取该元素变得更加困难。

我希望有人可以帮助我。如果不清楚,请问我,并感谢您的阅读,并预先感谢您的回答! :)

解决方法

它们具有相同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)

第二个问题可能是chromedriver。当我将铬与硒一起使用时,我无缘无故得到了这个例外。我将浏览器更改为firefox和geckodriver,但这种情况再也没有发生