#python #selenium #element
#python #селен #элемент
Вопрос:
Я не совсем новичок в selenium, но я не могу разобраться в этом. Я должен выполнить автоматизацию корзины, и у меня возникают проблемы на первой странице.
Я должен сначала заполнить три поля ввода, чтобы перейти к фактическому порядку, но я терплю неудачу при первом вводе. У нас есть уникальные идентификаторы почти для каждого ввода, поэтому найти его не должно быть слишком сложно, но так или иначе это так.
<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">
Вот как описывается первый ввод с идентификатором «фамилия003», поэтому моей первой попыткой было сделать это
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:UsersKDKDesktopSelenium setupchromedriver.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:
Это страница, с которой я работаю :
Я думаю, если проблема с поиском элемента каким-то образом связана с тем фактом, что вы можете переключаться между двумя «окнами» на странице резервирования. Вы можете переключаться между «Необязательным резервированием» и «Купить онлайн», и я не знаю, затрудняет ли это доступ к элементу.
Я надеюсь, что кто-нибудь сможет мне в этом помочь. Если что-то непонятно, пожалуйста, спросите меня и спасибо за чтение и заранее спасибо за некоторые ответы! 🙂
Ответ №1:
У них мало входных данных с одинаковым идентификатором, и первый — от другого. Но он не должен подниматься 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. Когда я использовал chrome с selenium, я получил это исключение без причины. Я сменил браузер на firefox и geckodriver, и это больше никогда не повторялось
Комментарии:
1. Большое вам спасибо, теперь он работает! Достаточно интересно, что всякий раз, когда я пытаюсь получить доступ к элементу через xpath, я получаю ответ, что элемент недоступен для взаимодействия, но когда я определяю его как id, он каким-то образом работает.