#python #selenium #xpath
Вопрос:
Я работаю над веб-автоматизацией с помощью selenium, и мне нужно найти элемент с xpath. Это само по себе не проблема, но код должен выполняться несколько раз, и когда он это делает, HTML xpath изменяется. Это тоже не проблема. Я использовал простую математику, чтобы каждый раз получать новый xpath.
Xpathes выглядят так
1. run: '//*[@id="input-text-3"]'
2. run: '//*[@id="input-text-5"]'
3. run: '//*[@id="input-text-7"]' etc.
Я решил эту проблему с помощью этого кода:
y = 1
#Corme browser already defined and on website
while True:
mathop1 = y*2 1
xxpath = ""'//*[@id="input-text-' str(mathop1) '"]'""
xxpath1 = "'" str(xxpath) "'"
print(xxpath1)
Bezeichnung = driver.find_element_by_xpath(xxpath1)
Bezeichnung.send_keys(file1name)
y = y 1
Это приводит к тому, что каждый раз, когда программа зацикливается, она обновляет y, чтобы xpath был правильным. Я попытался использовать вывод xxpath1, чтобы найти элемент, как обычно, и он работает нормально, однако, как только я использую переменную, он не работает. В частности, проблема в том, что я не могу использовать переменную.
Bezeichnung = driver.find_element_by_xpath(xxpath1)
почему это не работает?
Комментарии:
1. «Я не могу использовать эту переменную» — что именно вы имеете в виду? Вы получаете какую-то ошибку?
2. да, я получаю ошибку, но переменная определена
3. О чем говорит ошибка?
4. Я получаю эту ошибку конкретно : Файл «c:/Users/bodig/Desktop/Advanced адло builder.py», строка 303, в <модуле> Bezeichnung = driver.find_element_by_xpath(xxpath1)
5. Также это: Ошибка типа: Не удалось выполнить «оценку» для «Документа»: Результат не является набором узлов и, следовательно, не может быть преобразован в нужный тип.
Ответ №1:
Прежде всего, я думаю, вы должны поставить там условие ожидания.
Кроме того, я не понимаю, почему вы используете так много строк внутри строки и снова преобразуете строку в строку, поэтому я удалил это
y = 1
#Corme browser already defined and on website
while True:
mathop1 = y*2 1
xxpath = '//*[@id="input-text-{}"]'.format(mathop1)
Bezeichnung = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, xxpath)))
Bezeichnung.send_keys(file1name)
y = y 1
Комментарии:
1. Я попробовал код, но он все еще не работает. Теперь он выдает мне эту ошибку: ine 301, в <модуле> Bezeichnung = WebDriverWait(драйвер, 20).до(EC.element_to_be_clickable((По.XPATH, «xxpath»)))
2. Какая ошибка? тайм-аут? или элемент не найден?
3. Тайм-аут Я думаю, что это то, что там написано: строка 80, до тех пор, пока не возникнет исключение TimeoutException(сообщение, экран, трассировка стека) selenium.common.исключения. Исключение TimeoutException: Сообщение:
4. Кажется, что
xpath
выражение не совсем правильное. Я думаю, там ничегоiframe
нет? Так как это также может быть проблемой.5. Я не совсем понимаю? Что вы подразумеваете под IFrame?