Selenium没有找到元素

时间:2016-02-08 05:12:43

标签: python selenium selenium-webdriver wait

我是Python的新手。我已经编写了一个代码来自动登录网站https://www.quora.com。问题是,selenium完美地加载了Firefox,但随后该程序不再继续。也就是说,它不会继续输入我的电子邮件和密码。

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

browser = webdriver.Firefox()
browser.get('https://www.quora.com')

browser.implicitly_wait(30)

email = browser.find_element_by_class_name('email')

pw = browser.find_element_by_class_name('password')

email.send_keys('my_email')
pw.send_keys('my_password')
pw.send_keys(Keys.ENTER)

我已经编写了一个类似的程序来自动登录Gmail,这非常有效。下面给出了代码,尽管它与上面几乎完全相同。

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

browser = webdriver.Firefox()

browser.get('https://www.gmail.com')

browser.implicitly_wait(10)

email = browser.find_element_by_id('Email')

email.send_keys('my_username')

email.send_keys(Keys.ENTER)

pw = browser.find_element_by_id('Passwd')

pw.send_keys('my_password')

pw.send_keys(Keys.ENTER)

两个程序都使用隐式等待方法,即程序等待指定的页面加载时间间隔,然后抛出异常。

我还尝试了selenium文档http://selenium-python.readthedocs.org/waits.html中提到的显式等待方法。 Gmail登录也可以使用该方法,但Quora登录不会。

为什么会这样?我该如何解决?

2 个答案:

答案 0 :(得分:1)

虽然Shubham Jain的答案还可以,但Quora经常更改他们的ID和课程。众所周知,它们难以刮擦或做任何事情。这是设计的。

因此,如果您打算对Quora进行任何拼抢(我会告知您这违反了他们的服务条款),我会尽量不要使用Classes或ID来定位他们网页上的任何内容!

如果我是你,我会尝试搜索不会像你想要的那样改变的东西!你实际上相当接近!

而不是:

  

email = browser.find_element_by_class_name('email')

待办事项

  

email = browser.find_element_by_name('email')

您会注意到您正在查看“class_name”,而您真正想要的只是“名称”。

您的密码也一样!

  

pw = browser.find_element_by_class_name('password')

待办事项

  

pw = browser.find_element_by_name('password')

有时候这些命名约定会让人感到困惑,我强烈建议您使用Xpath进行搜索。

答案 1 :(得分:0)

您输入电子邮件的ID不是# mongod.conf # for documentation of all options, see: # http://docs.mongodb.org/manual/reference/configuration-options/ # Where and how to store data. storage: dbPath: /var/lib/mongodb journal: enabled: true # engine: # mmapv1: # wiredTiger: # where to write logging data. systemLog: destination: file logAppend: true path: /var/log/mongodb/mongod.log # network interfaces net: port: 27017 bindIp: 127.0.0.1 #processManagement: security: authorization: enabled #operationProfiling: #replication: #sharding: ## Enterprise-Only Options: #auditLog: #snmp: ,而是Email

您输入密码的ID不是__w2_XYMxo3M_email,而是Passwd

您的元素__w2_XYMxo3M_password分别为nameEmail字段

尝试使用它。