浏览器自动化的一些体会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小时以上正常运行,或者连续下载几百本无错,才算大致过关。

posted @   平静寄居者  阅读(224)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示