使用 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
我在 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