浏览器自动化的一些体会

这应该也是一个系列,边整理,边记录。

 

浏览器自动化(browser automation) 我的理解就是用代码模拟浏览器的行为。

这里说的基本上是基于C#的实现。

大致可能有这几种方法(这里只是一个概述,详细以后讨论):

1.用httprequest,或者用webclient,后者相当于包装了httprequest。

好处是简单,比如用webclient简单地下载一个网页。另外,无需界面,这对于某些有必要隐藏界面的应用是有用的。

缺点主要是无法执行javascript,处理有cookie的网页较麻烦等

2.用webBrowser控件。这是.net自带的,但如果需要某些加强的功能时,比如要支持代理服务器切换,不加载图片等,需要定制一下webBrowser。

优点一是不要去考虑session,cookie什么的,二是可以执行javascript

缺点一是不支持https,二是只能用ie浏览器,三是Document_Completed是异步的,有时候不太方便

3.用selenium的web driver。

优点一是和上面一样,不用去考虑session,cookie什么的,二是可以方便地保留状态,比如某些网站,只需登陆时选中一直在线,下次启动应用访问同一个网站时,不用重新登陆,三是可以执行javascript,四是支持https,五是支持多个浏览器,六是Navigate是阻塞的,很多情况下比较方便,七是某些操作如保存网页中图片等比webBrowser方便。总之感觉总体上功能比上面的webBrowser控件强大许多。

缺点一是感觉有些版本和firefox配合不好,二是FindElement找不到就出exception,也许因为selenium本意是用于测试的,这样做有点道理,但动不动出exception,对于开发来说很头大,我一般用PageSource.Contain来代替FindElement

4.用curl/wget/aria2等工具

这些都是命令行工具,.net里调用不是太方便,但也不失为一种方法。

5.用某些windows api,如URLDownloadToFile等。上面说的“定制”webBrowser控件,也需要用到很多windows api。

另外,也许严格地来说不能叫浏览器自动化,但我觉得也有点联系,就是浏览器插件,不妨也提一提。ie用BHO,尚未动手做过,不好多说。看网上的资料说微软似乎是不鼓励这种做法的。firefox以前开发了一套插件系统,所谓的xul,功能很强大,但现在说要抛弃了,和chrome一样用什么web extension,用了下,感觉很不爽,具体以后再说。

总之,这里只简单地分个类,详细都以后再说。也许我孤陋寡闻,似乎网上还少有这样比较详细的分类总结。

posted @ 2018-01-05 00:47  平静寄居者  阅读(1479)  评论(0编辑  收藏  举报