【问题标题】:Navigate through result pages using ruby mechanize (links have "onclick=" defined)使用 ruby​​ mechanize 浏览结果页面(链接已定义“onclick =”)
【发布时间】:2016-09-01 05:29:26
【问题描述】:

在使用 ruby​​ mechanize 浏览结果页面时需要帮助。我可以提交表单值并下载第一页的结果。下一页的链接是

 <a href=# onclick="setnext();">Next</a> 

如何单击下一步并导航到后续结果页面。我试过了

 page = r_page.link_with(:text => 'Next').click

也使用了 watir

@browser = Watir::Browser.new
@login_page = result_page
@l_page = @login_page.link(:text => "Next").fire_event('onclick') 
@browser.goto @l_page

我收到该 URL 的错误消息

<a href=# onclick="setnext();">Next</a> 

格式不正确。我还尝试使用 page_no 作为参数调用该页面,但它加载了表单提交页面而不是结果页面。请帮忙。 谢谢你。

【问题讨论】:

  • &lt;a href=# onclick="setnext();"&gt;Next&lt;/a&gt; 不是有效的 html,它需要在 # 周围加上引号
  • 是的,你没看错,是href="#"
  • 你能给我result_page url吗?
  • result_page 是表单提交得到的结果页,代码如下 - r_page = form.submit form.button_with(:id => 'search_button') result_page = r_page.search('//table [2]/tr[2]//a') 只不过是“下一页”页面的链接。希望这可以帮助。谢谢。
  • 最好的办法是用 watir 调用 setNext()。

标签: ruby pagination mechanize watir


【解决方案1】:

关键是,mechanize 不会解释单击按钮时应执行的 JavaScript 函数 (onclick="setnext();")。

您至少有两个选择:

  1. 阅读并理解 JavaScript 代码(或通过它进行调试)。
  2. 使用浏览器附带的工具(例如,Mozilla Firefox 中的 Developer,通常通过按 F12 访问,Chromium 附带非常类似的东西),前往网络选项卡并检查实际发生的流量。当您单击按钮/链接时,您将看到对特定 URL 的 GET/POST 请求(带有一些有趣的参数?),并且可能能够弄清楚 URL 和参数是如何构造的。

由于我比较懒,对HTTP理解够多,对阅读JS代码还不够喜欢,所以我通常使用第二种方法。

因为mechanize 不会开箱即用地解释 JavaScript,所以我先在浏览器中关闭 JavaScript,然后查看页面是否正常工作。如果没有,我查看生成的请求(再次打开 JS)。

【讨论】:

  • 关闭 javascript 后页面行为发生变化。 setnext() 的 js 代码有 getElementById("Selected_pa​​ge").value=2。我以为我们可以使用 watir 调用 onclick 函数,但这也不起作用,是否有其他方法可以使用 watir 触发 onclick javascript 函数。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-21
  • 1970-01-01
  • 2014-02-20
  • 2014-09-23
  • 2016-02-27
  • 1970-01-01
相关资源
最近更新 更多