抓取iframe内数据(C#)

      当时企图抓取这iframe数据还费了不少劲,早就想记录下来,但是由于自身懒得让人惊叹,结果一直拖到现在。

      需求是要获取到一些网站上的大批数据,这些数据都是分很多页的。最初思路就是用web程序一页一页抓取,保存到Excel中。通常情况下用以下代码就能取到网页HTML文档:

WebRequest rqt =WebRequest.Create("http://www.xxxx.com");

WebResponse res = rqt.GetResponse();

Stream resStream = res.GetResponseStream();

StreamReader sr =newStreamReader(resStream, System.Text.Encoding.UTF8);

string strHtml = sr.ReadToEnd();   //获取到的HTML

resStream.Close();

sr.Close();

再解析HTML,截取需要的部分存储。

但发现,部分网页数据必须嵌套在iframe内才能显示正确结果,直接访问就显示“非法操作!”,且不论GET还是POST方式。

把iframe弄成服务器控件,试图后台获取它的InnerHtml,但得不到iframe内的文档。再用JS取试试:document.frames["iframe1"].document.body.innerHTML,在iframe内嵌套的是站内网页的情况下,这种方式是能取到数据的。若是站外的网页,会提示错误:“拒绝访问。”,这个是JS跨域问题造成的。搜下资料,有说jQuery能通过jsonp解决跨域问题,不由欣喜地认真地学习实战了一番,结果证实尼玛这是忽悠呢。jQuery要求被访问的URL最终返回jsonp数据才能解析。这对我的情况明显不实用,我要能控制请求的页面,还抓什么数据啊,直接到数据库操作不就行了。而且jsonp的实质是使用html的script标记来进行跨域请求,又回到前面的问题,这个URL只能嵌套在iframe内才能得到正确结果,绕一圈原来是白忙一气!

在有点泄气的时候,用IE的开发人员工具查看iframe内的文档,惊觉:C/S程序权限高更容易实现?!立马就想到WebBrowser控件,动手建立WinForm项目,一番捣鼓运行测试,哈,豁然开朗!WebBrowser操作iframe比JS顺畅N多,整理一下用法:

     1.读取iframe内HTML文档

  如:webBrowser1.Document.Window.Frames["iframe1"].Document.Body.InnerHtml

     2.读取iframe内元素的HTML

  如:webBrowser1.Document.Window.Frames["iframe1"].Document.GetElementsByTagName("table")[1].OuterHtml

     3.点击iframe内按钮

  如:webBrowser1.Document.Window.Frames["iframe1"].Document.GetElementsByTagName("input")[0].InvokeMember("click");

     4.改变iframe的目标文档(翻页时可用到)

  如:webBrowser1.Document.GetElementsByTagName("iframe")["iframe1"].SetAttribute("src","javascript:goto(2);");

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值