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标准库之多进程(multiprocessing包)介绍
Nov 25 Python
Python实现一个简单的MySQL类
Jan 07 Python
python抓取最新博客内容并生成Rss
May 17 Python
python监控文件或目录变化
Jun 07 Python
Python黑帽编程 3.4 跨越VLAN详解
Sep 28 Python
Python中flatten( )函数及函数用法详解
Nov 02 Python
解决PySide+Python子线程更新UI线程的问题
Jan 11 Python
Django Rest framework频率原理与限制
Jul 26 Python
PYQT5开启多个线程和窗口,多线程与多窗口的交互实例
Dec 13 Python
python tqdm 实现滚动条不上下滚动代码(保持一行内滚动)
Feb 19 Python
如何用PyPy让你的Python代码运行得更快
Dec 02 Python
pycharm 2020.2.4 pip install Flask 报错 Error:Non-zero exit code的问题
Dec 04 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
德劲1102收音机的打理维修案例
2021/03/02 无线电
PHP中strpos、strstr和stripos、stristr函数分析
2016/06/11 PHP
php检测mysql表是否存在的方法小结
2017/07/20 PHP
JavaScript的目的分析
2007/01/05 Javascript
js解析与序列化json数据(三)json的解析探讨
2013/02/01 Javascript
JS中不为人知的五种声明Number的方式简要概述
2013/02/22 Javascript
js漂浮广告实现代码
2015/08/15 Javascript
JQuery导航菜单选择特效
2016/04/11 Javascript
jQuery获取同级元素的简单代码
2016/07/09 Javascript
详解Node项目部署到云服务器上
2017/07/12 Javascript
vue脚手架搭建过程图解
2018/06/06 Javascript
Vue递归组件+Vuex开发树形组件Tree--递归组件的简单实现
2019/04/01 Javascript
vue+egg+jwt实现登录验证的示例代码
2019/05/18 Javascript
详解json串反转义(消除反斜杠)
2019/08/12 Javascript
vue实现几秒后跳转新页面代码
2020/09/09 Javascript
JS addEventListener()和attachEvent()方法实现注册事件
2021/01/11 Javascript
Python自动调用IE打开某个网站的方法
2015/06/03 Python
Python中Collections模块的Counter容器类使用教程
2016/05/31 Python
浅谈python 四种数值类型(int,long,float,complex)
2016/06/08 Python
利用Python破解斗地主残局详解
2017/06/30 Python
Python实现的多进程和多线程功能示例
2018/05/29 Python
Python使用pickle模块实现序列化功能示例
2018/07/13 Python
python 字典的打印实现
2019/09/26 Python
Python正则表达式急速入门(小结)
2019/12/16 Python
pycharm中如何自定义设置通过“ctrl+滚轮”进行放大和缩小实现方法
2020/09/16 Python
css3 transform及原生js实现鼠标拖动3D立方体旋转
2016/06/20 HTML / CSS
台湾网购生鲜第一品牌:i3Fresh爱上新鲜
2017/10/26 全球购物
保时捷设计:Porsche Design
2019/03/30 全球购物
adidas菲律宾官网:adidas PH
2020/02/07 全球购物
技术岗位竞聘演讲稿
2014/05/16 职场文书
安全生产标语
2014/06/06 职场文书
房产授权委托书范本
2014/09/22 职场文书
工作疏忽检讨书500字
2014/10/26 职场文书
故宫的导游词
2015/01/31 职场文书
节约用电通知
2015/04/25 职场文书
python超详细实现完整学生成绩管理系统
2022/03/17 Python