标签:close sel header 执行 cat sele 程序 情况 打不开
浏览器自动化程序,感觉最难的就是稳定性。要实现无人值守自动执行,特别是在网络不太好的情况下连续不停顿正常运行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小时以上正常运行,或者连续下载几百本无错,才算大致过关。
标签:close sel header 执行 cat sele 程序 情况 打不开
原文地址:https://www.cnblogs.com/badnumber/p/12078540.html