C# 引用SHDocVw 实现模拟网页操作

因为最近项目需要,所以接触到了网页爬取。

  • 1. HttpWebRequest

    初期接触的都是一些比较简单的网页,通过Fiddler抓包分析后,就能模拟进行http请求,进行想要的操作。

  • 2. WebBrower控件

    后面接触到一些复杂的网页,模拟登录一套比较难实现,并且网站是加密的,Fiddler抓包后根本分析不出来,所以采用了webbrower控件,直接用户手动登录,登录后程序再自动完成后续操作。

  • 3. SHDocVw.InternetExplorer

    再后来,遇到有些问题webbrower解决不了(点击按钮后无正确响应,不知道是iframe的原因还是跨域js的问题),就在网站找到了这个。

    这个在网上搜索一下有很多,一些基本操作都有提到,如:获取IE、打开指定URL、获取控件、执行控件click、执行JS等。

    但要实现自动化,一个最重要的就是判断当前页面加载完毕,这个网上提及到的比较少,下面是在网上辛苦搜集的一些方法:

  1. ReadyState

判断到ReadyState==tagREADYSTATE.READYSTATE_COMPLETE,则是加载完成。

但是在实际使用过程中有些情况(比如某些页面的form提交查询)ReadyState是不会发生变化的,及状态一直是complete,所以此种判断不准确。

  1. StatusText

判断StatusText是否包含“完成 ”,如果包含则说明页面加载完成,不包含则未加载完成。

  1. DocumentComplete事件   

当页面完成加载的时候都会触发DocumentComplete事件,所以我们可以通过DocumentComplete设置信号量来实现。

你可能感兴趣的:(C# 引用SHDocVw 实现模拟网页操作)