资料来源:网络整理
时间:2023/2/14 0:55:32 共计:3625 浏览
当时企图抓取这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);");

版权说明:
本网站凡注明“广州京杭 原创”的皆为本站原创文章,如需转载请注明出处!
本网转载皆注明出处,遵循行业规范,如发现作品内容版权或其它问题的,请与我们联系处理!
欢迎扫描右侧微信二维码与我们联系。