selenium爬虫_selenium爬虫如何避免对isTrusted属性检测?

2023-10-29

1、前言

  各位码友,有两天不见,想小码哥了没,哈哈哈?成都疫情在平静9个月之后,又死灰复燃,目前还未找到确切的源头,提醒各位成都的码友一定注意戴口罩,做好自我防护,相信有关部门的防疫措施,一起共渡难关。  好了,今天咱们再继续selenium爬虫相关系列。主题是selenium爬虫如何做到避免事件的isTrusted属性检测。

2、原理

  首先我们问下自己什么是isTrusted属性?引用mozilla.org的解释:“Event接口的 isTrusted 属性是一个只读属性,它是一个布尔值(Boolean)。当事件是由用户行为生成的时候,这个属性的值为 true ,而当事件是由脚本创建、修改、通过 EventTarget.dispatchEvent() 派发的时候,这个属性的值为 false 。

3、举例

  上面只是书面上的概念,咱们以实际的网页作为例子来说明更直观一些。我们有以下html的网页(在本地创建sample_istrusted.html文件,包含以下代码):

<html>
<body>

<h1>测试isTrustedh1>

<button type="button" name="bt" id="bt">点我button>

body>
html>

我们用selenium打开这个html,python代码如下:

from selenium import webdriver

chrome_options = webdriver.ChromeOptions()
chrome_options.add_experimental_option(
    "excludeSwitches", ["enable-automation"])
chrome_options.add_experimental_option('useAutomationExtension', False)
chrome_options.add_argument('lang=zh-CN,zh,zh-TW,en-US,en')
chrome_options.add_argument(
    'user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36')
driver = webdriver.Chrome(
    "./chromedriver", chrome_options=chrome_options)
driver.get("file:Users/mdgc/Desktop/codesample/sample_istrusted.html")

打开网页显示如下:

2f56c1030a2049369b5abb7806c80195.png

  我们看到“点我”这个button它的id和name都是“bt”,我们通过js给这个按钮绑定一个点击事件的处理函数:

document.querySelector("#bt").addEventListener("click",
function(event) {
    console.log('被点击,isTrusted值为:');
    console.log(event.isTrusted);
});

  绑定事件的处理函数将会在button点击的时候在控制台输出isTrusted的值。  下面咱们开始测试以下两种情况,输出的isTrusted结果:

  • 1、手动点击button:8280dbae9dc11082aae4475b97bf2eeb.png  可以看到,手动点击输出isTrusted结果为true
  • 2、直接执行按钮的click函数:35bec3d606cea86ea917e02cdbc441ed.png  我们可以看到程序模拟点击isTrusted输出为false

  到这里我们大概明白了原理:扩展到所有事件,如果事件是我们手动触发的isTrusted(可信)就是true,如果是通过JavaScript去直接执行就是false

  但是这与我们selenium有什么关系呢?别着急,我们用python的selenium代码再测试一下。

  怎么测试?首先我们在上面的python代码后面加个ipdb断点,全部代码如下:

from selenium import webdriver

chrome_options = webdriver.ChromeOptions()
chrome_options.add_experimental_option(
    "excludeSwitches", ["enable-automation"])
chrome_options.add_experimental_option('useAutomationExtension', False)
chrome_options.add_argument('lang=zh-CN,zh,zh-TW,en-US,en')
chrome_options.add_argument(
    'user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36')
driver = webdriver.Chrome(
    "./chromedriver", chrome_options=chrome_options)
driver.get("file:Users/mdgc/Desktop/codesample/sample_istrusted.html")
import ipdb; ipdb.set_trace()#断点,执行到这里程序会进入ipython的调试控制台

我们执行以上代码,此时本地网页已经打开着,我们在打开的chrome控制台执行上面的绑定点击事件的js代码。另外在python代码,进入到断点,如下:

bedc1fb5d1348d4d9f6bbf7e96faff1c.png
  • 1、我们直接用python代码click:87cc6a725455edf1b922f3d5a22b3484.png结果:a3b025dd77c9a6717fbae90808078aff.png

  我们可以看到,结果为true,这是为什么?咱们是通过代码去点击的啊?不是手动的,别急,再测测另外一种。

  • 2、我们直接用python执行js去点击:585381d3af1e804ef8d4a98155649ed3.png结果:5231ea88bfdcbd48810f7c199d8e6645.png不出所料,它其实与我们在chrome控制台直接执行js其实是一样的,结果为false。

4、原因

  因为我们在用python执行:

driver.find_element_by_name("bt").click();

  我们实际上走的是Chrome DevTools Protocol协议的这个接口:c02d377325a46970b57fdd1d58d5bc9b.png  并不是在chrome控制台下直接执行js,所以isTrusted还是和我们手动点击一样是可信的,就如同相当于浏览器给你开了一个方便之门,可以“假装是手动”,类似的其他点击操作原理一样,大家可以自己去尝试。

5、结果

  所以,最后我们需要注意的就是在selenium爬虫的时候,要想不要被前端反爬利用isTrusted检测到,就不要用直接执行js的方式去操作浏览器。

以上。欢迎关注本公众号。

5f2d195a905d7ce5f32905317a9a1436.png

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

selenium爬虫_selenium爬虫如何避免对isTrusted属性检测? 的相关文章

  • VM虚拟机下添加一个硬盘

    VM虚拟机下添加一个硬盘 一 新建虚拟硬盘 打开VMware 选择菜单 VM gt settings gt Add gt 下一步 gt 选择 Harddisk 点 下一步 gt 选 creat a new virtual disk 点 下一
  • 三大抽样分布:卡方分布,t分布和F分布的简单理解

    有很多统计推断是基于正态分布的假设 以标准正态分布变量为基石而构造的三个著名统计量在实际中有广泛的应用 这是因为这三个统计量不仅有明确背景 而且其抽样分布的密度函数有显式表达式 它们被称为统计中的 三大抽样分布 这三大抽样分布即为著名的卡方
  • C、C++写二进制数据到mysql的Blob字段/插入images

    引子 由于调试需要 需直接往数据库里写入二进制数据 本来这些数据是由上层软件来写的 用的是C 为了熟悉C语言的数据库操作 还是决定用C来写这段调试代码 概况 表名 Task 涉及的字段及属性 NumDest int 11 用于存储目标数目
  • 希沃展台如何使用_技术培训

    信息技术应用培训 第五代希沃白板学科应用讲解 一支粉笔勾画五湖四海 一杆教鞭指点千秋万代 这是对教师这个职业的描绘 而随着社会的进步 教育教学改革的不断深入 一支粉笔一块黑板的时代已经离我们远去 现代化的教学设施正随着改革的浪潮涌入到教学当
  • shell判断一个文件夹是否为空,文件是否存在

    文件夹是否为空 dir path xxx if d 1 then 判断文件夹是否为空 if ls A 1 then echo 文件夹为空 else echo 文件夹不为空 fi else echo 文件夹不存在 fi d 判断文件夹是否存在
  • JavaScript题库

    1 下面语句得到值为true的有 A C A 1 1 B 1 1 C 2 gt 19 D 2 19 2 下面哪些方法可以实现将字符串 123 变成数值型 A B C D A Number B parseInt C parseFloat D
  • python:Anaconda安装mlxtend库

    步骤 进入Anaconda Powershell Prompt Acaconda 管理者模式 gt 键入 pip install mlxtend gt over 就这么简单 为嘛要写出来呢 因为我在安装的时候忘记联网啦 QAQ 一直失败 所
  • vue3 + threejs 实现仿iView官网大波浪特效

    一 效果图 先上最终效果图 具体效果可参考iview官方界面iView 一套高质量的UI组件库 大波浪效果 使用的是three js的官方例子 需要先安装three js支持 具体可以看官方实例 three js examples thre
  • linux查询mysql内存使用率_Linux查看CPU和内存使用情况方法总结

    在做Linux系统优化的时候 物理内存是其中最重要的一方面 自然的 Linux也提供了非常多的方法来监控宝贵的内存资源的使用情况 下面的清单详细的列出了Linux系统下通过视图工具或命令行来查看内存使用情况的各种方法 1 proc memi
  • 【ICCV2023】Robustifying Token Attention for Vision Transformers

    Robustifying Token Attention for Vision Transformers 论文 https arxiv org abs 2303 11126 代码 暂未开源 解读 ICCV 2023 Token过度聚焦暴露注
  • Topaz Video Enhance AI中文版

    教程 1 下载解压 双击运行 VideoEnhanceAI windows x64 installer exe 进入安装向导 2 勾选我接受许可协议 3 选择安装目录 也可以选择默认安装 4 安装完成 先不要运行软件 退出向导 5 将文件夹
  • android利用SAX解析xml(以解析谷歌天气预报xml预报为例)

    package com mars android import java io BufferedInputStream import java io InputStream import java net URL import java n
  • ElastAlert2告警不分词查询

    原查询条件 需求是带 服务商回传提单异常 的日志捞出来告警 当我按以下查询条件告警时会发现匹配不到我想要的日志 原因 query string查询默认就是模糊查询 并且是分词查询 例如 123 会拆分查询是否带否带1 带2 带3的日志 条件
  • Java 基本类型和包装类型侧重学习笔记(基础)

    包装类可以是null 而基本类型不可以
  • Ubuntu安装NVIDIA独立显卡驱动出现X service error问题解决方法

    目录 问题症状 解决方法 参考网址 问题症状 最近在Ubuntu下安装NVIDIA独立显卡驱动的过程中出现X service error问题 如下图所示 解决方法 0 到NVIDIA 官网上下载驱动文件 run 格式 Official Ge
  • python HHT实现方法

    引言 随着信号处理领域的不断发展 自适应信号处理和非线性信号分析成为了研究的热点 在这两个领域中 Hilbert Huang变换 HHT 作为一种强大的工具 被广泛应用于信号的时频分析和模态分解 本文将介绍如何使用Python实现HHT 并
  • 解决 微软应用商店无法联网 0x80072EFD问题

    近期使用微软应用商店发现不能正常的连接网络 小娜也是 经过检查是使用了代理自动配置脚本 PAC 的原因 按win键 输入网络代理设置 打开代理设置界面 设置 使用安装程序脚本 为关
  • SpringBean的生命周期

    Spring Bean Lifecycle 1 过程 1 调用无参构造 2 执行 set 方法设置属性 也可以是 Bean 注解方法内容 3 调用 BeanNameAware 的 setBeanName 方法 可以获得 Bean 的名字 4
  • 0N在计算机里面起什么作用,计算器0n/c是什么键

    大家好 我是时间财富网智能客服时间君 上述问题将由我为大家进行解答 计算器0n c是开机键以及清屏键 此键一方面有着开机的功能 另一方面也有着清除屏幕内容的功能 计算器是现代人发明的可以进行数字运算的电子机器 现代的电子计算器能进行数学运算

随机推荐

  • 在微软任职近 20 年,Windows、Surface 负责人官宣将离职!

    整理 屠敏 出品 CSDN ID CSDNnews 9 月 19 日 据外媒 The Verge 报道 负责领导 Windows 开发和 Surface 产品线的微软首席产品官 CPO Panos Panay 即将离职 这一消息来得很突然
  • XML基本规则(XML语法规则)

    XML基本规则 XML语法规则 1 XML 文档必须包含在一个单一元素中 2 XML 元素不能重叠 必须正确的嵌套 3 不能省去任何结束标记 或者说标记必须成对 4 XML 元素是区分大小写的 也就是大小写敏感 5 XML 文档中的属性有两
  • 源码安装zabbix

    源码安装zabbix 1 zabbix简介 2 zabbix的主要功能 3 监控指标 4 zabbix配置文件 5 服务器端配置文件 6 客户端配置文件 7 部署zabbix 8 先安装apache 8 1 安装开发工具包 8 2 下载ap
  • python使用plt.savefig保存时图片保存不完整,四周留白太多

    问题 今天在给论文添加曲线图 使用matplotlib的savefig函数中遇到图片保存不完整 且留白太多的问题 插入到论文中很难看 左边是在pycharm里的截图 右边是通过savefig保存的图片 代码如下 保存图片 plt savef
  • 怎样在PB中实现文件的拷贝与删除 (转)

    怎样在PB中实现文件的拷贝与删除 转 more 怎样在PB中实现 文件的拷贝与删除 可借助外部 函数 可用 api函数实现 1 文件拷贝 函数声明 FUNCTION boolean CopyFileA ref string cfrom re
  • 安装及使用ceres遇到过的问题

    首先ceres安装及使用需要两个依赖库glog与gflags 这两个库安装时需要注意要么只用apt install要么只用源码编译安装 如果两个都装了用apt purge或者在 usr local lib及 usr local includ
  • 设置Unity的帧率

    问题描述 Xsens接收数据的频率是30Hz 为了接收到正确 完整的数据 要将Unity的帧率换成30帧 第一种方法 点击Editor gt Project Setting gt Quality 将VSync Count那选择Every S
  • 测试框架pytest教程(4)运行测试

    运行测试文件 pytest q test example py 会运行该文件内test 开头的测试方法 该 q quiet标志使输出保持简短 测试类 pytest的测试用例可以不写在类中 但如果写在类中 类名需要是Test开头 非Test开
  • C/C++中使用Base64编码解码(使用boost库)

    Base64是一种用64个字符来表示任意二进制数据的方法 用记事本打开exe jpg pdf这些文件时 我们都会看到一大堆乱码 因为二进制文件包含很多无法显示和打印的字符 所以 如果要让记事本这样的文本处理软件能处理二进制数据 就需要一个二
  • c++判断硬盘是否连接、修改指定盘符、读取配置文件、获取exe路径

    系统 win7 64 编译器 vs2010 mfc对话框程序 工程名 fixde 语言 c 涉及函数 GetPrivateProfileString 读取配置文件内容 类型为string GetDriveType 获取某驱动器状态 GetV
  • w5500 php,[W5500]搭建属于你的家庭网络实时监控

    图9 OV2640 SVGA模式下图像输出时序图 系统上电后 MCU配置OV2640的工作方式 在OV2640准备好图像后 VSYNC会被拉高一段时间 MCU通过PCLK上升沿中断按字节接收图像数据 接下来我们将对OV2640的初始化配置程
  • 编写测试用例的基本方法之边界值

    一般边界值分析是因为程序开发循环体时的取数可能会因为 lt lt 搞错 比如下面代码 for int i 0 i lt 100 i int j i 1 System out println 循环第 j 次 循环地做某件事情 这里的程序是循环
  • 如何点击按钮把光标定位到想要的el-input中

    1 el inpu
  • C语言-结构体面向对象编程技巧

    Keil4 C51工程网址 https yunpan 360 cn surl yrNkQSrCKyc 一 面向对象 面向对象是软件开发方法 是相对于面向过程来讲的 通过把数据与方法组织为一个整体来看待 从更高的层次来进行系统建模 更贴近事物
  • python3 数据类型归纳

    1 简介 1 1 python3 数据类型 类型 含义 示例 int 整型 1 float 浮点型 1 0 bool 布尔值 True或False complex 复数 a bj string 字符串 abc123 list 列表 a b
  • 别被骗了,win10家庭版MMC是无法创建管理单元的

    今天我的PC 是win10家庭版 无法出现gpedit msc 然后下载gpedit msc 后 又出现MMC无法创建管理单元 家庭版是没有组策略和注册表的 家庭版是没有组策略和注册表的 家庭版是没有组策略和注册表的 重要的事情说三遍 下面
  • 长轮询与长连接

    实现即时通讯主要有四种方式 它们分别是轮询 长轮询 comet 长连接 SSE WebSocket 它们大体可以分为两类 一种是在HTTP基础上实现的 包括短轮询 comet和SSE 另一种不是在HTTP基础上实现是 即WebSocket
  • Spring笔记【黑马】

    Spring day01 今日目标 掌握Spring相关概念 完成IOC DI的入门案例编写 掌握IOC的相关配置与使用 掌握DI的相关配置与使用 1 课程介绍 对于一门新技术 我们需要从为什么要学 学什么以及怎么学这三个方向入手来学习 那
  • 三点估算法评估开发工作量

    概述 开发人员在进行开发工作之前都需要给出一个工作量的评估 以便后续的工作任务可以基于该时间进行排期 大多数开发人员评估工作量主要是基于过往的工作经验拍脑袋决定 并会给自己预留出一定的Buffer时间 这样可能的问题就是过度依赖个人的开发经
  • selenium爬虫_selenium爬虫如何避免对isTrusted属性检测?

    1 前言 各位码友 有两天不见 想小码哥了没 哈哈哈 成都疫情在平静9个月之后 又死灰复燃 目前还未找到确切的源头 提醒各位成都的码友一定注意戴口罩 做好自我防护 相信有关部门的防疫措施 一起共渡难关 好了 今天咱们再继续selenium爬