3

我用 mechanize.browser 模块制作了一些脚本。

问题之一是所有其他事情都可以,但是当提交()表单时,它不起作用,

所以我发现了一些怀疑来源部分。

在 html 源代码中,我发现如下所示。

我在想,loginCheck(this) 在提交表单时出现问题。

但是如何使用 mechanize 模块处理这种 javascript 函数,所以我可以

成功提交表格并可以收到结果?

以下是与 loginCheck(this) javascript 函数相关的 websource 片段。

        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,所以我想以编程方式进行 loginCheck()

python 机械化代码的功能。

有人能帮我把这个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()

如果有人可以帮助我..非常感谢!

4

1 回答 1

4

您可以在浏览器中手动完成登录过程,并检查(使用例如 firefox 中的 Firebug、Chrome 中的开发者工具等)当您点击 OK 按钮时向站点发送了哪些请求。通常这是一个 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)
于 2010-10-06T07:36:53.583 回答