Python爬虫之selenium的检测与突破

selenium 是一个很友好的网站调试工具,但是很多人都用来做爬虫,其实我也是用来做爬虫,毕竟好东西要共享,哈哈

在做静态网页的请求的时候,普通的http/https可以很轻松的搞定,但是面对动态网页,很多内容都是通过后面的js加载出来的,如果还要用协议解决,希望你遇到的问题可以解决。

在爬虫这一块,很多反爬虫对方对selenium并不是太友好,他们对于selenium的检测机制造的很是很牛逼的。

对于滑动验证码,大部选择用模拟的方式解决,当然牛逼过头的话用协议尝试也是巨佬,用模拟的话首先要绕过对方网站的检测机制。

对于 selenium 的检测机制,比较常见的就是拿你的特征值,毕竟用了 selenium 的 webdriver 驱动之后打开的模拟浏览器就与真实浏览器不一样了

- window.navigator.webdriver

- window.navigator.languages

- window.navigator.plugins.length

其中最主要的特征值就是webdriver这一项。

partial interface Navigator {
      readonly attribute boolean webdriver;
  };

Navigator接口的webdriver IDL属性必须返回webdriver-active标志的值,该标志默认值为false或者undefined。

通过 F12 -> Console -> window.navigator.webdriver

正常的浏览器是这样的

而用selenium模拟出来的是这样的

意思就是对方可以通过此处认定你是爬虫

 

所以我一直都提倡科学上网

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()

options.add_experimental_option('excludeSwitches', ['enable-automation'])  # 打开开发者模式

driver = webdriver.Chrome(options=options)

科学上网只打开开发者肯定是不够的,我们有时候还需要一些其他参数 

- 运行环境

options = Options()

options.add_argument('--user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36"')
# options.add_argument('User-Agent="Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36"')

options.add_argument("--disable-javascript")  # 禁止加载js

# options.add_argument("--window-size=1366,768")  # 设置窗口大小
# options.add_argument("--start-maximized")       # 最大化

options.add_argument("--incognito")  # 隐身模式,无痕模式

options.add_argument("--disable-infobars")  # 禁用浏览器正在被自动化程序控制的提示

options.add_argument('lang=zh_CN.UTF-8')

# options.add_argument('--disable-gpu')  # 禁用 gpu

options.add_argument('--disable-infobars')  # 除去“正受到自动测试软件的控制”

# options.set_headless()  # 无头浏览器
# options.add_argument('--headless')  # 无头浏览器

options.add_argument('--no-sandbox')  # 让 driver 在 root 权限下跑

# options.add_argument('--disable-dev-shm-usage')

options.add_argument('blink-settings=imagesEnabled=false')  # 禁止加载图片

options.add_experimental_option('excludeSwitches', ['enable-automation'])  # 打开开发者模式

options.add_argument("--auto-open-devtools-for-tabs")  # 打开 F12