Python - 为什么机械化会话不能相互识别



我正在运行一个python脚本,使用机械化包登录到网页。我从一个脚本登录,同时保持会话alive(通过添加sleep),我从不同的脚本访问同一个网页。但是,它要求我输入用户名和密码 - 即使第一个会话是活动的。

为什么不承认已建立的会话?我该如何解决这个问题?

这是我用来建立会话的代码:

import mechanize
import cookielib
from time import sleep
loginURL = '<loginURL>'
URL = '<URL>'
browser = mechanize.Browser()
# Cookie Jar
cj = cookielib.LWPCookieJar()
browser.set_cookiejar(cj)
#Browser Options
browser.set_handle_robots(False)
browser.set_handle_equiv(True)
browser.set_handle_gzip(True)
browser.set_handle_redirect(True)
browser.set_handle_referer(True)
browser.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:43.0) Gecko/20100101 Debian 3.2.73-2+deb7u1 Firefox/43.0')]
browser.open(loginURL)
browser.select_form(nr = 0)
browser.form['username'] = '<username>'
browser.form['password'] = '<password>'
login = browser.submit()
#print login.read()
print 'keeping session...'
sleep(240)
#Checking that the session still alive
open = browser.open(URL)
print open.read()

然后在这里我运行第二个脚本

import mechanize
import cookielib    
URL = '<URL>'
browser = mechanize.Browser()
# Cookie Jar
cj = cookielib.LWPCookieJar()
browser.set_cookiejar(cj)
#Browser Options
browser.set_handle_robots(False)
browser.set_handle_equiv(True)
browser.set_handle_gzip(True)
browser.set_handle_redirect(True)
browser.set_handle_referer(True)
browser.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:43.0) Gecko/20100101 Debian 3.2.73-2+deb7u1 Firefox/43.0')]
#Checking the output
open = browser.open(URL)
print open.read()

大多数情况下,服务器通过会话ID识别登录用户,以cookie形式发送。第一个脚本从服务器获取该cookie(当您登录时),但第二个脚本没有该cookie。第一个脚本可以将cookie保存到文件,第二个脚本可以从文件中读取cookie。

编辑:更准确地说:两个脚本都可以获取会话ID,但不同。服务器将第一个脚本的会话ID识别为登录。

最新更新