Selenium Python 3.4.3登录Gmail:密码部分

时间:2016-04-13 15:20:38

标签: python selenium

以下是我的代码到目前为止。它应该去网站并登录所有必要的细节,但我继续得到大量的错误!我不明白错误隐藏在哪里,任何看到它的人都请帮忙。谢谢!

    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

browser = webdriver.Firefox()
from selenium.webdriver.common.keys import Keys
#browser.get('https://mail.yahoo.com')
browser.get('https://accounts.google.com/ServiceLogin?sacu=1&scc=1&continue=https%3A%2F%2Fmail.google.com%2Fmail%2F&hl=en&service=mail#identifier')

emailElem = browser.find_element_by_id('Email')
emailElem.send_keys('email_address')
nextButton = browser.find_element_by_id('next')
nextButton.click()
passwordElem = browser.find_element_by_id('Passwd')

wait = WebDriverWait(browser, 10)
passwordElem = wait.until(EC.visibility_of_element_located((By.ID, "Passwd")))
passwordElem.clear()
passwordElem.send_keys('12345')

SignIn = browser.find_element_by_id('signIn')
SignIn.click()

#passwordElem.clear()
#passwordElem.send_keys('12345')
#SignIn = browser.find_elements_by_id('signIn')
#SignIn.click()
#passwordElem.submit()

这是我收到的错误:

Traceback (most recent call last):
  File "C:/Users/hp-450/Desktop/Automating_Gmail.py", line 15, in <module>
    passwordElem = browser.find_element_by_id('Passwd')
  File "C:\Python34\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 266, in find_element_by_id
    return self.find_element(by=By.ID, value=id_)
  File "C:\Python34\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 744, in find_element
    {'using': by, 'value': value})['value']
  File "C:\Python34\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 233, in execute
    self.error_handler.check_response(response)
  File "C:\Python34\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 194, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: {"method":"id","selector":"Passwd"}
Stacktrace:
    at FirefoxDriver.prototype.findElementInternal_ (file:///C:/Users/hp-450/AppData/Local/Temp/tmp3awlgy5b/extensions/fxdriver@googlecode.com/components/driver-component.js:10770)
    at FirefoxDriver.prototype.findElement (file:///C:/Users/hp-450/AppData/Local/Temp/tmp3awlgy5b/extensions/fxdriver@googlecode.com/components/driver-component.js:10779)
    at DelayedCommand.prototype.executeInternal_/h (file:///C:/Users/hp-450/AppData/Local/Temp/tmp3awlgy5b/extensions/fxdriver@googlecode.com/components/command-processor.js:12661)
    at DelayedCommand.prototype.executeInternal_ (file:///C:/Users/hp-450/AppData/Local/Temp/tmp3awlgy5b/extensions/fxdriver@googlecode.com/components/command-processor.js:12666)
    at DelayedCommand.prototype.execute/< (file:///C:/Users/hp-450/AppData/Local/Temp/tmp3awlgy5b/extensions/fxdriver@googlecode.com/components/command-processor.js:12608)

1 个答案:

答案 0 :(得分:1)

输入电子邮件并提交表单后,wait for the password field to be visible

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

# wait for the password field to be visible
wait = WebDriverWait(browser, 10)
passwordElem = wait.until(EC.visibility_of_element_located((By.ID, "Passwd")))
passwordElem.clear()
passwordElem.send_keys('12345')

SignIn = browser.find_element_by_id('signIn')
SignIn.click()

另请注意,您必须使用find_element_by_id()代替find_elements_by_id()方法来找到“登录”按钮。