浏览器模拟之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/90.0.4430.93 Safari/537.36")
# options.add_argument("user-agent=" + user_agent.random)
options.add_argument("--disable-javascript")  # 禁止加载js
# options.add_argument('--proxy-server=http://%s'%proxy)
# options.add_argument("--window-size=1366,768")  # 设置窗口大小
# options.set_headless()  # 无头浏览器
options.add_argument('--headless')  # 无头浏览器
options.add_argument("--disable-dev-shm-usage")  # linux启动需要增加的参数
options.add_argument('--no-sandbox')  # 让 driver 在 root 权限下跑
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.add_argument('blink-settings=imagesEnabled=false')  # 禁止加载图片
options.add_experimental_option('excludeSwitches', ['enable-automation'])  # 打开开发者模式
options.add_argument("--auto-open-devtools-for-tabs")  # 打开 F12

 

 

 

 

 

 

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值