就像說in this answer您可以使用通過Mechanize::Page#search
或Mechanize::Page#at
檢索您的Nokogiri::XML::Element
簡單地構建一個新的Mechanize::Form
對象:
a = Mechanize.new
page = a.get 'https://stackoverflow.com/'
# Get the search form via ID as a Nokogiri::XML::Element
form = page.at '#search'
# Convert it back to a Mechanize::Form object
form = Mechanize::Form.new form, a, page
# Use it!
form.q = 'Foobar'
result = form.submit
注意:您必須提供Mechanize
對象和Mechanize::Page
對象的構造是能夠提交表格。否則,它只是一個沒有上下文的Mechanize::Form
對象。
人們似乎沒有中央的效用函數轉換Nokogiri::XML::Element
s到機械化的元素,而是在轉換來實現需要的地方。因此,編寫一種通過CSS或XPath搜索文檔並返回Mechanize元素(如果適用)的方法需要在節點類型上有一個相當大的開關情況。不完全是我想象的。
您是否有一個表單字段的示例,您無法識別機械化? – 2012-02-05 01:53:05
@mark在相關頁面上的所有表單和表單域都有隨機生成的ID和名稱。當然,沒有任何元素是你無法識別的,因爲你總是可以做某事。像'page.forms [3]'。但使用'page.search'.main-content form''檢索該表單更具有意義,恕我直言,當網站上的某些內容發生變化時可能不太容易中斷。 – raphinesse 2012-02-05 13:31:22
我相信你可以在[這個舊的答案]找到你的答案(http://stackoverflow.com/questions/2469117/nokogiri-error-undefined-method-radiobutton-with-why/6003166#comment11504418_6003166)。 – Phrogz 2012-02-05 14:21:05