2011-11-29 129 views
7

我在Python中使用Selenium webdriver进行网络抓取项目。通过Python中的网络抓取工具登录到网站

我想通过输入登录详细信息登录,然后单击提交按钮。

我可以输入用户名和密码。但我无法用鼠标点击提交按钮。

“提交”按钮的类型为<input>

<input type="image" src="/images/buttons/loginnow.gif" tabindex="3"> 

这里是我试图点击鼠标的python代码。

submitButton=driver.find_element_by_xpath("//input[@type='image'][@src='/images/buttons/loginnow.gif']") 
driver.click(submitButton) 

我得到以下错误:

AttributeError: 'WebDriver' object has no attribute 'click'

不知道如何解决它或任何其他替代解决方案登录到Python中的网站。

感谢

回答

4

您需要调用元素的click功能,而不是驱动程序。

submitButton=driver.find_element_by_xpath("//input[@type='image'][@src='/images/buttons/loginnow.gif']") 
submitButton.click() 
9

我使用mechanize有好运气。它非常简单易用。

这里有一个脚本我做的精简版本:

from BeautifulSoup import BeautifulSoup 
from tidylib import tidy_document 

import mechanize 
import cookielib 

if __name__ == '__main__': 
    browser = mechanize.Browser() 

    cookiejar = cookielib.LWPCookieJar() 
    browser.set_cookiejar(cookiejar) 

    browser.set_handle_equiv(True) 
    browser.set_handle_redirect(True) 
    browser.set_handle_referer(True) 
    browser.set_handle_robots(False) 

    browser.open('https://www.example.com/') 

    browser.select_form(name = 'loginform') 
    browser['username'] = 'foo' 
    browser['password'] = 'bar' 

    browser.submit() 

    browser.open(browser.click_link(text = 'Link text')) 

    soup = BeautifulSoup(tidy_document(browser.response().read())[0]) 

你不需要点击图片,真的。你只需要填写所有适当的表格细节,并只需要submit()它。

此外,如果你不会解析任何东西,只需要摆脱BeautifulSouptidylib依赖关系。

+0

誓言。这是惊人的真的,事实证明,硒也有'提交()'这工作对我来说 – Kiran

+0

这是更好的是重写你的脚本:P – Blender