selenium反爬

199 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第2天,点击查看详情

之前分享过selenium的使用,今天分享一下本人自己使用selenium时的一些情况,使用selenium也会被网站反爬,有的网站甚至检测到是selenium时就会封禁ip,所以今天分享一下selenium的反爬。大多数网站识别selenium的方法是通过window.navigator.webdriver,它的作用是在用户打开浏览器时给当前窗口一个window属性来存放用户的各种信息,当我们使用selenium时值为true,正常用户访问网站时为false image.png

image.png

所以要实现selenium的反爬就要修改window.navigator.webdriver的属性值,修改就需要注入js代码去修改,这里需要注意的是,注入js代码需要在打开浏览器之前就要操作,js代码如下:

from selenium import webdriver
# 实例化对象
option = ChromeOptions()
option.add_experimental_option('excludeSwitches',['enable-automation'])# 开启实验性功能
# 去除特征值
option.add_argument("--disable-blink-features=AutomationControlled")
# 实例化谷歌
driver = webdriver.Chrome(options=option)
# 修改get方法
script = '''object.defineProperty(navigator,'webdriver',{undefinedget: () => undefined})'''
#execute_cdp_cmd用来执行chrome开发这个工具命令
driver.execute_cdp_cmd("page.addscriptToEvaluateonNewDocument",{"source": script})

再次使用selenium会发现window.navigator.webdriver值为undefined,而且浏览器窗口也没有了正在使用自动化测试

image.png

有一些反爬强的网站还是会检测出来,之前有看到过其他的博客里面也提到了去修改webdriver中的特征值去避免被检测到,但是我亲自尝试过了,该被检测到还是被检测到了,所以尽可能的去解决被检测后的处理方式,因为特征值有很多个,每个平台的检测又不一样,所以很难确保百分之百不被检测到。

解决的方法:

1.有的平台对selenium的检测很强,很难确保不被识别,就拿某宝举例子,刚好最近在爬淘宝的数据,淘宝的反爬非常的强,数据必须登录以后才能拿到,短时间内同一个账号多次登录就会出现滑块,使用selenium自动化拖动就会出现拖动失败的情况,如果想要破解滑块的js参数那是非常难的,因为它是根据很多个因素去加密生成的js参数,所以只能使用Actionchains尽可能的去模拟人的拖动轨迹,后面会出一期淘宝的滑块拖动

2.随着技术的升级现在的验证码越来越难,比如图像识别的,验证的,这个就要借助打码平台了。