Selenium需要很长时间才能找到元素。我能做些什么吗?

时间:2015-01-26 13:31:59

标签: python selenium selenium-webdriver

我一直在尝试编写一个selenium脚本来登录我的Quora帐户。

这是我写的剧本。

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

email=raw_input("email: ")
password=getpass.getpass("Password: ")

driver = webdriver.Firefox()
driver.get("http://www.quora.com")

#time.sleep(5)

Form=driver.find_element_by_xpath("//div[@class='form_inputs']")

Form.find_element_by_name("email").send_keys(email)

#time.sleep(4)

Form.find_element_by_name("password").send_keys(password)

#time.sleep(4)

Form.find_element_by_xpath("//input[@value='Login']").click()

声明 Form=driver.find_element_by_xpath("//div[@class='form_inputs']")需要很长时间才能找到元素。事实上,所有find_element语句都需要很长时间来完成它们的工作。(这可能是因为一些Javascript片段增加了对selenium的负载,但是我对页面源的了解不多)

有什么方法可以更快地完成吗?类似的脚本在Facebook和Google上都很适合我。

编辑: 删除了time.sleep()来电。它仍然需要 6-8分钟才能找到元素。

2 个答案:

答案 0 :(得分:1)

之所以需要一段时间是因为你正在进行time.sleep()

你不应该这样做,这是不好的做法。您应该使用WebDriver等待。我个人会使用Implicit等待你的场景。 请参阅documentation

答案 1 :(得分:1)

这是我在这里多次询问过的事情,请参阅:

我已经能够使用Firefox重现慢代码执行,但以下代码使用ChromePhantomJS驱动程序时没有任何延迟:

import getpass

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

email = raw_input("email: ")
password = getpass.getpass("Password: ")

driver = webdriver.Chrome()
driver.get("http://www.quora.com")

form = driver.find_element_by_class_name('regular_login')
form.find_element_by_name('email').send_keys(email)
form.find_element_by_name('password').send_keys(password + Keys.RETURN)

仅供参考,对于Firefox,如果您使用已禁用的javascript 启动Firefox,则有助于解决此问题:

firefox_profile = webdriver.FirefoxProfile()
firefox_profile.set_preference("browser.download.folderList",2)
firefox_profile.set_preference("javascript.enabled", False)

driver = webdriver.Firefox(firefox_profile=firefox_profile)
driver.get('http://www.quora.com/')

但是,正如您所看到的那样 - 您很快就会遇到一系列不同的问题。