首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >屏幕抓取ASP.NET网页以检索网格视图中显示的数据

屏幕抓取ASP.NET网页以检索网格视图中显示的数据
EN

Stack Overflow用户
提问于 2009-03-25 16:51:28
回答 4查看 2.7K关注 0票数 2

我正在使用RUBY来屏蔽一个网页(在asp.net中创建),它使用网格视图来显示数据。我能够成功地读取网格第-1页上显示的数据,但无法弄清楚如何移动到网格中的下一页来读取所有数据。

问题是页码超链接不是普通的超链接(带有URL),而是javascript超链接,这会导致回发到相同的页面。

超链接的一个示例:

代码语言:javascript
复制
<a href="javascript:__doPostBack('gvw_offices','Page$6')" style="color:Black;">6</a>
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-03-25 17:07:47

如果您已经在使用ruby进行处理,我推荐使用Watir,这是一个为浏览器测试而设计的ruby库。首先,它为页面上的DOM元素提供了一个更好的接口,并使单击这样的链接变得更容易:

代码语言:javascript
复制
ie.link(:text, '6').click

当然,您也可以使用更简单的方法来导航表。自动化这个过程非常简单:

代码语言:javascript
复制
1..total_number_of_pages.each do |next_page|

  ie.link(:text, next_page).click
  # table processing goes here

end

我不知道您的用例,但这种方法有其优点和缺点。首先,它实际上运行一个浏览器实例,所以如果你需要经常以完全自动化的方式在后台安静地运行,这可能不是最好的方法。另一方面,如果可以启动浏览器实例,那么您不必担心所有的回发废话,您只需像用户一样单击链接即可。

Watir:http://wtr.rubyforge.org/

票数 2
EN

Stack Overflow用户

发布于 2009-03-25 17:02:14

您需要弄清楚实际的URL。

选项1a:在具有良好开发人员支持的浏览器(例如,带有web开发工具的firefox )中打开页面,并查看源代码以查找定义_doPostBack的位置。找出它正在构造的URL。请注意,它可能不在主页源代码中,而是在页面加载的内容中。

选项1b:同上,但让ruby来做。如果您正在使用Net:HTTP获取页面,那么您已经拥有了查找__doPostBack定义的工具(字符串形式的正文、ruby的grep,以及请求额外文件的能力,比如脚本标记中的文件)。

选项2:监控浏览器和页面之间的流量(例如,使用日志记录代理),以找出URL是什么。

选项3:询问网页的所有者。

选项4:猜测。这可能不像听起来那么糟糕(例如,如果原始网址以"...?page=1“或其他什么结尾),但一般来说,这是最不可能的工作。

编辑(回应您对另一个问题的评论):

假设您使用的是Net:HTTP库,您只需将get替换为post即可进行回发,例如my_http.post(my_url)而不是my_http.get(my_url)

编辑(回应danieltalsky的回答):

watir对你来说可能是一个非常好的解决方案(我为自己没有想到它而感到后悔),但要知道你可能不得不manually fire the event或经历其他困难才能得到你想要的东西。作为一个特定的陷阱,对于任何像这样的异步fetch,在抓取它之前,您需要确保完整的响应已经返回;当您自己进行内联请求时,这不是问题。

票数 2
EN

Stack Overflow用户

发布于 2009-03-25 17:09:57

您必须执行回发。数据通过表单POST传递回服务器。就像马库斯所说的那样,使用诸如FireBug之类的工具或者IE8中的开发人员工具和fiddler来观察流量。但老实说,这是一个使用臃肿的GridView的网页表单,你将会经历一次有趣的冒险。;)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/682453

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档