【问题标题】:python mechanize.browser submit() related problempython mechanize.browser submit() 相关问题
【发布时间】:2010-03-30 10:29:42
【问题描述】:

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

其中一个问题是其他一切都可以,但是当 submit() 表单时,它不起作用,

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

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

<form method="post" onsubmit="return loginCheck(this)" name="FRMLOGIN"/>

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

但是如何用机械化模块处理这种javascript函数,所以我可以

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

以下是我当前的脚本来源。

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

# -*- 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']='zero1zero2'
br.form['PWD']='012045'
br.submit()

print br.response().read()

【问题讨论】:

    标签: python mechanize


    【解决方案1】:

    mechanize 根本不支持 Javascript。如果您绝对必须运行该 Javascript,请查看 Selenium。它提供 python 绑定来控制真实的、正在运行的浏览器,如 Firefox 或 IE。

    【讨论】:

      【解决方案2】:

      您要么需要使用未维护的模块DOMForm 和Spidermonkey (http://pypi.python.org/pypi/python-spidermonkey) 来处理javascript。或者你弄清楚 loginCheck() 正在做什么,并在 python 中提交表单之前执行它的工作。如果 loginCheck() 只是检查登录数据的明显有效性,那应该很容易。 请注意,缺少所述表单标记的操作参数。它可能在 javascript 部分中给出。

      根据您的意图,仅使用 urllib2 可能更容易。您可能会假设该网页的外观是静态的,然后使用 urllib2 的方法发布数据并使用它来获取结果。

      【讨论】:

        【解决方案3】:

        onsubmit 只是被机械化忽略了,没有进行 javascript 解释。
        您需要验证什么 loginCheck();在某些有限的情况下(验证),您可以以编程方式执行 javascript 所做的事情。

        【讨论】:

        • 你好,谢谢......如果你知道一些例子,你会告诉我吗?如果是这样,它对我来说是一个很好的参考!谢谢
        • 查看loginCheck,它是做什么的?
        • Action "user.buddybuddy.co.kr/Login/Login.asp" 由 javascript 提供。很抱歉,在这种情况下您不能使用 mechanize。
        • 在这种情况下哪种模块最好处理?也许 urllib 对我来说是最好的选择?
        • 我可以使用机械点击功能吗?比如 br.click
        猜你喜欢
        • 2011-09-09
        • 1970-01-01
        • 1970-01-01
        • 2023-01-01
        • 2022-06-12
        • 2011-09-12
        • 2019-07-02
        • 2020-01-22
        • 2020-01-15
        相关资源
        最近更新 更多