当selenium被识别爬虫后

因为某站发版,在修一个以前的项目,用Selenium驱动Chrome来做的,然后在某页面需要点击,无论怎么做都失效,我尝试过如下方法:

  1. 原始的点击,如:driver.find_element_by_id('id').click()
  2. 浏览器执行js,如:driver.execute_script('document.getElementById("id").click()')
  3. Selenium行为事件ActionChains,其中的move_to_element、move_to_element_with_offset等等方法都尝试过

最后,我手动在Selenium驱动打开的Chrome浏览器中去点击该按钮,但是无效。此刻我判断对方已经识别我的Chrome是爬虫了。

在stackoverflow上有一个问题,Can a website detect when you are using selenium with chromedriver?

下面有很多回答,其中有一个回答引用了某位CEO的讲话:

Even though they can create new bots, we figured out a way to identify Selenium the a tool they’re using, so we’re blocking Selenium no matter how many times they iterate on that bot. We’re doing that now with Python and a lot of different technologies. Once we see a pattern emerge from one type of bot, then we work to reverse engineer the technology they use and identify it as malicious.

所以Selenium并不是万能的,很多方法可以检查出你到底是不是爬虫,那么有什么应对方法呢?

有人回答说去修改 chromedriver 的源码,那还不如自己去写一个浏览器呢。

万万没想到,最后我还是成功了。

方法很简单,就是去驱动Firefox,而不是Chrome。

1self.driver = webdriver.Firefox()

就这样一行代码解决了。

至于里面的原因是什么,在网上找了很久Firefox与Chrome的区别,然后搜了下selenium的原理,如下

当Selenium2.x提出了WebDriver的概念之后,它提供了完全另外的一种方式与浏览器交互。那就是利用浏览器原生的API,封装成一套更加面向对象的SeleniumWebDriverAPI,直接操作浏览器页面里的元素,甚至操作浏览器本身(截屏,窗口大小,启动,关闭,安装插件,配置证书之类的)。由于使用的是浏览器原生的API,速度大大提高,而且调用的稳定性交给了浏览器厂商本身,显然是更加科学。然而带来的一些副作用就是,不同的浏览器厂商,对Web元素的操作和呈现多少会有一些差异,这就直接导致了SeleniumWebDriver要分浏览器厂商不同,而提供不同的实现。例如Firefox就有专门的FirefoxDriver,Chrome就有专门的ChromeDriver等等。

所以建议以后若发现驱动Chrome失败,可以尝试一下Firefox

原文发布于微信公众号 - Python爬虫与算法进阶(zhangslob)

原文发表时间:2018-11-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Android机动车

大杀器Bodymovin和Lottie:把AE动画转换成HTML5/Android/iOS原生动画

Airbnb出了移动端的动画库Lottie,可以和一个名叫Bodymovin的AE插件结合起来,把在AE上做好的动画导出为json文件,然后以Android/i...

37610
来自专栏菩提树下的杨过

jQuery中排除指定元素,同时选择剩下的所有元素

场景:某页面用了js延时加载技术处理所有图片,以改善用户体验,但是有几个图片不想延时加载,要求把它们单独挑出来。 研究了一下jQuery的API文档,搞掂了,j...

25050
来自专栏微服务

高效Web开发的10个jQuery代码片段

高效Web开发的10个jQuery代码片段 在过去的几年中,jQuery一直是使用最为广泛的JavaScript脚本库。今天我们将为各位Web开发者提供10个最...

37680
来自专栏星流全栈

二〇一六年的前端入门指南

13880
来自专栏编程微刊

Font Awesome 一套绝佳的图标字体库和CSS框架

21030
来自专栏糊一笑

微信小程序初探【类微信UI聊天简单实现】

微信小程序最近很火,火到什么程度,只要你一打开微信,就是它的身影,几乎你用的各个APP都可以在微信中找到它的复制版,另外官方自带的跳一跳更是将它推到了空前至高的...

62750
来自专栏Youngxj

杨小杰工具箱网页源码

18040
来自专栏Coco的专栏

《HTML重构》读书笔记&思维导图

19840
来自专栏ytkah

微信小程序开发教程第七章:微信小程序编辑名片页面开发

编辑名片有两条路径,分为新增名片流程与修改名片流程。 用户手填新增名片流程: ? ? ? 首先跳转到我们的新增名片页面 1 需要传递用户的当前 userId,w...

34670
来自专栏Debian社区

Debian下安装搜狗拼音输入法

2013年12月,搜狗与Ubuntu Kylin团队开始合作开发“搜狗输入法Linux版”。经过五个月的合作,于2014年4月17日,正式发布了1.0版本。20...

29330

扫码关注云+社区

领取腾讯云代金券