这个网页登录Python脚本是否正确?

时间:2010-09-04 13:55:48

标签: python cookies login built-in cookiecontainer

这个Python脚本是否正确?


import urllib, urllib2, cookielib 

username = 'myuser' 
password = 'mypassword' 

cj = cookielib.CookieJar() 
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) 
login_data = urllib.urlencode({'username' : username, 'j_password' : password}) 
opener.open('http://www.example.com/login.php', login_data) 
resp = opener.open('http://www.example.com/hiddenpage.php') 
resp.read()

我发现此脚本 HERE 。它首先要登录网页,检索Cookie,存储它们并使用它们以便在同一网站上打开其他页面。我想以这种方式登录我的易趣帐户(网址为https://signin.ebay.com/ws/eBayISAPI.dll?SignIn),然后转到我的易趣帐户上的收件箱(网址为http://my.ebay.com/ws/eBayISAPI.dll?MyEbay&gbh=1)。

因此,以下是我需要在此脚本中使用的值:

首先(唱歌)网址:https://signin.ebay.com/ws/eBayISAPI.dll?SignIn

第二个网址:http://my.ebay.com/ws/eBayISAPI.dll?MyEbay&gbh=1

我在易趣上的登录名: tryinghard

我在易趣上的密码: gettingsomewhere

使用所有这些新值,上面的脚本必须是这样的:


import urllib, urllib2, cookielib 

username = 'tryinghard' 
password = 'gettingsomewhere' 

cj = cookielib.CookieJar() 
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) 
login_data = urllib.urlencode({'username' : username, 'j_password' : password}) 
opener.open(https://signin.ebay.com/ws/eBayISAPI.dll?SignIn', login_data) 
resp = opener.open(http://my.ebay.com/ws/eBayISAPI.dll?MyEbay&gbh=1') 
resp.read()

这是对的吗?我对 login_data = 一行(从底部开始的第四行)特别怀疑,为什么它是 j_password < / em> 而不只是 password

我尝试使用所有这些值的脚本,但它不起作用。有人知道为什么它在我的情况下不起作用吗?

我已经learned how to log in to my eBay account and then check some other pages there by means of running a python script that is using twill as an external module了,但是当我从命令提示符或Python shell运行该脚本时,这只是成功的。当我尝试通过{strong> "Google App Engine Software Development Kit" 下载的"Google App Engine"来运行该脚本时,它没有成功。

后来我被告知 here 它没有成功,因为“Google App Engine”不喜欢外部模块。这就是我找到这个脚本的原因 - 它最初导入的那些模块( urllib urllib2 cookielib )都是内置模块。

1 个答案:

答案 0 :(得分:3)

登录页面上的一个简单的“查看源”,您提供的URL非常容易显示以下有关它的详细信息...(为了便于阅读,只需格式化HTML):

<span style="display:-moz-inline-stack" class="unl">
  <label for="userid">User ID  </label></span>
<span><input size="27" maxlength="64" class="txtBxF"
       value="" name="userid" id="userid"></span></div>
<div><span style="display:-moz-inline-stack" class="unl">
  <label for="pass">Password  </label></span>
<span><input size="27" maxlength="64" class="txtBxF"
       value="" name="pass" id="pass" type="password"></span>

正如您所看到的那样,关键输入字段的名称在您使用时不是 usernamej_password,而是{{1} }和userid。因此,您的代码显然不可能像目前的那样工作。

阅读更多页面,您很快就会看到:

pass

很可能你必须模拟选中的复选框才能获得可用的cookie(至少除了稍纵即逝的时间之外;)。

等等,真的 - 尝试自动与页面交互而不必费心阅读该页面的来源以获取实际的ID和名称,这对我来说非常乐观,对生活非常乐观,宇宙,一切...... ;-)。顺便说一句,为了简化这种交互(之后阅读源代码;-),我发现mechanize非常方便(并且比试图破解它更健壮只是正如你所做的那样使用标准库。

此外,在与网站自动互动之前,请务必查看其robots.txt以确保您没有违反其使用条款 - 网站可以轻松识别“机器人”(自动互动),而不是“人类“,并通过禁止,黑名单和更糟糕的方式报复robots.txt违规行为;你真的不想碰到那个; - )。