使用Python登录网站

时间:2013-04-02 05:49:50

标签: python login web urllib2 cookielib

我正在尝试使用Python登录网站 我有以下代码,当我登录网站时它确实有效。

import ClientCookie, ClientForm
import urllib, urllib2, cookielib
from BeautifulSoup import BeautifulSoup  

cookies = ClientCookie.MozillaCookieJar()

fp = ClientCookie.urlopen("http://www.renrendai.com/loginPage.action?error=false")

forms = ClientForm.ParseResponse(fp)  
fp.close()  
form = forms[0]  
form["j_username"]  = "userid"   
form["j_password"] = "password"  
fp = ClientCookie.urlopen(form.click())  
fp.close()


userHomePage_href = "http://www.renrendai.com/lend/userHomePage.action?userId=114590"  
userHomePage_doc = ClientCookie.urlopen(userHomePage_href)  
userHomePage_soup = BeautifulSoup(userHomePage_doc,fromEncoding="gb18030")  

但是如果我用它来登录another website,它就不起作用 我从该网站获得此来源:

<input name="txtUserName" type="text" value="tinkei" id="txtUserName" class="lsls" onfocus="changeborder(this)" onblur="changeborder2(this)" style="height:26px;width:280px;border-width:1px; border-color:LightGray;" />
<input name="txtPassword" type="password" maxlength="50" id="txtPassword" onfocus="changeborder(this)" onblur="changeborder2(this)" style="height:26px;width:280px;border-width:1px; border-color:LightGray;" />
<input type="image" name="btnLogin" id="btnLogin" src="http://static.ppdai.com/skin/images/login_n_button.gif" alt="登录" style="border-width:0px;" />&nbsp;

是否因为'btnLogin'的价值?

2 个答案:

答案 0 :(得分:0)

我建议使用requests lib,这很容易。

import requests
payload = {'txtUserName': 'value1', 'txtPassword': 'value2'}
r = requests.post("http://www.ppdai.com/login.aspx", params=payload)
>>> r.text
THE_RESPONSE

请尝试我发布的示例,只需将value1更改为用户名,将value2更改为密码。

example url

答案 1 :(得分:0)

你好我想我可能有一个类似的问题,但有一个不同的网站。 我看到了这个:

Logging in to a web site with Python (urllib,urllib2,cookielib): How does one find necessary information for submission?

  

查看浏览器的开发工具中发送的数据。如果它的aspx或&gt;不是,或者至少不应该是无关紧要的。就你而言,它只是一个http服务。确保&gt;您也伪造标题,一些网站检查它们(用户代理,引用等)。我还建议使用请求模块。 - gatto 4月8日19:41

     

感谢您的提升。我会更进一步伪造标题。至于我的输入值的其余部分,我错过了什么? - 4月8日星期四19:43   1

     

好吧,对于一个你应该解析表单(使用lxml)来获取值,因为它们&gt;很可能是动态的,所以硬编码的值不会这样做。我会保留所有内容,甚至&gt;清空隐藏的输入,只是为了确定。好的,所以这个过程是加载页面 - 解析并获得&gt;表单 - 发布带有cookie和标题的表单数据。 - gatto 4月8日19:52

http://www.ppdai.com/login.aspx

我想他们的意思是这部分

<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/     wEPDwUKMTM0MDY0ODA1OQ9kFgICAQ8WAh4EVGV4dAXuATxzY3JpcHQgc3JjPSJodHRwOi8vd3d3Lmdvb2dsZS1hbmFseXRpY3MuY29tL2dhLmpzIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwvc2NyaXB0PjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij50cnkge3ZhciBwdCA9IF9nYXQuX2dldFRyYWNrZXIoIlVBLTM2MzU2NjQtMSIpO3B0Ll9zZXREb21haW5OYW1lKCcucHBkYWkuY29tJyk7cHQuX3RyYWNrUGFnZXZpZXcoKTt9IGNhdGNoKGVycikge308L3NjcmlwdD5kGAEFHl9fQ29udHJvbHNSZXF1aXJlUG9zdEJhY2tLZXlfXxYBBQhidG5Mb2dpbkPZsS5trJ5Fyz2xtZdq47OvRkst" />
<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWBQKRr4PqCgKl1bKzCQK1qbSRCwKC3IeGDAKQo8KrDbSMQeI06gCgwhXGUNBJw4I0qMjg" />

我希望你能设法解决问题。