selenium chrome 服务器资源优化方向

一直在服务器上运行selenium + chromedriver 方式做爬虫, 发现服务器的负载居高不下, 优化了几次supervisor的进程数, 也没有好转......

最近还发现chrome进程又残余....服务器不卡才怪咧....


一怒之下查看了selenium的源码, 找解决办法....


seleniumwire webdriver

我使用的是seleniumwire, 这个第三方包是基于selenium二次封装, 增加了许多实用的功能,  

1) 简单地为chrome浏览器配置代理  (简直是爬虫党的福音, 不过你不嫌麻烦可以在脚本中每次都安装代理插件....)

2) 捕捉所有的请求, 有点像中间人攻击的味道, 用途挺多, 可以改header, 过滤request, 吧啦吧啦......

那么, 我们就首先看看seleniumwire的源码吧....看他究竟做了些什么鬼


seleniumwire里的chrome类

先看初始化方法__init__,  先是调用了一个create_proxy的方法, 哦, 可能有的小伙伴会问这事什么意思, 英语菜不能怪我啊~

就是创建代理, 步入方法里看看呗....


创建代理的方法


创建代理的关键代码

原理是在本地创建了一个代理服务, 把所有请求都转发到我们作为初始化方法参数传进去的代理, 简单说就是二级代理, 


传入代理的形式

来到这里, 差不多就可以知道代码作者的意图了, 就是通过在本地搭建一个http代理服务,来实现真正代理的转发和中间人的作用

回到初始化方法, 最后调用了父类的初始化方法


调用父类初始化方法

那么他的父类是谁呢?


父类

一番追溯, 果然还是selenium中的chrome driver 类, 兜兜转转还是回来了....

那我们也看一下他的初始化方法吧


父类的初始化方法

果然发现有坑!!!!!!!!!!!!!!!!!

前边的逻辑就是加载各种chrome的配置, 后边每实例化一个chrome webdriver实例, 都会开启一个与之对应的driver服务....

来到这里, 我又想起一句最近很火的歌词,   小朋友, 你是否有很多问号?????

这里我安利另一篇我个人觉得写得不错的文章  https://www.jianshu.com/p/195ff63921de


webdriver原理

这个webdriber服务, 就是将我们在python脚本中调用的selenium方法, 转化为对chrome浏览器的操作

下面举个例子,  例如我们在脚本调用了 driver.get(url), 使用浏览器访问一个url网址


driver get()

调用了execute方法执行了与之对应的command


get对应的command

进入execute方法看下:


分析webdriver的execute方法, 

延伸一下session_id, 效果就是打开了一个浏览器,  是在webdirver类的初始化方法创建的....没留意到的人请自觉点赞......


初始化方法调用start_session创建session_id

言归正传, 继续深入, 看command_executor的execute方法, 


RemoteConnection类

RemoteConnection这个类才是归根到底, 是如何去发http请求driver服务,最终转化为操作浏览器命令的所在

看下边的命令, 是不是有点头绪了呢...


command


command_executor的execute方法

至此我也是刚发现, 原来调用selenium中的很多方法都是有返回值的, 就是driver服务的响应内容

跑题了!!! 回到最初....说了辣么多, 大概都懂了吧

优化方向就有了,  原先是每个实例开启一个driver服务, 改进为多个实例共用一个driver服务,

是否可行??? 官方文档都建议共用一个driver服务

看了官方文档案例用的是Remote的链接方式,其好处是每次启动chromedriver,都是通过remote的方式去连接到共用的chromedriver(开放9515端

口),这样子能够节省很多服务器的资源;而直接用webserver.Chrome的方式连接chromedriver

开始改造: 为了不影响源码, 我把selenium chrome webdriver 的类复制一份, 单独拿来修改,


改造方法

改完啦, 看懂一两天, 改造一分钟,   这就完事了, 真短~~~~(我说的是时间)

ok 在本地开启9515的driver服务 , 试下运行测试脚本, 脚本中记得要引入的是我们自己改造的类, 不是selenium的原始类


本地开启9515的driver服务


有这句输出证明我们使用改造好的类, 再用ps查看 chromedirver相关进程, 一直只有一个9515端口的进程,

改造成功!!!!!!!!!!!!!!!!!!!!!!撒花

有个东西注意一下, quit方法在退出的时候要把self.seriver的相关操作注释掉, 否则会报错


quit方法注意修改

ps -ef|grep chrome|wc -l  查看一下chrome的进程, 比之前少了很多很多, 嗨心~~~~~

最后埋个坑给大家:

造成chrome残余进程的一个原因, 在driver实例化的时候失败, 最后不能调用quit方法退出

有能解决的大佬评论一下


driver实例化失败

百度一下查到了可能的原因, 


异常原因

可能是代理商服务器压力太大, 主动关闭了一些tcp链接.....这可坑了我~~~~

好了, 写得不怎么样, 有问题有建议可以评论留言....

赛有拉拉

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容