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