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模块之re正则表达式详解
Feb 03 Python
python安装教程 Pycharm安装详细教程
May 02 Python
使用python根据端口号关闭进程的方法
Nov 06 Python
解决使用PyCharm时无法启动控制台的问题
Jan 19 Python
selenium+python自动化测试之鼠标和键盘事件
Jan 23 Python
python 连续不等式语法糖实例
Apr 15 Python
Pycharm导入anaconda环境的教程图解
Jul 31 Python
通过实例简单了解python yield使用方法
Aug 06 Python
python调用百度API实现人脸识别
Nov 17 Python
python实现计算器简易版
Dec 17 Python
Python实现石头剪刀布游戏
Jan 20 Python
教你使用Pandas直接核算Excel中快递费用
May 12 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基础之运算符的使用方法
2013/04/28 PHP
phpmailer发送gmail邮件实例详解
2013/06/24 PHP
浅析application/x-www-form-urlencoded和multipart/form-data的区别
2014/06/22 PHP
百度实时推送api接口应用示例
2014/10/21 PHP
PHP连接SQL Server的方法分析【基于thinkPHP5.1框架】
2019/05/06 PHP
Google 静态地图API实现代码
2010/11/19 Javascript
图片上传判断及预览脚本的效果实例
2013/08/07 Javascript
json数据与字符串的相互转化示例
2013/09/18 Javascript
Google (Local) Search API的简单使用介绍
2013/11/28 Javascript
jQuery异步获取json数据方法汇总
2014/12/22 Javascript
jQuery的animate函数实现图文切换动画效果
2015/05/03 Javascript
javascript学习小结之prototype
2015/12/03 Javascript
微信小程序实现tab切换效果
2017/11/21 Javascript
vue实现学生录入系统之添加删除功能
2018/07/11 Javascript
微信小程序scroll-view仿拼多多横向滑动滚动条
2020/04/21 Javascript
vue单页缓存存在的问题及解决方案(小结)
2018/09/25 Javascript
操作按钮悬浮固定在微信小程序底部的实现代码
2019/08/02 Javascript
JavaScript中变量提升和函数提升的详解
2020/08/07 Javascript
如何编写一个 Webpack Loader的实现
2020/10/18 Javascript
爬山算法简介和Python实现实例
2014/04/26 Python
python编写简易聊天室实现局域网内聊天功能
2018/07/28 Python
python微元法计算函数曲线长度的方法
2018/11/08 Python
在python中pandas读文件,有中文字符的方法
2018/12/12 Python
Python 使用Numpy对矩阵进行转置的方法
2019/01/28 Python
Python之列表实现栈的工作功能
2019/01/28 Python
如何用Python制作微信好友个性签名词云图
2019/06/28 Python
python每5分钟从kafka中提取数据的例子
2019/12/23 Python
python统计文章中单词出现次数实例
2020/02/27 Python
python上下文管理器异常问题解决方法
2021/02/07 Python
Html5 localStorage入门教程
2018/04/26 HTML / CSS
Michael Kors香港官网:美国奢侈品品牌
2019/12/26 全球购物
《会变的花树叶》教学反思
2014/02/10 职场文书
班级学雷锋活动总结
2014/06/26 职场文书
交通违章检讨书
2014/09/21 职场文书
2015年个人实习工作总结
2014/12/12 职场文书
社区党支部承诺书
2015/04/29 职场文书