我正在使用RUBY来屏蔽网页(在asp.net中创建),该网页使用gridview来显示数据。我成功地能够读取网格第1页上显示的数据,但无法弄清楚如何移动到网格中的下一页来读取所有数据。
问题是页码超链接不是普通的超链接(带URL),而是javascript超链接导致回发到同一页面..
超链接的一个例子: -
<a href="javascript:__doPostBack('gvw_offices','Page$6')" style="color:Black;">6</a>
答案 0 :(得分:2)
您需要弄清楚实际的网址。
选项1a:在具有良好开发人员支持的浏览器中打开页面(例如,使用Web开发工具的firefox)并查看源代码以查找定义_doPostBack
的位置。弄清楚它正在构建的URL。请注意,它可能不在主页面源中,而是在页面加载的内容中。
选项1b:同上,但有红宝石做。如果您使用Net:HTTP获取页面,那么您已经拥有了查找__doPostBack
定义的工具(正文为字符串,ruby的grep以及请求其他文件的功能,例如脚本标签)。
选项2:监控浏览器与页面之间的流量(例如,使用日志记录代理),以找出URL是什么。
选项3:询问网页所有者。
选项4:猜猜。这可能没有听起来那么糟糕(例如,如果原始URL以“......?page = 1”或其他东西结束),但通常这是最不可能工作的。
编辑(回复您对其他问题的评论):
假设您使用的是Net:HTTP库,只需将get
替换为post
即可进行回发。 my_http.post(my_url)
代替my_http.get(my_url)
编辑(回应danieltalsky的回答):
watir 对你来说可能是一个非常好的解决方案(我因为没有想到它而踢我自己),但要注意你可能必须manually fire the event或通过其他箍得到你想要的。作为一个具体的问题,对于任何这样的异步提取,你需要确保在你刮掉它之前已经回复了完整的响应;当你自己内联请求时,这不是问题。
答案 1 :(得分:2)
如果您已经使用ruby进行处理,我建议使用Watir,一个专为浏览器测试而设计的ruby库。首先,它为您提供了一个更好的界面来访问页面上的DOM元素,它使这样的点击链接更容易:
ie.link(:text, '6').click
然后,当然您也可以使用更简单的方法来导航表格。这个过程很容易实现自动化:
1..total_number_of_pages.each do |next_page|
ie.link(:text, next_page).click
# table processing goes here
end
我不知道你的用例,但这种方法有其优点和缺点。首先,它实际上运行一个浏览器实例,所以如果你需要经常在后台以完全自动的方式安静地运行,这可能不是最好的方法。另一方面,如果可以启动浏览器实例,那么您不必担心所有回发废话,您只需单击该链接就像您是用户一样。
答案 2 :(得分:1)
您必须执行回发。数据通过表单POST传递回服务器。就像Markus说的那样使用像FireBug或IE 8中的开发者工具和小提琴手来观看流量。但老实说,这是一个使用臃肿的GridView的网络表单,你将进入一个有趣的冒险。 ;)
答案 3 :(得分:0)