我一直在尝试编写一个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分钟才能找到元素。
答案 0 :(得分:1)
之所以需要一段时间是因为你正在进行time.sleep()
你不应该这样做,这是不好的做法。您应该使用WebDriver等待。我个人会使用Implicit等待你的场景。 请参阅documentation
答案 1 :(得分:1)
这是我在这里多次询问过的事情,请参阅:
我已经能够使用Firefox
重现慢代码执行,但以下代码使用Chrome
或PhantomJS
驱动程序时没有任何延迟:
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/')
但是,正如您所看到的那样 - 您很快就会遇到一系列不同的问题。