Python Selen Submit работает в интерактивном режиме, но не в сценарии, даже с time.sleep - PullRequest
0 голосов
/ 23 апреля 2019

Я пытаюсь войти на сайт с помощью скрипта Python с помощью веб-драйвера selenium, чтобы загрузить некоторые данные, доступные только зарегистрированным пользователям.

У меня есть следующий код:

browser = webdriver.Firefox()
browser.get('https://shop.biogast.at/store15/customer/account/login')
emailElem = browser.find_element_by_id('email')
emailElem.send_keys('12345')
passwordElem = browser.find_element_by_id('pass')
passwordElem.send_keys('12345')
passwordElem.submit()

Отлично работает, когда команды набираются в оболочку python3 одна за другой. Однако когда я запускаю код в виде скрипта, имя пользователя и логин заполняются правильно, но вместо входа в систему поля имени пользователя и логина не отображаются. Сценарий завершается, и сообщение об ошибке отсутствует.

В соответствии с тем, что другие предлагали в подобных ситуациях, это может быть проблемой синхронизации, так как сценарий выполняется намного быстрее, чем когда команды вводятся одна за другой. Поэтому я расширил скрипт, включив в него некоторые значения сна.

browser = webdriver.Firefox()
browser.get('https://shop.biogast.at/store15/customer/account/login')
time.sleep(15)
emailElem = browser.find_element_by_id('email')
emailElem.send_keys('12345')
time.sleep(15)
passwordElem = browser.find_element_by_id('pass')
passwordElem.send_keys('12345')
time.sleep(15)
passwordElem.submit()

К сожалению, результат все тот же. Поля не заполнены, и скрипт завершается без ошибок. Когда я запускаю команды одну за другой, это работает хорошо, даже если перерывы между командами составляют менее 15 секунд, поэтому, похоже, это не проблема синхронизации.

У вас есть идеи, как мне найти причину? Большое спасибо.

1 Ответ

1 голос
/ 23 апреля 2019

Используйте WebDriverWait для обработки элемента.

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

browser = webdriver.Firefox()
wait = WebDriverWait(browser,40)
browser.get('https://shop.biogast.at/store15/customer/account/login')

emailElem = wait.until(EC.element_to_be_clickable((By.ID, 'email'))) #browser.find_element_by_id('email')
emailElem.send_keys('12345')

passwordElem = wait.until(EC.element_to_be_clickable((By.ID, 'pass'))) #browser.find_element_by_id('pass')
passwordElem.send_keys('12345')
passwordElem.submit()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...