如何使用python和mechanize登录网站

Posted

技术标签:

【中文标题】如何使用python和mechanize登录网站【英文标题】:How to login to a website with python and mechanize 【发布时间】:2013-05-11 23:29:07 【问题描述】:

我正在尝试登录网站http://www.magickartenmarkt.de 并在会员区 (https://www.magickartenmarkt.de/?mainPage=showWants) 中进行一些分析。我看到了其他例子,但我不明白为什么我的方法不起作用。我为第一种方法确定了正确的形式,但尚不清楚它是否有效。 在第二种方法中,返回网页显示我无权访问会员区。

我很乐意提供任何帮助。

import urllib2
import cookielib
import urllib
import requests
import mechanize
from mechanize._opener import urlopen
from mechanize._form import ParseResponse

USERNAME = 'Test'
PASSWORD = 'bla123'
URL      = "http://www.magickartenmarkt.de"

# first approach
request = mechanize.Request(URL)
response = mechanize.urlopen(request)
forms = mechanize.ParseResponse(response, backwards_compat=False)
# I don't want to close?!
#response.close()

# Username and Password are stored in this form
form = forms[1]

form["username"] = USERNAME
form["userPassword"] = PASSWORD

#proof entering data has worked
user = form["username"]  # a string, NOT a Control instance
print user
pw = form["userPassword"]  # a string, NOT a Control instance
print pw
#is this the page where I will redirected after login?
print urlopen(form.click()).read () 

#second approach
cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
login_data = urllib.urlencode('username' : USERNAME, 'userPassword': PASSWORD)

#login
response_web = opener.open(URL, login_data)

#did it work? for me not....
resp = opener.open('https://www.magickartenmarkt.de/?mainPage=showWants')
print resp.read()

【问题讨论】:

【参考方案1】:

为什么不使用浏览器实例来方便导航? Mechanize 还具有选择特定表单的能力(例如,nr = 0 将选择页面上的第一个表单)

browser = mechanize.Browser()
browser.open(YOUR URL)
browser.select_form(nr = 0)
browser.form['username'] = USERNAME
browser.form['password'] = PASSWORD
browser.submit()

【讨论】:

感谢您的建议!它就像一个魅力。我需要担心这个实现的 cookie 吗?还找到了browser.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)这个。这是否意味着浏览器-(对象?)每秒都会刷新网页? 浏览器会将 cookie 保存在它自己的会话中(一旦脚本终止或您不再使用该特定实例,它们就会丢失)。但是,如果您希望这些 cookie 可用于未来的会话(例如,只要 cookie 未过期,就在未来调用脚本时),您必须使用 cookielib,docs.python.org/2/library/cookielib.html 我相信是browser = mechanize.Browser() 好收获。我会解决的。【参考方案2】:

网络自动化 ?绝对是“WEBBOT”

webbot 甚至适用于具有动态更改 id 和类名的网页,并且比 selenium 具有更多的方法和功能。

这是一个 sn-p :)

from webbot import Browser 
web = Browser()
web.go_to('google.com') 
web.click('Sign in')
web.type('mymail@gmail.com' , into='Email')
web.click('NEXT' , tag='span')
web.type('mypassword' , into='Password' , id='passwordFieldId') # specific selection
web.click('NEXT' , tag='span') # you are logged in ^_^

【讨论】:

以上是关于如何使用python和mechanize登录网站的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Mechanize 处理 JavaScript?

如何使用 perl(和 JS?)登录这个网站?

如何为 Python 2.7 安装 mechanize(是的,它是重复的)[关闭]

在 python 中使用 mechanize 剥离 html 标签并仅返回文本

使用cookies进行身份验证登录

性能测试框架Multi-Mechanize安装与使用