2014-11-07 25 views
1
<p class="field switch"> 
      <label id="on" class="cb-enable"><span>On</span></label> 
      <label id="off" class="cb-disable selected"><span>Off</span></label> 
</p> 

任何想法如何點擊id =「on」的標籤?這是一個開關,我想通過點擊「打開」標籤從關閉切換到打開。如何點擊機械錶格中的標籤?

事情我已經嘗試:

br.form.get(label="On").click() 
br.form.find_control(id="on").click() 

文檔:http://wwwsearch.sourceforge.net/mechanize/forms.html

任何想法?

+0

作爲結果你期望什麼?在Mechanize AFAIK中沒有JS支持,另見http://stackoverflow.com/questions/802225/how-do-i-use-mechanize-to-process-javascript。 – 2014-11-09 20:28:46

+0

結果應該將'selected'移動到'on'標籤上。點擊時會發生這種情況。 – User 2014-11-09 20:30:02

回答

2

Mechanize沒有javascript支持,所以沒有點擊事件觸發。此外,您顯示的HTML不包含輸入元素,因此機械化無法對其執行任何操作。

如果真正需要使用Javascript這個網站比我推薦使用WatirSeleniumScrapyScrapyJS

隨着機械化可以手動編輯像這樣的迴應:

import mechanize 

class ReplacingOpener(mechanize.SeekableResponseOpener): 
    def process_response_object(self, response): 
     response = mechanize.SeekableResponseOpener.process_response_object(
      self, response) 

     # Get the HTML from the response 
     html = response.read() 

     # Replace the HTML here with anything you feel like 
     html = html.replace('</body>', '') 

     # Set it back to the response 
     response.set_data(html) 
     return response 


opener = mechanize.OpenerFactory(ReplacingOpener).build_opener() 
response = opener.open('http://stackoverflow.com/questions/26793091/') 

forms = mechanize.ParseResponse(response) 
print forms 
+1

難道只有修改瀏覽器端源代碼並提交它嗎?我只需要在'on'標籤中選擇'selected'。 – User 2014-11-09 20:39:22

+1

有沒有明確的文件記錄的方式來修改源代碼,但你可以使用自定義開罐器,我會寫一個例子。給我幾分鐘。 – Wolph 2014-11-09 20:52:19

+0

@macdonjo:看看我已經添加的例子:) – Wolph 2014-11-09 21:19:09

0

這是一個有點機械化棘手(參見@沃爾夫的答案)。

爲什麼你說硒是矯枉過正?它看起來像這樣:

from selenium import webdriver 
url = "http://www.dummy.com/page.html" 
click_id = 'on' 
driver = webdriver.Firefox() 
driver.get(url) 
driver.find_element_by_id(click_id).click() 
new_page = driver.page_source 
+0

FireFox在一個小小的Linux VPS我只是認爲是過度殺傷。 – User 2014-11-12 18:17:19

+0

是的,你已經說過了。但爲什麼? :p ... sry我有點固執:-) – 2014-11-13 09:21:15