如何使用Selenium登录Yahoo Mail

时间:2019-06-01 09:23:22

标签: python selenium css-selectors webdriverwait yahoo-mail

我最近正在研究“用Python自动完成无聊的事情”中的示例,并遇到了与此相关的示例。在本练习中,我尝试使用Chrome浏览器上的Selenium登录Yahoo Mail。该代码不会产生任何错误,并且可以成功打印最后一行,但是,即使成功填写了密码,它也无法单击“提交”按钮,这使我陷于登录页面。但是,如果我手动单击登录按钮,则可以成功登录。

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 :(得分:0)

尝试一下:

添加脚本顶部

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)

More details

答案 1 :(得分:0)

要在{em> Yahoo Mail登录页面上提供文本为登录的按钮上click(),您必须诱使 WebDriverWait 以使元素可点击,您可以使用以下Locator Strategy

  • 代码块:

    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:请注意登录过程开始时突出显示的可见 旋转按钮

相关问题