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

原文地址:https://www.cnblogs.com/badnumber/p/12078540.html

时间: 2024-10-15 11:16:26

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

浏览器自动化的一些体会2 webBrowser控件之ajax

上个帖子简要讨论了浏览器自动化的几种方法.现在讨论webBrowser控件使用中的一些问题.基本的操作就不详细说了,随便网上找个帖子或找本书都有介绍的.这里只写点网上似乎少有人总结过的内容,以及自己的一些实践体会. 1.ajax 首先,DocumentCompleted事件对于ajax无能为力,因为这个事件不能处理网页加载完成后执行javascript发出ajax请求.网上可以找到的方法,主要有两种,一种是利用onpropertychange事件,随便找了个参考链接:https://social

splinter python浏览器自动化操作,模拟浏览器的行为

Splinter可以非常棒的模拟浏览器的行为,Splinter提供了丰富的API,可以获取页面的信息判断当前的行为所产生的结果 最近在研究网站自动登录的问题,涉及到需要实现浏览器自动化操作,网上有不少介绍,例如使用pamie,但是只是支持IE,而且项目也较久没有更新了.还 有就是利用selenium,可支持多种浏览器.网上资料比较多.经过比较,我选择了Splinter模块,因为利用Splinter开发浏览器自动化操 作,编写代码比较简单. 一.Splinter的安装 Splinter的使用必修依

《python3自动化接口+selenium》10月13号开学!(2个月2000,包教会)

<python3自动化接口+selenium>10月13号开学!(2个月2000,包教会) 主讲老师:上海-悠悠 上课方式:QQ群视频在线教学 报名费2000一人(周期2个月) 联系QQ:283340479 个人成就: 1.个人博客,百度直接搜索:上海-悠悠博客 2.个人原创微信公众号:yoyoketang 3.已经在百度阅读上线的书,百度搜索:百度阅读,再搜索书名: <selenium webdriver基于源码案例>-作者:七月份的尾巴_葵花&上海-悠悠 <pyt

浏览器自动化的一些体会4 webBrowser控件之零碎问题2

1. DocumentCompleted的多次执行问题 有的网页,会多次触发DocumentCompleted事件,由于它是异步的,不会阻塞,所以如果不恰当处理,会造成某些代码被错误地多次执行,造成意想不到的结果. 我一般的做法,是定义一个全局变量(winform里form的成员变量),如下面代码所示: private string _type; private void button1_Click(object sender, EventArgs e) { _type = "test"

浏览器自动化的一些体会7 selenium webdriver的一些问题

1. 下载图片 这个链接说得最好,差不多所有可能的方法都列举了,除了没有提到用URLDownloadToFile,不过这和用WebClient差不多. https://stackoverflow.com/questions/18424624/using-selenium-to-save-images-from-page/48871283 2. 完全退出selenium 一般情况下,用webdriver的Quit方法就可以了.但是某些情况下,也有可能没用.这时,就只能杀进程了. 有意思的是,IEW

浏览器自动化的一些体会11 webclient的异步操作

原来的代码大致如下: private void foo(string url) { using (WebClient client = new WebClient()) { client.DownloadProgressChanged += (obj, ev) => { client.CancelAsync(); }; client.DownloadStringCompleted += (obj, ev) => { ................ Thread.Sleep(30000); b

Java+selenium+Firefox/ IE/ Chrome主流浏览器自动化环境搭建

一.java+selenium+firefox 1.环境准备:JDK1.8 2.安装firefox浏览器v59 3.下载驱动:https://github.com/mozilla/geckodriver/releases 4.selenium依赖pom.xml导入:https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java selenium 历史版本镜像下载地址:https://npm.taobao.org/m

python 自动化之路 day 10

本节内容 Gevent协程 Select\Poll\Epoll异步IO与事件驱动 Python连接Mysql数据库操作 RabbitMQ队列 Redis\Memcached缓存 Paramiko SSH Twsited网络框架 引子 到目前为止,我们已经学了网络并发编程的2个套路, 多进程,多线程,这哥俩的优势和劣势都非常的明显,我们一起来回顾下 协程 协程,又称微线程,纤程.英文名Coroutine.一句话说明什么是线程:协程是一种用户态的轻量级线程. 协程拥有自己的寄存器上下文和栈.协程调度

Python自动化运维之10、模块之json、pickle、XML、PyYAML、configparser、shutil

序列化 Python中用于序列化的两个模块 json     用于[字符串]和 [python基本数据类型] 间进行转换 pickle   用于[python特有的类型] 和 [python基本数据类型]间进行转换 Json模块提供了四个功能:dumps.dump.loads.load pickle模块提供了四个功能:dumps.dump.loads.load json模块 # json()将字符串形式的列表或字典转换为list或dict类型,json是所有语言相互通信的方式# 注意外层字符形式