簡體   English   中英

Python機械化登錄網站

[英]Python mechanize login to website

我正在嘗試使用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

表單如下所示:

<login POST http://domain.com/index.php application/x-www-form-urlencoded
  <TextControl(login_nick=USERNAME)>
  <PasswordControl(login_pwd=PASSWORD)>
  <CheckboxControl(login_auto=[1])>
  <SubmitButtonControl(<None>=) (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。 案件結案。

無論如何,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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM