Как указано в этом ответе , вы можете просто построить новый Mechanize::Form
объект, используя Nokogiri::XML::Element
, полученный с помощью Mechanize::Page#search
или Mechanize::Page#at
:
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 в элементы Mechanize, а преобразования выполняются там, где онинеобходимы.Следовательно, написание метода, который ищет документ с помощью CSS или XPath и возвращает элементы Mechanize, если это применимо, потребует довольно большого случая переключения на типе узла.Не совсем то, что я себе представлял.