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实现的登陆Discuz!论坛通用代码分享
Jul 11 Python
python实现简单温度转换的方法
Mar 13 Python
Python字符串转换成浮点数函数分享
Jul 24 Python
搭建Python的Django框架环境并建立和运行第一个App的教程
Jul 02 Python
Windows上使用Python增加或删除权限的方法
Apr 24 Python
python人民币小写转大写辅助工具
Jun 20 Python
在python下使用tensorflow判断是否存在文件夹的实例
Jun 10 Python
pyqt5中QThread在使用时出现重复emit的实例
Jun 21 Python
Python使用enumerate获取迭代元素下标
Feb 03 Python
python 基于selenium实现鼠标拖拽功能
Dec 24 Python
python pillow库的基础使用教程
Jan 13 Python
Python使用PyYAML库读写yaml文件的方法
Apr 06 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
php生成随机颜色方法汇总
2014/12/03 PHP
thinkphp5框架扩展redis类方法示例
2019/05/06 PHP
tp5.1 框架数据库-数据集操作实例分析
2020/05/26 PHP
基于jquery的模态div层弹出效果
2010/08/21 Javascript
Three.js源码阅读笔记(基础的核心Core对象)
2012/12/27 Javascript
js 在定义的时候立即执行的函数表达式(function)写法
2013/01/16 Javascript
基于jquery扩展漂亮的下拉框可以二次修改
2013/11/19 Javascript
JavaScript中return false的用法
2015/03/12 Javascript
javascript数据结构与算法之检索算法
2015/04/04 Javascript
jQuery中 attr() 方法使用小结
2015/05/03 Javascript
JavaScript实现身份证验证代码
2016/02/17 Javascript
jQuery选择器及jquery案例详解(必看)
2016/05/20 Javascript
jquery 判断selection range 是否在容器中的简单实例
2016/08/02 Javascript
实现点击下箭头变上箭头来回切换的两种方法【推荐】
2016/12/14 Javascript
vue.js 双层嵌套for遍历的方法详解, 类似php foreach()
2018/09/07 Javascript
webpack4+express+mongodb+vue实现增删改查的示例
2018/11/08 Javascript
JS算法教程之字符串去重与字符串反转
2020/12/15 Javascript
python网络爬虫采集联想词示例
2014/02/11 Python
python检测远程服务器tcp端口的方法
2015/03/14 Python
Django自定义认证方式用法示例
2017/06/23 Python
Python多重继承的方法解析执行顺序实例分析
2018/05/26 Python
Python实现在某个数组中查找一个值的算法示例
2018/06/27 Python
Python接口测试get请求过程详解
2020/02/28 Python
matplotlib quiver箭图绘制案例
2020/04/17 Python
浅析Python 条件控制语句
2020/07/15 Python
日本航空官方网站:JAL
2019/06/19 全球购物
网络技术支持面试题
2013/04/22 面试题
室内设计自我鉴定
2013/10/15 职场文书
职高毕业生自我鉴定
2013/10/21 职场文书
《守株待兔》教学反思
2014/03/01 职场文书
《长相思》听课反思
2014/04/10 职场文书
实习生个人总结范文
2015/02/28 职场文书
未婚证明格式
2015/06/15 职场文书
2016反腐倡廉警示教育心得体会
2016/01/13 职场文书
MySQL 条件查询的常用操作
2022/04/28 MySQL
Jmerte 分布式压测及分布式压测配置
2022/04/30 Java/Android