不使用提交按钮提交,Mechanize

发布于 2024-10-18 02:55:24 字数 925 浏览 0 评论 0原文

所以,我开始使用 Mechanize,显然我尝试的第一件事是一个猴子犀牛级别的高 JavaScript 导航网站。

现在我坚持的事情是提交表格。

通常我会使用 Mechanize 内置的 Submit() 函数进行提交。

import mechanize

browser = mechanize.Browser()
browser.select_form(name = 'foo')
browser.form['bar'] = 'baz'
browser.submit()

这样,它将使用 HTML 表单中提供的提交按钮。

然而,我所停留的网站必须是一个不使用 HTML 提交按钮的网站...不,他们试图成为 JavaScript 专家,并通过 JavaScript 进行提交。

通常的submit()似乎不适用于此。

那么...有办法解决这个问题吗?

任何帮助表示赞赏。非常感谢!

--[编辑]--

我所坚持的 JavaScript 函数:

function foo(bar, baz) {
    var qux = document.forms["qux"];

    qux.bar.value = bar.split("$").join(":");
qux.baz.value = baz;
qux.submit();
}

我在 Python 中做了什么(以及什么不起作用):

def foo(browser, bar, baz):
    qux = browser.select_form("qux")

    browser.form[bar] = ":".join(bar.split("$"))
    browser.form[baz] = baz
    browser.submit()

So, I started out with Mechanize, and apparently the first thing I try it on is a monkey-rhino-level high JavaScript navigated site.

Now the thing I'm stuck on is submitting the form.

Normally I'd do a submit using the Mechanize built-in submit() function.

import mechanize

browser = mechanize.Browser()
browser.select_form(name = 'foo')
browser.form['bar'] = 'baz'
browser.submit()

This way it'd use the submit button that's available in the HTML form.

However, the site I'm stuck on had to be one that doesn't use HTML submit buttons... No, they're trying to be JavaScript gurus, and do a submit via JavaScript.

The usual submit() doesn't seem to work with this.

So... Is there a way to get around this?

Any help is appreciated. Many thanks!

--[Edit]--

The JavaScript function I'm stuck on:

function foo(bar, baz) {
    var qux = document.forms["qux"];

    qux.bar.value = bar.split("$").join(":");
qux.baz.value = baz;
qux.submit();
}

What I did in Python (and what doesn't work):

def foo(browser, bar, baz):
    qux = browser.select_form("qux")

    browser.form[bar] = ":".join(bar.split("$"))
    browser.form[baz] = baz
    browser.submit()

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

深海夜未眠 2024-10-25 02:55:24

三种方法:

如果使用 POST/GET 方法提交表单,则首选第一种方法,否则您将不得不求助于第二种和第三种方法。

  1. 手动提交表单并检查 POST/GET 请求、其参数以及提交表单所需的发布 URL。用于检查标头的流行工具是 Firefox 的 Live HTTP 标头扩展和 Firebug 扩展以及 Chrome 的开发人员工具扩展。使用 POST/GET 方法的示例:

    导入机械化
    导入urllib
    
    浏览器 = mechanize.Browser()
    #这些是您使用上述工具检查得到的参数
    参数= {'参数1':'您的内容',
                  'parameter2' : '常数值',
                  'parameter3' : '您可能需要从页面中提取的唯一字符'
                 }
    #对参数进行编码
    数据 = urllib.urlencode(参数)
    #提交表单(POST请求)。您可以使用参数以相同的方式获取 post_url 和请求类型(POST/GET)。
    browser.open(post_url,数据)
    #提交表单(GET请求)
    browser.open(post_url + '%s' % 数据)
    
  2. 重写 javascript 并在 Python 中执行。查看 Spidermonkey。

  3. 模拟完整的浏览器。查看 Selenium 和 Windmill。

Three ways:

The first method is preferable if the form is submitted using the POST/GET method, otherwise you'll have to resort to second and third method.

  1. Submitting the form manually and check for POST/GET requests, their parameters and the post url required to submit the form. Popular tools for checking headers are the Live HTTP headers extension and Firebug extension for Firefox, and Developer Tools extension for Chrome. An example of using the POST/GET method:

    import mechanize
    import urllib
    
    browser = mechanize.Browser()
    #These are the parameters you've got from checking with the aforementioned tools
    parameters = {'parameter1' : 'your content',
                  'parameter2' : 'a constant value',
                  'parameter3' : 'unique characters you might need to extract from the page'
                 }
    #Encode the parameters
    data = urllib.urlencode(parameters)
    #Submit the form (POST request). You get the post_url and the request type(POST/GET) the same way with the parameters.
    browser.open(post_url,data)
    #Submit the form (GET request)
    browser.open(post_url + '%s' % data)
    
  2. Rewrite the javascript and execute it in Python. Check out spidermonkey.

  3. Emulate a full browser. Check out Selenium and Windmill.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文