Python mechanize 提交 JavaScript 按钮问题!
我正在用 mechanize.browser 模块写一个脚本。
现在遇到一个问题,其他都没问题,但在提交表单时,它不工作。
所以我找到了一个可疑的地方。
在 HTML 源代码中,我发现了以下内容。
我在想,loginCheck(this) 可能是在提交表单时出问题的地方。
但是我该如何用 mechanize 模块处理这种 JavaScript 函数,这样我才能成功提交表单并接收到结果呢?
以下是与 loginCheck(this) JavaScript 函数相关的网页源代码片段。
function init(){
FRMLOGIN.ID.focus();
}
function loginCheck(f){
if(chkNull(f.ID, "아이디를"))
return false;
if(chkNull(f.PWD, "패스워드를"))
return false;
//f.target = "ifrmLoginHidden";
f.action = (f.SECCHK.checked) ? "https://user.buddybuddy.co.kr/Login/Login.asp" : "http://user.buddybuddy.co.kr/Login/Login.asp";
}
我知道 mechanize 不支持 JavaScript,所以我想用 Python 的 mechanize 代码来编写 loginCheck() 函数。
有没有人能帮我把这个 JavaScript 函数转换成 Python 的 mechanize 代码?
这样我就可以正确登录网站了。
如果能帮忙,我会非常感激!
# -*- coding: cp949-*-
import sys,os
import mechanize, urllib
import cookielib
from BeautifulSoup import BeautifulSoup,BeautifulStoneSoup,Tag
import datetime, time, socket
import re,sys,os,mechanize,urllib,time
br = mechanize.Browser()
cj = cookielib.LWPCookieJar()
br.set_cookiejar(cj)
# Browser options
br.set_handle_equiv(True)
br.set_handle_gzip(True)
br.set_handle_redirect(True)
br.set_handle_referer(True)
br.set_handle_robots(False)
# Follows refresh 0 but not hangs on refresh > 0
br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)
# Want debugging messages?
br.set_debug_http(True)
br.set_debug_redirects(True)
br.set_debug_responses(True)
# User-Agent (this is cheating, ok?)
br.addheaders = [('User-agent', 'Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.6')]
br.open('http://user.buddybuddy.co.kr/Login/LoginForm.asp?URL=')
html = br.response().read()
print html
br.select_form(name='FRMLOGIN')
print br.viewing_html()
br.form['ID']='psh7943'
br.form['PWD']='qkrthgus'
br.submit()
print br.response().read()
如果有人能帮我……非常感谢!!
1 个回答
4
你可以在浏览器里手动进行登录操作,然后使用一些工具(比如Firefox的Firebug,或者Chrome的开发者工具)来查看当你点击“确定”按钮时,发送了哪些请求到网站。通常情况下,这会是一个POST请求,里面包含了从登录表单中获取的数据。你可以检查一下这个请求里发送了哪些数据,然后自己发一个POST请求,内容如下:
mechanize.urlopen(URL, POST_DATA).
你可以通过mechanize的表单对象提取POST_DATA(和post_url),方法是:
form.click_request_data()
不过你可能需要做一些修改。
这里有一个非常简单的例子:
br.select_form(name='form_name')
br.form['login']='login'
br.form['pass']='pass'
post_url, post_data, headers = br.form.click_request_data()
mechanize.urlopen(post_url, post_data)