Механизация: выбор права отправки из нескольких в одной форме - PullRequest
3 голосов
/ 11 апреля 2011

Я использую Механизировать, чтобы перебрать таблицу, которая разбита на страницы.

У меня проблема с формой, которая содержит несколько отправленных входных данных. Входные теги используются как нумерация страниц и генерируются динамически. Когда я перебираю страницы, которые мне нужно почистить, мне нужно иметь возможность выбрать правильный ввод, поскольку только одна из них приведет меня к «следующей странице». Правильный тег может быть идентифицирован по различным атрибутам, таким как имя, класс, значение и т. Д. Однако моя проблема в том, что я не могу понять, как указать механизму, какой из них использовать.

Я пробовал это:

require 'mechanize'
require 'yaml'

url = "http://www.somewhere.com"

agent = Mechanize.new
page = agent.get(url)

loop do

  puts "some content from site using nokogiri"

  if next_page = page.form_with(:action => /.*/)
    page = next_page.submit(page.form_with(:action => /.*/).submits[3])
  else
    break
  end

end

Из этого поста, http://rubyforge.org/pipermail/mechanize-users/2008-November/000314.html,, но, как уже говорилось, количество тегов меняется, поэтому просто выбрать жестко закодированное число отправленных сообщений - не слишком хорошая идея.

Я хотел бы знать, есть ли такой способ:

loop do

  puts "some content from site using nokogiri"

  if next_page = page.form_with(:action => /.*/)
    page = next_page.submit(:name => /the_right_submit_button/)
  else
    break
  end

end

или что-то в этом роде, может быть с селектором css или xpath.

1 Ответ

6 голосов
/ 12 декабря 2011

Я обычно использую form.button_with, чтобы выбрать правую кнопку для нажатия:

form = results_page.forms[0]
results_page = form.submit(form.button_with(:name=>'ctl00$ContentBody$ResultsPager$NextButton'))
...