我需要抓取一个页面
首次加载是读取到内容
抓取子页面时,
this.webBrowser1.Navigate(url);
this.webBrowser1.Refresh();
var doc = this.webBrowser1.Document;
获取的还是第一次加载的内容
这个该怎么解决
补充
HttpWebRequest 抓取不到页面元素
webBrowser2和webBrowser1,控件是同一个吗?
是的,题目内容修改了,谢谢
@学点东西:): webbrowser控件访问页面,页面加载完成才能得到document,给它加一个加载完成事件,或者直接使用WebClient进行访问页面抓取,比webbrowser方便多了。
@JeffWong: http://m.lechebang.com/webapp/car/brand
@JeffWong: http://m.lechebang.com/webapp/car/brand 抓不到标签
@学点东西:): 试一下下面的代码:
var webBrowser = new WebBrowser(); webBrowser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(GetDocument); webBrowser.Navigate(" http://m.lechebang.com/webapp/car/brand"); webBrowser.Refresh();
页面加载后回调事件代码:
private void GetDocument(object sender, WebBrowserDocumentCompletedEventArgs e) { var browser = ((WebBrowser)sender); var doc = browser.Document; var html = browser.DocumentText; }
@JeffWong:
for
{
this.webBrowser1.Url = new Uri(url);
this.webBrowser1.Refresh();
}
@JeffWong:
for
{
this.webBrowser1.Url = new Uri(url);
this.webBrowser1.Refresh();
}
@JeffWong:
for
{
this.webBrowser1.Url = new Uri(url);
this.webBrowser1.Refresh();
}
如果这样怎么做到呢?
@JeffWong:
不好意思,回复太多了,如何才能做到for循环呢? 为什么循环后,事件方法只到最后一次循环的地址呢
@JeffWong:
刚才我添加for了,但是用了你的方法加载不全,js没有完全加载上去
@学点东西:): webBrowser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(GetDocument);这行代码必须加进去,和循环没关系。
@JeffWong: 嗯,我添加,GetDocument 能读到数据但是不是最终加载的数据,还有些js显示的数据加载不上
@学点东西:): 通过路径引入的.js文件需要重新发起请求抓取
@JeffWong: 俄,貌似这样不太好吧,我先直接加载完全之后在读取内容
webBrowser的版本设置对了吗?它默认是用最低版本的。
。。。这个怎么设置?属性没有找到
@学点东西:):
你看这里吧:
http://www.cyotek.com/blog/configuring-the-emulation-mode-of-an-internet-explorer-webbrowser-control
我觉得对于开发者来说,能脚本化编写爬虫是一件挺开心的事情( ̄▽ ̄)"。所以我们团队开发了一个专门让开发者用简单的几行 javascript 就能在云上编写和运行复杂爬虫的系统,叫神箭手云爬虫开发平台: http://www.shenjianshou.cn 。欢迎同行们来试用拍砖,尽情给俺们提意见。有想法的可以加群讨论: 342953471