2011-02-17 98 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。