#python #selenium #web-scraping
#python #селен #очистка веб-страниц
Вопрос:
Я пытаюсь написать программу, использующую Selenium WebScraping для взаимодействия с моей электронной почтой. Код, который я вставил ниже, предназначен только для процесса входа в систему. Я изменил адрес электронной почты и пароль.
from selenium import webdriver
#Edge
driver = webdriver.Chrome()
#Open the website
driver.get('https://login.live.com/login.srf?wa=wsignin1.0amp;rpsnv=13amp;ct=1602431674amp;rver=7.0.6737.0amp;wp=MBI_SSLamp;wreply=https://outlook.live.com/owa/?nlp=1&RpsCsrfState=2c3ee82f-9893-34e5-fd04-e3b4c3e2ccc4amp;id=292841amp;aadredir=1amp;CBCXT=outamp;lw=1amp;fl=dob,flname,wldamp;cobrandid=90015')
log_in_button = driver.find_element_by_name("loginfmt")
log_in_button.send_keys('myemail@outlook.com')
next_button = driver.find_element_by_id("idSIButton9")
next_button.click()
password_button = driver.find_element_by_name("passwd")
password_button.send_keys('my_password')
Однако, когда я запускаю это (с правильным адресом электронной почты и паролем), программа, похоже, не может ввести пароль на последнем шаге. Журнала ошибок нет, и моя программа отлично вводит мою электронную почту, но не может ввести пароль. Я пытался использовать несколько разных способов поиска элемента HTML, включая
find_element_by_type()
find_element_by_id()
find_element_by_class_name()
а также
find_element_by_css_selector()
Большинство из этих методов заканчивались StaleElementReferenceException, некоторые заканчивались не удается найти элемент, а остальные вообще не работали.
Кто-нибудь знает способ ввода пароля с помощью Selenium, я предполагаю, что либо я использую неправильный элемент, либо Microsoft по какой-то причине намеренно блокирует такое поведение.
Любая помощь приветствуется. Спасибо.
Комментарии:
1. после нажатия кнопки next добавьте паузу в несколько секунд, соответственно 5 секунд. или используйте
expected conditions
, если вы хотите, чтобы это было действительно быстро
Ответ №1:
Лучше всего избегать time.sleep()
, где это возможно. time.sleep()
ненужное замедление ваших скриптов.
Рекомендуется всегда использовать явное ожидание, чтобы избежать проблем с синхронизацией.
Используйте WebDriverWait
() и дождитесь element_to_be_clickable
()
password_button =WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.NAME,"passwd")))
Вам необходимо импортировать следующие библиотеки.
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
Дальнейшее изучение вы можете найти ниже Явных ожиданий