使用 Ruby Mechanize 通过 <a> 元素提交表单

Submitting a form via an <a> element with Ruby Mechanize

我在 Ruby 中尝试使用 Mechanize 抓取一组页面。在某些页面上,他们重定向到一个页面,要求我填写 select-list 表单然后提交。问题出在提交表单的按钮上,它是一个 <a> 元素。它看起来像这样:

<a class="css_class" href="#" onclick="RunSomeScript; return false;">
  <span>
    Enter
  </span>
</a>

RunSomeScript 脚本似乎正在发生魔法;它似乎绕过了重定向页面并将我带到包含我试图抓取的数据的页面。不幸的是,我似乎无法弄清楚如何使用 Mechanize 正确提交表单。我尝试通过将 <a>href 属性传递给它来在 <a> 元素上使用 Mechanize#click 方法,但这似乎也没有用。我如何自动点击此 link(即提交表单)正确 and/or 运行 RunSomeScript 脚本以便在此重定向页面上提交表单?

我不知道你是否或如何让机械化来支持 javascript,但我看到了你可能会关注的其他项目:

Capybara,使用 poltergeist (phantomjs) 驱动程序或 watir,也许还使用其 phantomjs 支持。

我认为您可以直接找到表格并使用 Mechanize 提交,即

# if condition checks if the form exists with the id the add some fields to it and then submit    
if page.search("#ctl00_ContentPlaceHolder1_ctrlResults_gvResults_ctl01_lbNext").count > 0
              form = page.forms.first
              form.add_field! "__EVENTTARGET", "ctl00$ContentPlaceHolder1$ctrlResults$gvResults$ctl01$lbNext"
              form.add_field! "__EVENTARGUMENT", ""
              page = form.submit

在你的情况下,你可以使用一些 id 找到表单,或者只使用

form = page.forms.first  
# do whatever you want with this form and then 
page = form.submit