Python selenium绕过webdriver监测执行javascript


Posted in Python onApril 12, 2022

selenium执行js

优点:直接调用浏览器的环境
障碍:绕过selenium监测
原理:
# 执行js代码
bro.execute_script('js代码')

常见的selenium监测手段

正常登录 window.navigator.webdriver == undefined
自动化的 window.navigator.webdriver == true


除此之外,还有一些其它的标志性字符串(不同的浏览器可能会有所不同),常见的特征串如下所示:
webdriver  
__driver_evaluate  
__webdriver_evaluate  
__selenium_evaluate  
__fxdriver_evaluate  
__driver_unwrapped  
__webdriver_unwrapped  
__selenium_unwrapped  
__fxdriver_unwrapped  
_Selenium_IDE_Recorder  
_selenium  
calledSelenium  
_WEBDRIVER_ELEM_CACHE  
ChromeDriverw  
driver-evaluate  
webdriver-evaluate  
selenium-evaluate  
webdriverCommand  
webdriver-evaluate-response  
__webdriverFunc  
__webdriver_script_fn  
__$webdriverAsyncExecutor  
__lastWatirAlert  
__lastWatirConfirm  
__lastWatirPrompt  
$chrome_asyncScriptInfo  
$cdc_asdjflasutopfhvcZLmcfl_  
了解了这个特点之后,就可以在浏览器客户端JS中通过检测这些特征串来判断当前是否使用了selenium,并将检测结果附加到后续请求之中,这样服务端就能识别并拦截后续的请求。

常用绕过selenium监测1

正常登录 window.navigator.webdriver == undefined
自动化的 window.navigator.webdriver == true

from selenium import webdriver
options = webdriver.ChromeOptions()
# 此步骤很重要,设置为开发者模式,防止被各大网站识别出来使用了Selenium
options.add_experimental_option('excludeSwitches', ['enable-automation'])
#停止加载图片
options.add_experimental_option("prefs", {"profile.managed_default_content_settings.images": 2})
browser = webdriver.Chrome(options=options)
browser.get('https://www.taobao.com/')

常用绕过selenium监测2

from selenium import webdriver
chrome_options = webdriver.ChromeOptions()
chrome_options.add_experimental_option('debuggerAddress','127.0.0.1:9222')
browser=webdriver.Chrome(executable_path=r'C:\Users\TR\AppData\Local\Google\Chrome
\Application\chromedriver.exe',chrome_options=chrome_options)
browser.get('http://www.zhihu.com')

终端输入如下指令:chrome.exe --remote-debugging-port=9222 --user-data-dir=“D:\cdsf”(需要谷歌驱动在系统环境变量下,然后再运行程序)
remote-debugging-port是你代码中指定的端口debuggerAddress;executable_path是你谷歌驱动位置;user-data-dir随便指定一个目录就行

常用绕过selenium监测3

1.使用chrome的远程调试模式结合selenium来遥控chrome进行抓取,这样不会携带指纹信息

步骤:

- 使用调试模式手工启动chrome,进入chrome的安装路径,例如chrome装在 C:\program\google\chrome.exe下
- 进入chrome安装路径
- 执行命令:
#注意端口不要被占用,防火墙要关闭,user-data-dir用来指明配置文件的路径
   chrome.exe --remote-debugging-port=9222 --user-data-dir="指向任意空文件夹"


2.启动完·之后新建python文件
运行代码:
import requests
from selenium import webdriver

chrome_options = "C:\Users\Administrator\AppData\Local\Google\Chrome\Application\chrome.exe"
chrome_options  = webdriver.ChromeOptions()
chrome_options.add_experimental_option('debuggerAddress','10.8.13.95:9222')
browser = webdriver.Chrome(chrome_options=chrome_options)
browser.get("https://www.zhihu.com/signup?next=%2F")

# chrome.exe --remote-debugging-port=9222 --user-data-dir="D:\moni"
这样监测的就不是selenium模拟了

常用绕过selenium监测4

def selenium(js):
    option = webdriver.ChromeOptions()
    # option.add_argument('--headless')
    option.add_experimental_option('useAutomationExtension', False)
    option.add_experimental_option('excludeSwitches', ['enable-automation'])
    bro = webdriver.Chrome(executable_path='./chromedriver', options=option)  # 弹出浏览器,要给浏览器驱动的地址
     # 打开页面优先执行的js,execute_cdp_cmd
    bro.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
        "source": """
            Object.defineProperty(navigator, 'webdriver', {
              get: () => undefined
            })
          """
    })

    bro.implicitly_wait(10)
    bro.get('https://www.toutiao.com/')
    time.sleep(5)
    print(bro.page_source)  # 获取页面返回的html代码
    bro.execute_script(js)
    input()

以上就是selenium执行js并绕过webdriver监测常见方法的详细内容!

Python 相关文章推荐
python提取内容关键词的方法
Mar 16 Python
进一步探究Python的装饰器的运用
May 05 Python
Python中使用装饰器时需要注意的一些问题
May 11 Python
Python生成密码库功能示例
May 23 Python
Python探索之爬取电商售卖信息代码示例
Oct 27 Python
python通过伪装头部数据抵抗反爬虫的实例
May 07 Python
Python测试网络连通性示例【基于ping】
Aug 03 Python
浅谈python3.6的tkinter运行问题
Feb 22 Python
pandas.read_csv参数详解(小结)
Jun 21 Python
把Anaconda中的环境导入到Pycharm里面的方法步骤
Oct 30 Python
Tensorflow与RNN、双向LSTM等的踩坑记录及解决
May 31 Python
Python Django获取URL中的数据详解
Nov 01 Python
Pillow图像处理库安装及使用
Apr 12 #Python
Python各协议下socket黏包问题原理
Apr 12 #Python
Python爬虫网络请求之代理服务器和动态Cookies
Apr 12 #Python
分享Python异步爬取知乎热榜
尝试使用Python爬取城市租房信息
Apr 12 #Python
Python采集爬取京东商品信息和评论并存入MySQL
Apr 12 #Python
Python实现批量将文件复制到新的目录中再修改名称
You might like
国王的咖啡这么大来头,名字的由来是什么
2021/03/03 咖啡文化
用PHP+java实现自动新闻滚动窗口
2006/10/09 PHP
php 在线导入mysql大数据程序
2015/06/11 PHP
EasyUi tabs的高度与宽度根据IE窗口的变化自适应代码
2010/10/26 Javascript
IE6下opacity与JQuery的奇妙结合
2013/03/01 Javascript
JS this作用域以及GET传输值过长的问题解决方法
2013/08/06 Javascript
JavaScript给url网址进行encode编码的方法
2015/03/18 Javascript
jquery淡入淡出效果简单实例
2016/01/14 Javascript
CKEditor无法验证的解决方案(js验证+jQuery Validate验证)
2016/05/09 Javascript
jQuery使用中可能被XSS攻击的一些危险环节提醒
2016/05/24 Javascript
JS中的phototype详解
2017/02/04 Javascript
JS字符串长度判断,超出进行自动截取的实例(支持中文)
2017/03/06 Javascript
Vue + Webpack + Vue-loader学习教程之功能介绍篇
2017/03/14 Javascript
详解vue2.0组件通信各种情况总结与实例分析
2017/03/22 Javascript
angularjs实现猜数字大小功能
2020/05/20 Javascript
Nodejs调用WebService的示例代码
2017/09/29 NodeJs
mpvue将vue项目转换为小程序
2018/09/30 Javascript
详解vue的数据劫持以及操作数组的坑
2019/04/18 Javascript
基于Node.js的大文件分片上传示例
2019/06/19 Javascript
js代码实现轮播图
2020/05/04 Javascript
python实现根据月份和日期得到星座的方法
2015/03/27 Python
Python里disconnect UDP套接字的方法
2015/04/23 Python
详解Python迭代和迭代器
2016/03/28 Python
python使用pygame模块实现坦克大战游戏
2020/03/25 Python
利用Python脚本批量生成SQL语句
2020/03/04 Python
在keras里实现自定义上采样层
2020/06/28 Python
Ubuntu 20.04安装Pycharm2020.2及锁定到任务栏的问题(小白级操作)
2020/10/29 Python
纯css3实现的动画按钮的实例教程
2014/11/17 HTML / CSS
英国最大的美妆产品在线零售商之一:Beauty Bay
2017/09/29 全球购物
世界上最大的艺术和工艺用品商店:MisterArt.com
2018/07/13 全球购物
英国自行车商店:AW Cycles
2021/02/24 全球购物
少儿节目主持串词
2014/04/02 职场文书
就业协议书
2014/09/12 职场文书
幼儿园春季开学通知
2015/07/16 职场文书
go语言中fallthrough的用法说明
2021/05/06 Golang
Python+OpenCV实现在图像上绘制矩形
2022/03/21 Python