2011-02-17 100 views
10

所以,我从机械化开始,显然我尝试的第一件事是猴子 - 犀牛级高级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() 

回答

11

三种方式:

如果使用POST/GET方法提交表单,则优先使用第一种方法,否则您将h大都会诉诸第二和第三种方法。

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

    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. 重写JavaScript并在Python中执行它。检查出spidermonkey。

  3. 仿真一个完整的浏览器。看看Selenium和Windmill。