浏览器自动化的一些体会10 稳定性的零星体会

浏览器自动化程序,感觉最难的就是稳定性。要实现无人值守自动执行,特别是在网络不太好的情况下连续不停顿正常运行8小时或更长时间,是不太容易的。因为很多异常情况难以预料。做好以下几点有帮助:

1)如果是在visual studio下调试,应该把Debug - Exceptions - Managed Debugging Assistants - ContextSwitchDeadLock 的Thrown的打勾去掉,这样可以避免运行到一半,突然出现一个提示,中断程序的执行。

2)如果是用webBrowser控件,ScriptErrorsSuppressed要设成true,这样可以避免预料不到的js错误提示,中断程序执行。

3)如果用selenium,切记driver很容易抛异常,凡是有driver的地方,哪怕是driver.PageSource这样一般不太容易出现异常的地方,也要加上try catch,小心驶得万年船。driver.Close() 一定要加try catch。网络条件不好时,很容易出现超时,也要try catch住。

4)要注意延时。比如IO操作,selenium里用javascript打开新页面等,都需要延时。如果用timer太麻烦,就用Thread.Sleep。反正目的是无人值守自动执行,所以界面阻塞一点问题不大。

5)切记网络条件不好的情况下,任何页面都可能出现各种各样的异常,比如整个页面都取不到,浏览器出现空白页面;加载一半;长时间加载,总也不结束;等等。所以用javascript,webBrowser控件,或者selenium取元素时,一定要先检测是否存在,不能想当然,以避免因为找不到出现异常。

同时,每取一次页面,都要检测页面是否加载完全。我的做法是查找某个元素是否存在,若存在则假设页面已加载全了。

6)如果使用代理服务器,可能出现的问题就更多了。比如httprequest的header不能随便加,取页面可能出现各种各样意想不到的错误,等等。使用代理服务器取页面时,一定要不停地检测元素是否存在,并加入适当的重试机制。

7)意想不到的prompt, confirm窗口是很讨厌的。如果用selenium,可以加入适当的检测机制,

8)基本的原则是所有可能的异常都catch住,同时要加上适当的重试机制。重试时要加上适当的延时。比如某个页面打不开,不要连续多试,而要延时几秒后再试,效果好得多。

9)一定要大量测试。比如做下载书的程序,不要以为能下载一两本,十几本就算大功告成。连续8小时以上正常运行,或者连续下载几百本无错,才算大致过关。

猜你喜欢

转载自www.cnblogs.com/badnumber/p/12078540.html
今日推荐