Как войти в Yahoo Mail с помощью Selenium - PullRequest
0 голосов
/ 01 июня 2019

Я недавно работаю с примерами в Automate the Boring Stuff в Python и наткнулся на этот пример, с которым у меня есть некоторые проблемы. В этом упражнении я попытался войти в Yahoo Mail с помощью Selenium в браузере Chrome. Код не выдает никакой ошибки и успешно печатает последнюю строку, однако он не может нажать на кнопку «Отправить», и я застреваю на странице входа в систему, несмотря на успешное заполнение пароля. Однако, если я нажму на кнопку входа вручную, я смогу успешно войти в систему.

Login Page at Yahoo Mail

Я пробовал и passwordelem.submit (), и passwordsubmitbtn.click (), но ни один из них не работает. Я также попытался изменить пользовательский агент в Chrome, но безрезультатно.

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


browser = webdriver.Chrome()
browser.get('https://login.yahoo.com?.src=ym&.lang=en-US&.intl=us&.done=https%3A%2F%2Fmail.yahoo.com%2Fd')
wait = WebDriverWait(browser, 10)

emailelem = wait.until(EC.presence_of_element_located((By.ID,'login-username')))
emailelem.send_keys('xxxxxx@yahoo.com')

wait.until(EC.presence_of_element_located((By.ID,'login-signin')))
emailelem.submit()

passwordelem = wait.until(EC.presence_of_element_located((By.ID,'login-passwd')))
passwordelem.send_keys('xxxxxx')
##passwordelem.submit()

passwordsubmitbtn = wait.until(EC.element_to_be_clickable((By.ID,'login-signin')))
passwordsubmitbtn.click()

print ('Done')

Ответы [ 2 ]

0 голосов
/ 01 июня 2019

Кому click() на кнопке с текстом Войдите в систему , предоставив действительные действительные учетные данные на странице входа в Yahoo Mail , вы должны WebDriverWait для элемент, который можно нажимать , и вы можете использовать следующую Стратегию локатора :

  • Кодовый блок:

    from selenium import webdriver
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
    options = webdriver.ChromeOptions()
    options.add_argument('start-maximized')
    #options.add_argument('disable-infobars')
    options.add_argument('--disable-extensions')
    driver = webdriver.Chrome(chrome_options=options, executable_path=r'C:\WebDrivers\chromedriver.exe')
    driver.get('https://login.yahoo.com')
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input.phone-no"))).send_keys("LinX123@yahoo.com")
    driver.find_element_by_css_selector("input.orko-button-primary.orko-button#login-signin").click()
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input#login-passwd"))).send_keys("LinX123@yahoo.com")
    driver.execute_script("arguments[0].click();", WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button.pure-button.puree-button-primary.puree-spinner-button"))))
    
  • Снимок браузера

yahoo_login

PS: обратите внимание на видимый спиннер , подсвеченный при запуске процесса login .

0 голосов
/ 01 июня 2019

Попробуйте это:

Добавить начало скрипта

from selenium.webdriver.common.keys import Keys

Замените ваш код

passwordelem = wait.until(EC.presence_of_element_located((By.ID,'login-passwd')))
passwordelem.send_keys('xxxxxx')
##passwordelem.submit()

passwordsubmitbtn = wait.until(EC.element_to_be_clickable((By.ID,'login-signin')))
passwordsubmitbtn.click()

Кому:

wait.until(EC.element_to_be_clickable((By.ID,'login-signin')))
passwordelem = wait.until(EC.presence_of_element_located((By.ID,'login-passwd')))
passwordelem.send_keys('xxxxxxx')
passwordelem.send_keys(Keys.RETURN)

Подробнее

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...