【Python】selenium结合js模拟鼠标点击、拦截弹窗、鼠标悬停方法汇总(使用 execute_script 执行点击的方法)
我们在写selenium获取网络信息的时候,有时候我们会受到对方浏览器的监控,对方通过分析用户行为模式,如点击、滚动、停留时间等,网站可以识别出异常行为,进而对Selenium爬虫进行限制。
这里我们可以加入JavaScript的使用。Selenium可以执行JavaScript,通过使用 execute_script 方法,来执行点击操作。
它可以绕过一些 Selenium 直接操作元素时可能遇到的问题,比如元素未完全加载、元素被遮挡或者需要更复杂的交互。
以下是几种使用 execute_script 来执行点击操作的方法:
1. 模拟鼠标直接点击事件
element = driver.find_element_by_id("myButton")
driver.execute_script("arguments[0].click();", element)
这段代码找到 ID 为 myButton 的元素,并使用 JavaScript 直接触发该元素的点击事件。
2. 拦截弹出窗口
通过覆盖浏览器内置的方法,如alert、confirm、prompt等,避免弹出窗口
driver.execute_script('''window.alert = function() {console.log("Alert function called, but blocked.");
};
window.confirm = function() {console.log("Confirm function called, but blocked.");return true; // 返回true,以模拟用户点击“确定”按钮
};
window.prompt = function() {console.log("Prompt function called, but blocked.");return null; // 返回null,以模拟用户点击“取消”按钮
};''')
以上的代码,所有调用alert、confirm和prompt的方法将被拦截,且不会弹出任何窗口。这种方法简单而有效,适用于大多数情况。
3. 创建并派发点击事件
这种方法创建一个新的点击事件,并将其派发到指定的元素上,这可以提供更多的控制,比如模拟鼠标右键点击。
element = driver.find_element("myButton")
driver.execute_script("var event = new MouseEvent('click', {""view: window,""bubbles: true,""cancelable: true});""arguments[0].dispatchEvent(event);", element)
在运行过程中,如果遇到下面的问题:
“JavascriptException: javascript error: arguments[0].dispatchEvent is not a function”
这说明,
4. 使用 JavaScript 模拟鼠标悬停后点击
如果你需要更复杂的鼠标操作,比如鼠标悬停后点击,你可以使用以下方法:
element = driver.find_element_by_id("myButton")
driver.execute_script("arguments[0].style.cursor = 'pointer';", element)
driver.execute_script("arguments[0].onmouseover = function() {""arguments[0].style.backgroundColor = 'yellow'; };", element)
driver.execute_script("arguments[0].onmouseout = function() {""arguments[0].style.backgroundColor = 'white'; };", element)
driver.execute_script("arguments[0].click();", element)
5. 滚动到元素并点击
如果元素不在可视区域内,你可能需要先滚动到该元素,然后再执行点击操作:
element = driver.find_element_by_id("myButton")
driver.execute_script("arguments[0].scrollIntoView();", element)
driver.execute_script("arguments[0].click();", element)
6. 等待元素可点击后执行点击
有时候,元素可能需要一些时间来加载或变得可点击,你可以使用 execute_script 来等待这个条件:
element = driver.find_element_by_id("myButton")
driver.execute_script("while (arguments[0].disabled || ""arguments[0].style.display === 'none' || ""arguments[0].style.visibility === 'hidden') {""setTimeout(function() {}, 100); };""arguments[0].click();", element)
这些方法提供了不同场景下使用 execute_script 执行点击操作的示例。
你可以根据实际情况选择最适合你需求的方法。
相关文章:
【Python】selenium结合js模拟鼠标点击、拦截弹窗、鼠标悬停方法汇总(使用 execute_script 执行点击的方法)
我们在写selenium获取网络信息的时候,有时候我们会受到对方浏览器的监控,对方通过分析用户行为模式,如点击、滚动、停留时间等,网站可以识别出异常行为,进而对Selenium爬虫进行限制。 这里我们可以加入JavaScript的使…...
CatBoost算法详解与PyTorch实现
CatBoost算法详解与PyTorch实现 目录 CatBoost算法详解与PyTorch实现@[TOC](目录)1. CatBoost算法概述1.1 梯度提升树(GBDT)1.2 CatBoost的优势2. CatBoost的核心技术2.1 类别特征处理2.2 对称树结构2.3 有序提升技术2.4 正则化技术3. PyTorch实现CatBoost3.1 环境准备3.2 Py…...
“TypeScript版:数据结构与算法-初识算法“
引言 在算法与编程的广阔世界里,总有一些作品以其独特的魅力和卓越的设计脱颖而出,成为我们学习和研究的典范。今天,我非常荣幸地向大家分享一个令人印象深刻的算法——Hello算法。 Hello算法不仅展现了作者深厚的编程功底,更以…...
mysql中递归的使用 WITH RECURSIVE
MySQL递归查询的基本语法和用法 MySQL 8.0及以上版本支持使用WITH RECURSIVE来进行递归查询。WITH RECURSIVE定义了一个递归的公用表表达式(CTE),它包含两个部分:递归的基础部分(非递归部分)和递归部分。 …...
点击取消按钮,console出来数据更改了,页面视图没有更新
点击取消按钮,console出来数据更改了,页面视图没有更新 前言 实现效果:点击取消按钮,页面视图全部为空, 遇到的问题: 点击取消按钮,console出来数据更改了,SchemaJson 都是默认值啦…...
web框架在什么程度上受限 ?
Web框架提供了开发网站和Web应用的基础结构和工具,但它们也有一些限制。了解这些限制有助于选择合适的框架或决定何时可能需要寻找或开发替代方案。 1、问题背景 提问者计划构建一个 RESTful web 服务,该服务将只使用 JSON/XML 接口,不包含 …...
实践:事件循环
实践:事件循环 代码示例 console.log(1); setTimeout(() > console.log(2), 0); Promise.resolve(3).then(res > console.log(res)); console.log(4);上述的代码的输出结果是什么 1和4肯定优先输出,因为他们会立即方式堆栈的执行上下文中执行&am…...
C++ 设计模式:建造者模式(Builder Pattern)
链接:C 设计模式 链接:C 设计模式 - 工厂方法 链接:C 设计模式 - 抽象工厂 链接:C 设计模式 - 原型模式 建造者模式(Builder Pattern)是一种创建型设计模式,它允许你分步骤创建复杂对象。与其他…...
SQL偏移类窗口函数—— LAG()、LEAD()用法详解
SQL偏移类窗口函数:LAG() 和 LEAD() 用法详解 在 SQL 中,偏移类窗口函数 LAG() 和 LEAD() 用于访问当前行的前几行或后几行的值。 1. LAG() 函数 LAG() 函数返回当前行的前几行的数据。 LAG(Expression, OffSetValue, DefaultVar) OVER (PARTITION BY …...
基于Pytorch和yolov8n手搓安全帽目标检测的全过程
一.背景 还是之前的主题,使用开源软件为公司搭建安全管理平台,从视觉模型识别安全帽开始。主要参考学习了开源项目 https://github.com/jomarkow/Safety-Helmet-Detection,我是从运行、训练、标注倒过来学习的。由于工作原因,抽空…...
[CTF/网络安全] 攻防世界 upload1 解题详析
姿势 在txt中写入一句话木马<?php eval($_POST[qiu]);?> 回显如下: 查看源代码: Array.prototype.contains function (obj) { var i this.length; while (i--) { if (this[i] obj) { return true; } } return false; } function …...
03-其他
我们学校的教授们都还是很温柔,很有趣的,所以只要大家好好发挥,拿到90没问题的。 你以后打算研究什么? 你研究生的打算是什么?你计算机的前沿技术了解多少?(这个问题我真没了解过。。拉了&…...
EasyExcel自定义动态下拉框(附加业务对象转换功能)
全文直接复制粘贴即可,测试无误 一、注解类 1、ExcelSelected.java 设置下拉框 Documented Target({ElementType.FIELD})//用此注解用在属性上。 Retention(RetentionPolicy.RUNTIME)//注解不仅被保存到class文件中,jvm加载class文件之后,…...
2025.1.2
练习: 1> 创建一个工人信息库,包含工号(主键)、姓名、年龄、薪资。 2> 添加三条工人信息(可以完整信息,也可以非完整信息) 3> 修改某一个工人的薪资(确定的一个…...
重庆大学软件工程复试怎么准备?
重大软件复试相对来说不算刁钻,关键是对自己的竞赛和项目足够了解,能应对老师的提问。专业课范围广,英文文献看个人水平,难度不算大,整体只要表现得得体从容,以及充分的准备,老师不会为难你。 …...
Ant Design Pro搭建react项目
1、使用pro-cli 来快速的初始化脚手架,先全局安装 npm i ant-design/pro-cli -g pro create myapp 2、选择模板类型 pro 是基础模板,只提供了框架运行的基本内容,complete 包含所有区块,不太适合当基础模板来进行二次开发。&a…...
mysql连接时报错1130-Host ‘hostname‘ is not allowed to connect to this MySQL server
不在mysql服务器上通过ip连接服务提示1130错误怎么回事呢。这个错误是因为在数据库服务器中的mysql数据库中的user的表中没有权限。 解决方案 查询mysql库的user表指定账户的连接方式 SELECT user, host FROM mysql.user;修改指定账户的host连接方式 update mysql.user se…...
办公 三之 Excel 数据限定录入与格式变换
开始-----条件格式------管理规则 IF($A4"永久",1,0) //如果A4包含永久,条件格式如下: OR($D5<60,$E5<60,$F5<60) 求取任意科目不及格数据 AND($D5<60,$E5<60,$F5<60) 若所有科目都不及格 显示为红色 IF($H4<EDATE…...
Ubuntu执行sudo apt-get update失败的解决方法
Ubuntu版本:24.04.1 报错信息: Clearsigned file isnt valid, got NOSPLIT (does the network require authentication?) 如果你在执行以上命令的时候也出现了上面这样的错误提示,先检查一下是不是网络问题,如果确定不是&…...
torch.nn.functional的用法
文章目录 介绍激活函数示例 损失函数示例 卷积操作示例 池化示例 归一化操作示例 Dropout示例 torch.nn.functional 与 torch.nn 的区别 介绍 torch.nn.functional 是 PyTorch 中的一个模块,提供了许多函数式的神经网络操作,包括激活函数、损失函数、卷…...
Linux串口通信终极指南:3步搞定CH341SER驱动安装,让Arduino开发不再卡壳
Linux串口通信终极指南:3步搞定CH341SER驱动安装,让Arduino开发不再卡壳 【免费下载链接】CH341SER CH341SER driver with fixed bug 项目地址: https://gitcode.com/gh_mirrors/ch/CH341SER 你是否曾经兴奋地拿起一块Arduino开发板,准…...
GitHub MDC文件渲染优化:基于UserScript的Markdown预览增强方案
1. 项目概述:让GitHub读懂Cursor的“规则文件”如果你和我一样,是Cursor的深度用户,那你肯定没少和.mdc文件打交道。这些文件是Cursor AI的“规则集”(Cursor Rules),本质上就是一份用Markdown语法写的项目…...
基于LLM的风格化内容生成:从提示工程到系统化实践
1. 项目概述:一个基于AI的创意内容生成工具最近在折腾AI应用开发,发现了一个挺有意思的项目,叫“jasonkneen/vibeclaw”。乍一看这个名字,可能会有点摸不着头脑,但简单来说,它是一个利用大型语言模型&#…...
南京数字化申报实战开启:提交材料后,如何确保您的技术底座不被“合规性审计”一票否决?
【行动指南:从填报到过审】截至 2026年5月12日,南京市中小企业数字化转型城市试点的线上申报通道已正式运行。在首批提交材料的企业反馈中,一个核心细节引起了市场的高度关注:申报系统不仅要求填写投入金额,更强化了对…...
闯入漳州粉色几何秘境,复刻西班牙红墙浪漫
在福建漳州市漳浦县的火山岛自然生态风景区内,有一座以粉红色为主色调、线条利落的几何形建筑群。因其层层叠叠的阶梯、错落的平台与迷宫般的路径结构,与西班牙卡尔佩的“红墙”(La Muralla Roja)景观高度相似,被游客称…...
从‘一片蓝’到‘五彩斑斓’:手把手教你美化Matlab三维柱状图,让论文图表脱颖而出
从‘一片蓝’到‘五彩斑斓’:科研级Matlab三维柱状图视觉优化全攻略 当审稿人翻开一篇论文时,图表往往是他们最先注意到的元素。我曾参与过多次学术期刊的评审工作,那些配色考究、细节精致的图表总能在第一时间抓住眼球——这不仅仅是审美问题…...
GitHub加速实战指南:突破国内访问瓶颈的高效方案
GitHub加速实战指南:突破国内访问瓶颈的高效方案 【免费下载链接】Fast-GitHub 国内Github下载很慢,用上了这个插件后,下载速度嗖嗖嗖的~! 项目地址: https://gitcode.com/gh_mirrors/fa/Fast-GitHub 对于国内开发者而言&a…...
云原生测试工具链选型指南:面向测试从业者的专业架构与实践路径
随着云原生技术栈的深度渗透,软件测试领域正经历一场从理念到工具链的深刻变革。面对Kubernetes、微服务、Service Mesh等新型架构带来的动态性、分布性与高频变更挑战,传统的测试工具与方法论已显乏力。对于测试从业者而言,构建或选型一套适…...
群晖DSM 7.2.2视频站恢复指南:三步搞定Video Station完整功能
群晖DSM 7.2.2视频站恢复指南:三步搞定Video Station完整功能 【免费下载链接】Video_Station_for_DSM_722 Script to install Video Station in DSM 7.2.2 and DSM 7.3 项目地址: https://gitcode.com/gh_mirrors/vi/Video_Station_for_DSM_722 还在为升级到…...
