Попытка автозаполнения формы данных с селеном и python - PullRequest
0 голосов
/ 14 февраля 2020

Я пытаюсь создать сценарий автоматизации с python и селеном. Вот код до сих пор. У меня конфиденциальная информация скрыта из соображений конфиденциальности. Я в основном хочу, чтобы поле handleunit заполнялось переменной HandlingUnit.

from selenium import webdriver
from selenium.webdriver.common.by import By

OriginZip = 99501
DestinationZip = 94016
HandlingUnit = 1

driver = webdriver.Chrome(r"C:\Users\*******\Desktop\WebAutomation\chromedriver")
driver.maximize_window()


driver.get("***********")
driver.implicitly_wait(1)

#Login Page
driver.find_element(By.XPATH, "//button[@id='dropdownMenuButton']").click()
driver.find_element(By.XPATH, "//input[@id='UserName']").send_keys('*******')
driver.find_element(By.XPATH, "//input[@id='Password']").send_keys('*******')
driver.find_element(By.XPATH, "//button[@class='btn btn-primary btn-block']").click()

#2nd Page
driver.find_element(By.XPATH, "//input[@id='OriginZip']").send_keys(OriginZip)
driver.find_element(By.XPATH, "//input[@id='DestinationZip']").send_keys(DestinationZip)
driver.find_element(By.XPATH, "//button[@class='btn btn-secondary form-control']").click()

#3rd Page
driver.refresh()  #<-- Add this to fix
driver.find_element(By.XPATH, "//input[@id='handlingunits']").send_keys(HandlingUnit) #here is where the error occurs

Вот изображение 3-й страницы 3rdpagepicture

Появляющаяся ошибка:

StaleElementReferenceException: Message: stale element reference: element is not attached to the page document
  (Session info: chrome=80.0.3987.87)

Я пробовал добавление метода implicity_wait, а также поиск элементов по ID. Кто-нибудь знает правильное решение этого вопроса?

Ответы [ 2 ]

1 голос
/ 14 февраля 2020

вы можете попробовать это-

1. Восстановить sh страницу до ввода данных.

2. Попробуйте использовать CSS вместо xpath

3.используй попытку и поймай

например, например

try:
driver.find_element_by_css_selector("#handlingunits']").send_keys(HandlingUnit) 

except (StaleElementReferenceException):

     wait=WebDriverWait(driver, 5,ignored_exceptions=ignored_exceptions).until(..your code))
     driver.find_element_by_css_selector("#handlingunits").send_keys(HandlingUnit)

надеюсь, это поможет

0 голосов
/ 14 февраля 2020

Похоже, что AJAX refre sh происходит в следующей строке кода

driver.find_element(By.XPATH, "//button[@class='btn btn-secondary form-control']").click()

Несмотря на то, что это не лучшая практика, я бы предложил явно подождать после этой строки кода , что тоже в течение значительного времени (например, 30 секунд). Если это поможет, вы можете попробовать:

  1. Оптимизация явного времени ожидания путем сокращения его шагами
  2. Попробуйте другие методы синхронизации скриптов, например, WebDriverWait
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...