在Linux上运行mechanize脚本时遇到问题,而在Windows上运行正常
事情是这样的,我写了一个Python脚本,可以连接到我工作的网页,并下载我最近的工资单。在Windows上运行得很好,但当我把这个脚本移到运行Debian的服务器上时,它在初始页面后无法继续跳转。不同的平台之间有什么区别吗?我搜索了几个小时,但没有找到有用的信息。我确保两个系统都在运行相同版本的mechanize,但Python的版本不同(编辑:现在两个版本是一样的),虽然只是有一点差别。
Both systems are running identical versions of Python and mechanize.
# >> python -V
Python 2.7.1
#mechanize >> print(mechanize.__version__)
(0, 2, 4, None, None)
现在我创建了一个简化的测试脚本,专门用来测试。这样我可以更容易地比较结果。在Windows上,这个脚本会返回一个包含所有可用工资单的最终页面,而在Linux上,它只会打印出应该跳转到登录页面的初始页面。我觉得在Linux上,mechanize要么根本没有进行跳转,要么就是没有设置一个继续所需的cookie。
有什么想法或建议吗?我基本上是在问Windows和Linux之间的mechanize是否有区别。因为这个包的内容来自同一个源,我猜应该没有,但那是什么导致了这个问题呢?
这是我用来测试的代码。显然,我把正确的用户名和密码给省略掉了 :)
import mechanize;
import urllib;
#constants
URL_OPEN = "https://ep.upsers.com/ep-s/UPSRegistration/UPSLogin";#set a cookie
URL_SECURE = "https://ep.upsers.com/gems-secure/epay_eng.html";
URL_PAYCHECK = "https://ep.upsers.com/gems-secure/psc/hrprod/EMPLOYEE/HRMS/c/M_UPS_MENU.VW_PYCHK_M.GBL?Page=PYCHKDAT_M&Action=U";#lists paychecks
VIEWALL = "#ICViewAll";
def testConnection(username, password):
success = "no connection: ";
try:
#get a cookie to use later
mechanize.HTTPSHandler();
request1 = mechanize.Request(URL_OPEN);
response1 = mechanize.urlopen(request1);
#attempt our login
postdata = {"user": username,"password": password};
post = urllib.urlencode(postdata);
headers = {"User-agent" : "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)"};
request2 = mechanize.Request(URL_OPEN, post, headers);
response2 = mechanize.urlopen(request2);
#navigate to paycheck page
request3 = mechanize.Request(URL_PAYCHECK);
response3 = mechanize.urlopen(request3);
success = response3.read();
except Exception as ex:
success += str(ex);
print(success);
#end testConnection
testConnection('USERNAME', 'PASSWORD')
最开始我以为可能需要更改用户代理,但结果没有变化。
注意:现在两个版本的Python和mechanize是一样的。注意:我观察到在每次请求时检查头信息时,Linux上没有设置/存储cookie,而在Windows上是正常的。
2 个回答
我建议在你深入调查那些复杂的问题之前,先解决一些明显的差异:下载 Python 2.7(不需要安装),看看它的表现是否和 Windows 一样。
下面是一个“构建并运行 2.7”的复制粘贴示例:
wget http://python.org/ftp/python/2.7.1/Python-2.7.1.tgz
tar -xzf Python-2.7.1.tgz
cd Python-2.7.1/
./configure && make
./python /path/to/your/script
哪个用户在服务器上执行这个脚本,它拥有什么权限呢?
你同时对执行环境做了几个改变:
- Python的版本。
- 操作系统。
- 用户。
- 用户环境(有家目录的用户和没有的用户是不同的)。
建议你一次只改变一个东西,这样更容易找出问题。可以考虑在你的Windows电脑上使用虚拟的Linux来进行测试,这样会比较好。