【问题标题】:I'm really stuck with Python selenium module我真的很喜欢 Python selenium 模块
【发布时间】:2016-11-08 01:20:17
【问题描述】:

我正在制作一个简单的程序,它使我能够填写登录表单并向某人发送电子邮件.. 当我使用它时,它只是不再继续,而是在打开一些链接时停下来。

# Practice Program!

import requests, os, bs4, webbrowser
from selenium import webdriver

url = 'http://google.com'

res = requests.get(url)
res.raise_for_status()

browser = webdriver.Firefox()

browser.get(url)

signinElem = browser.find_element_by_id('gb_70')
signinElem.click()

idElem = browser.find_element_by_id('Email')
idElem.send_keys('not_my_real_id')
idElem.submit()

pwElem = browser.find_element_by_id('Passwd')
pwElem.send_keys('not_my_pw')
pwElem.submit()

mailElem = browser.find_element_by_class_name('gb_P')
mailElem.click()

composeElem = browser.find_element_by_class_name('class="T-I J-J5-Ji T-I-KE L3')
composeElem.click()

代码运行良好,直到它到达 pwElem,这让我想知道为什么 signinElemidElem 有效但 pwElem 无效??

我碰巧遇到了类似的情况,我可以通过一些链接,但其他链接不能。这段代码有什么问题?

我得到以下错误

Traceback(最近一次调用最后一次):文件 “C:/Users/Cyber​​/Downloads/WriteMail.py”,第 22 行,在 pwElem = browser.find_element_by_id('Passwd') 文件 "C:\Users\Cyber​​\Downloads\lib\site-packages\selenium\webdriver\remote\webdriver.py", 第 269 行,在 find_element_by_id 中 返回 self.find_element(by=By.ID, value=id_) 文件“C:\Users\Cyber​​\Downloads\lib\site-packages\selenium\webdriver\remote\webdriver.py”, 第 752 行,在 find_element 中 'value': value})['value'] 文件 "C:\Users\Cyber​​\Downloads\lib\site-packages\selenium\webdriver\remote\webdriver.py", 第 236 行,执行中 self.error_handler.check_response(response) 文件 "C:\Users\Cyber​​\Downloads\lib\site-packages\selenium\webdriver\remote\errorhandler.py", 第 192 行,在 check_response 中 raise exception_class(message, screen, stacktrace) selenium.common.exceptions.NoSuchElementException: Message: Unable to 定位元素:{"method":"id","selector":"Passwd"} 堆栈跟踪: 在 (file:///C:/Users/Cyber​​/AppData/Local/Temp/tmpczr__hhf/extensions/fxdriver@googlecode.com/components/driver-component.js:10770) 在 (file:///C:/Users/Cyber​​/AppData/Local/Temp/tmpczr__hhf/extensions/fxdriver@googlecode.com/components/driver-component.js:10779) 在 (file:///C:/Users/Cyber​​/AppData/Local/Temp/tmpczr__hhf/extensions/fxdriver@googlecode.com/components/command-processor.js:12661) 在 (file:///C:/Users/Cyber​​/AppData/Local/Temp/tmpczr__hhf/extensions/fxdriver@googlecode.com/components/command-processor.js:12666) 在 (file:///C:/Users/Cyber​​/AppData/Local/Temp/tmpczr__hhf/extensions/fxdriver@googlecode.com/components/command-processor.js:12608)

【问题讨论】:

  • 显示HTML 相同\
  • + 当试图点击一些链接时, browser.find_by_id 和 browser.find_by_class_name 有什么区别吗?这就是为什么有些有效而有些无效的原因吗?
  • @Andersson 我尝试使用 bs4 解析 html 代码,但我得到了 []... soup.select('#Passwd'), soup.select('password-shown'), soup。 select('input[Passwd]'),全部。
  • 你的浏览器能得到HTML吗?右键单击目标元素 -> 显示源
  • @Andersson 这是链接! docs.google.com/document/d/…我被一些邪恶的军事计划阻止了,所以我花了一些时间让它工作..:)

标签: python selenium


【解决方案1】:

Paasword 字段在您提交 Email 时变得可见,因此您需要实现 WebDriverWait 以等待 password 字段可见,如下所示:-

from selenium.webdriver.support import expected_conditions as EC

-------------

wait = WebDriverWait(browser, 10)

idElem = wait.until(EC.visibility_of_element_located((By.ID, "Email")))
idElem.send_keys('not_my_real_id')
idElem.submit()


pwElem = wait.until(EC.visibility_of_element_located((By.ID, "Passwd")))
pwElem.send_keys('not_my_pw')
pwElem.submit()

希望对你有帮助..:)

【讨论】:

    【解决方案2】:

    实际上你的错误信息是:.NoSuchElementException: Message: Unable to locate element

    我看到谷歌登录页面上有一个下一步按钮,就在电子邮件输入框的正下方。

    所以你可以点击下一步按钮找到密码输入框

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-09
      相关资源
      最近更新 更多