2014-10-08 66 views
2

我想寫一個簡單的機器人,它將登錄到我的帳戶在一個頁面上,然後評論其他用戶的圖像。但是,我無法正確提交評論表單提交工作。註釋形式如下:Python機械化表單提交不起作用

<form id="comment-form" action="#" onsubmit="postComment($(this).serialize(),'image',117885,229227); return false;"> 
    <input class="comment" type="text" size="40" name="comment" id="comment" /> 
    <input type="hidden" name="commentObj" value="9234785" /> 
    <input type="hidden" name="commentMode" value="image" /> 
    <input type="hidden" name="userid" value="12427" /> 
    <input class="submit" type="submit" value="Comment" /> 
</form> 

我的代碼如下

br.select_form(nr = 1) 
br.form['comment'] = 'hello' 
br.submit() 

頁有兩種形式和註釋的形式是第二個。所以我相信我已經選擇了正確的形式。任何人都可以解釋爲什麼這不起作用?

+0

闡述了「不工作」的一部分可以顯著增加你獲得一個很好的答案的機會。 – bereal 2014-10-10 18:02:31

回答

3

有,而表單提交正在發生的事情正在執行JavaScript代碼:

onsubmit="postComment($(this).serialize(),'image',117885,229227); return false;" 

mechanize根本無法處理它,因爲它不是一個瀏覽器,它沒有內部的JavaScript引擎。

可能的解決方案:

  • 一個高層次的方法 - 使用一個真正的瀏覽器通過selenium webdriver的和自動化的使用行爲 - 發送鍵輸入,點擊提交按鈕等,示例代碼:

    from selenium import webdriver 
    
    driver = webdriver.Firefox() 
    dirver.get('my_url_here') 
    
    comment = driver.find_element_by_id('comment') 
    comment.send_keys('hello') 
    comment.submit() # this would find an enclosing form and submit it 
    
  • 研究在表單提交事件被觸發時,哪些請求被髮送到服務器。然後,使用例如requests自動執行請求。

希望有所幫助。

0

如果我深知必須用本嘗試改變代碼

br.select_form(nr = 1) 
br['comment'] = 'hello' 
br.submit()