当前位置:  开发笔记 > 编程语言 > 正文

Python机械化登录网站

如何解决《Python机械化登录网站》经验,为你挑选了1个好方法。

我正在尝试使用Python和Mechanize登录网站,但是,当我试图让POST数据按照我的意愿行事时,我遇到了麻烦.

基本上我想使用mechanize和Python来复制它:

wget --quiet --save-cookies cookiejar --keep-session-cookies --post-data "action=login&login_nick=USERNAME&login_pwd=PASSWORD" -O outfile.htm http://domain.com/index.php

表单如下所示:


  
  
  =) (readonly)>>

设置适当的值并提交表单不是问题,但是省略了"action = login"-part.

response = self.browser.open(self.url+"/index.php")
self.browser.select_form(name="login")

self.browser["login_nick"] = self.encoded_username
self.browser["login_pwd"] = self.encoded_password

self.browser.method = "POST"

response = self.browser.open(self.browser.submit())

print (response.read())

现在的问题是,我该如何添加action=login零件?

编辑:好的,所以我添加了一个名为action的隐藏字段并将值设置为login.使用Wireshark分析TCP流,POST数据确实按照应有的方式构建.然而,似乎机械化正在弄乱我的urlencoding(我已经为网站使用的charset专门编写了值).例如,我的用户名包含Å - 我已将其urlencoded为%C5.但是,当它与机械化一起发送时,它显示为%25C5. 如何通过更改字符串来停止机械化?

编辑:我意识到,在发送机器人之前,我可能不会对我的字符串进行urlencode.案件结案.



1> Tommy Brunn..:

无论如何,Mechanize似乎都会对字符串进行urlencode,所以没有必要对抗它.这是最终的解决方案(显然在语法上没有效果,但希望你能得到这个想法).

import mechanize

self.browser = mechanize.Browser()
self.browser.open(self.url)
self.browser.select_form(name="login")

self.browser["login_nick"] = self.username
self.browser["login_pwd"] = self.password
self.browser.new_control("HIDDEN", "action", {})
control = self.browser.form.find_control("action")
control.readonly = False
self.browser["action"] = "login"
self.browser.method = "POST"
self.browser.action = self.url

response = self.browser.submit()

推荐阅读
郑谊099_448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有