| 关键词: selenium 爬虫 工具 Chrome webdriver 代码 不断 工程师 如果 |
前言最近面试了不少爬虫工程师,发现selenium是最多的反爬技术之一(不得不说用的多的应聘者基本没过面试)。大部分人应对比较麻烦的反爬第一想到了就是这个工具,反爬实现原理则一问三不知,不得不说selenium是个很简单的工具,基本会python的都能用,但是性能是否太差了?爬虫工程师的技术壁垒呢?字体库反爬呢?最核心的一个问题:被识别到使用selenium呢??? 爬虫:日益增强的对抗首先不得不赞同selenium的简单 from selenium.webdriver import Chrome driver = Chrome() ![]() 两行代码实现驱动chrome浏览器,只需要在后面控制打开的url,做一些常规的渲染等待即能完成一个页面的爬取,中间不需要做太多的反爬(异步加载等等)。 反爬的不断迭代随着大量的selenium的使用,反爬工程师也慢慢开始了对抗selenium类的渲染工具(我偶尔偷懒用的splash都在内),下面一行代码就能知道一个是否为selenium。 window.navigator.webdriver ![]() 开发者工具执行js 如果手动打开浏览器,执行相同的命令,可以发现这行代码的返回值为undefined,这里就不赘述了。 由此网站只要在页面加载的时候运行这个js代码,就可以识别访问者是不是用的Selenium模拟浏览器。如果是,就禁止访问或者触发其他反爬虫的机制。我们可以用过JS来绕过去,如下面 Object.defineProperties(navigator, {webdriver:{get:()=>undefined}});
但是如果网页每次都需要检验selenium,则可能绕不过去这层校验 反反爬思路反爬使用过识别chrome的配置实现的,我们解决问题的思路大致有两种:
第一种:代码如下: from selenium.webdriver import Chrome from selenium.webdriver import ChromeOptions option = ChromeOptions() option.add_experimental_option(excludeSwitches, [enable-automation]) driver = Chrome(options=option) 第二种:举个小例子:mitmproxy中间人攻击,找到该文件名,对识别selenium的脚本做个更改。(虽然有点杀鸡用牛刀的感觉。) selenium之死如果你觉得只有上面一种方法识别到使用selenium等渲染工具那就大错特错了,其实类似的特征还很多。后面有机会再做个分享。 最后“selenium之死”更多在与一个惰性的爬虫工具GG了,对爬虫工程师的要求也在不断地提高,不再是会用一个工具就能说我爬过多少个牛逼的网站了,每天几十万数据的爬取。其实类似selenium的工具不断地被开发,也会不断地被识别。我想这就是我做爬虫的乐趣吧! ![]() 日常看美女 |
| 本文出处: https://www.toutiao.com/a6664580731387249164/ |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|