使用Python Selenium,动态网页不再是难题!

目录

1、直接执行JS代码 🌐

1.1 execute_script基础用法

1.2 带参数执行JS函数

1.3 获取执行结果

2、使用execute_async_script异步执行 🔄

2.1 适用场景分析

2.2 实现异步操作示例

2.3 错误处理与调试技巧

3、JS与页面元素交互 👤

3.1 修改DOM属性

3.2 触发事件模拟

3.3 动态加载内容处理

4、高级应用:JS与Selenium深度结合 🤖

4.1 自定义JS脚本库

4.2 性能监控与自动化报告

4.3 安全性增强实践

5、实战案例分享 🔍

5.1 翻页自动化爬取

5.2 动态表单填写与提交

5.3 复杂UI测试场景应对

6、性能优化与最佳实践 ⚡

6.1 执行速度提升策略

6.2 资源管理与异常恢复

6.3 代码结构与可维护性建议

7、总结与展望 🚀



1、直接执行JS代码 🌐

在Python Selenium自动化测试与网页操作中,直接执行JavaScript代码是一项强大功能 ,它能够帮助我们实现浏览器端的复杂操作与数据获取。本章将深入探讨如何利用Selenium的execute_script方法执行JavaScript,从基础到进阶,确保你的自动化任务更加灵活高效。

1.1 execute_script基础用法

execute_script是WebDriver接口提供的一个方法,允许你在当前页面上下文中直接执行JavaScript代码。其基本语法为driver.execute_script(script, *args),其中script是要执行的JavaScript字符串,而args是传递给该脚本的参数列表。

示例代码:

from selenium import webdriverdriver = webdriver.Chrome()
driver.get("https://www.example.com")# 简单示例:通过JS滚动到底部
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

此代码段会打开example.com,并通过JavaScript指令滚动页面至底部。

1.2 带参数执行JS函数

当需要向JavaScript传递参数时,execute_script*args参数就派上用场了。这些参数会在执行的脚本中按顺序对应。

示例代码:

element_id = "myElement"
new_text = "Hello, World!"# 修改页面中特定ID元素的文本内容
driver.execute_script(f'document.getElementById("{element_id}").innerText = arguments[0]', new_text)

这段代码展示了如何修改页面上ID为myElement的元素文本为Hello, World!

1.3 获取执行结果

execute_script不仅能执行操作 ,还能返回JavaScript表达式的值。这对于提取页面上的动态数据特别有用。

示例代码:

# 获取页面文档的标题
title = driver.execute_script("return document.title;")
print(f"页面标题是: {title}")

此段代码将打印出当前页面的标题,演示了如何从JavaScript执行中获取返回值。

通过上述内容,你已经掌握了在Python Selenium中直接执行JavaScript的基本技能,无论是简单页面操作还是复杂的动态数据获取,都能游刃有余地运用这一利器。接下来的实践将加深你对这一功能的理解与应用。

2、使用execute_async_script异步执行 🔄

在Selenium自动化测试中,面对网页中的异步加载内容或长时间运行的JavaScript操作,传统的同步执行可能不足以应对。此时,execute_async_script方法便显得尤为重要,它允许你在等待异步操作完成后再继续执行后续代码。

2.1 适用场景分析

  • • 异步加载内容:如Ajax请求的数据加载、延迟加载的图片或组件。

  • • 长耗时操作:例如需要等待的动画效果完成、定时器触发的事件处理等。

  • • 用户交互模拟:模拟用户操作后等待页面响应,如点击按钮后等待加载新内容。

2.2 实现异步操作示例

execute_async_script方法会等待一个特殊的回调函数arguments[arguments.length - 1]被调用 ,这通常由执行的JavaScript代码来完成,以通知Selenium操作已完成。

示例代码:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ECdriver = webdriver.Chrome()
driver.get("https://www.example.com")# 假设页面有一个按钮 ,点击后通过Ajax加载数据
load_button = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, "loadButton")))
load_button.click()# 使用execute_async_script等待异步数据加载完成
driver.execute_async_script("""
    var callback = arguments[arguments.length - 1];
    document.addEventListener('DOMContentLoaded', function() {
        // 假设数据加载完成后某个标志元素会出现
        if(document.getElementById('dataLoaded')) {
            callback();
        }
    });
""")# 进一步操作...

此代码模拟了点击一个按钮后,通过监听DOMContentLoaded事件(实际情况下可能需要更精确的事件或条件)并调用回调函数,来确保数据加载完成后再进行后续步骤。

2.3 错误处理与调试技巧

  • • 超时设置:为WebDriverWait设置合理的超时时间,避免无限等待。

  • • 日志记录:利用Selenium的日志功能,记录执行过程中的JavaScript错误信息。

  • • 异常捕获:在执行execute_async_script前后添加try-except块,处理可能出现的异常情况。

  • • 调试信息输出:在JavaScript代码中加入console.log语句,结合浏览器开发者工具查看执行日志,辅助调试。

通过上述实践 ,你已掌握如何利用execute_async_script

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/861930.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C# 23设计模式备忘

创建型模式:单例(Singleton)模式:某个类只能生成一个实例,该类提供了一个全局访问点供外部获取该实例,其拓展是有限多例模式。 原型(Prototype)模式:将一个对象作为原型&…

下载和使用SLUN数据集

1. 下载数据集 网址在https://opendatalab.com/OpenDataLab/lsun/tree/main/raw/scenes 下载bedroom_val_lmdb.zip 然后解压后会又两个文件,一个data.mdb,另一个lock.mdb。 2. 使用torchvison使用LSUN数据集 我把解压后的bedroom_val_lmdb放在/home/…

iOS 其他应用的文件如何在分享中使用自己的应用打开

废话少说 一、第一步:先配置好plist文件 右击info.plist如下图文件打开 根据自己需要配置支持的文件类型,也可使用property List中配置,一样的 其他的文件可是参考文档:System-Declared Uniform Type Identifiers 可复制的代码&am…

我只有一点Python基础,对学习WebGIS开发有帮助吗?

经常有人后台私信问,我只有一点Python基础,对学习GIS开发有帮助吗? 关于这个问题的答案是,当然有!Python适用于WebGIS开发。WebGIS是地理信息系统(GIS)技术与Web技术的结合,而Pytho…

第1章 框架学习的基石与实战策略

第1章框架学习的基石与实战策略 1.1 框架学习的引路人:权威教程的重要性 在编程的世界里,掌握一个框架就像是装备了一套精良的工具,这不仅能显著提升开发速度,还能展现一个程序员的专业水平。对于那些刚刚踏入编程领域的初学者来…

使用sorted对字典排序

有时我们需要按照字典数据的键值对进行排序,这个时候就可以用到sorted函数。 import operator dic{"testA":3,"testC":1,"testB":4,"testD":2} dicnsorted(dic.items(),keyoperator.itemgetter(0)) print(dicn) 比如我们要…

MYSQL 四、mysql进阶 5(InnoDB数据存储结构)

一、数据库的存储结构:页 索引结构给我们提供了高效的索引方式,不过索引信息以及数据记录都是保存在文件上的,确切说时存储在页结构中,另一方面,索引是在存储引擎中实现的,Mysql服务器上的存储引擎负责对表…

World of Warcraft [CLASSIC] Level 70 Dire Maul (DM)

[月牙钥匙] [大型爆盐炸弹] World of Warcraft [CLASSIC] Level 70 厄运之槌,完美贡品,Dire Maul (DM) Foror‘s Compendium of Dragon Slaying 佛洛尔的屠龙技术纲要 因为不是兽王宝宝,而且开始位置放的不对&am…

mybatisplus自带的雪花算法(IdType.ASSIGN_ID)无法自动生成弊端缺点,以及改进方法

前言 今日在使用mybatisplus的雪花算法自动给id赋值时发现怎么都是null的情况,这尼玛测了半天,终于发现巨坑,废话不多说,直接上干货 IService.save 只有调用IService中的save方法才能正常生成id,像IService.saveBatc…

Vue移动端动态表单生成组件

FormCreate 是一个可以通过 JSON 生成具有动态渲染、数据收集、验证和提交功能的表单生成组件。支持6个UI框架,适配移动端,并且支持生成任何 Vue 组件。内置20种常用表单组件和自定义组件,再复杂的表单都可以轻松搞定。 帮助文档 | 源码下载…

Day35:2734. 执行字串操作后的字典序最小字符串

Leetcode 2734. 执行字串操作后的字典序最小字符串 给你一个仅由小写英文字母组成的字符串 s 。在一步操作中,你可以完成以下行为: 选择 s 的任一非空子字符串,可能是整个字符串,接着将字符串中的每一个字符替换为英文字母表中的前…

视频技术朝着8K超高清方向发展,安防监控领域将迎来怎样变化?

一、背景 随着科技的日新月异,视频技术已逐渐成为我们日常生活中不可或缺的一部分。从娱乐、教育到安全监控,视频技术无处不在,并以其独特的方式影响着我们的生活方式。本文将探讨视频技术的发展趋势,并重点关注其在监控领域的应…

【ai】李沐 动手深度学学v2 环境安装:anaconda3、pycharm、d2

cuda-toolkit cuda_12.5.0_windows_network.exe 官方课程网站 第二版资源下载release版本 pycharm版本 李沐 【动手学深度学习v2 PyTorch版】 课程笔记 CUDA 选择11, 实际下载 12.5.0

无需劳师动众,让石油化工DCS集散控制系统轻松实现无线传输!

石油化工中,为了保证较高的可靠性和安全性,大量使用的是DCS集散控制系统。与FCS现场总线的“现场采集,转换为数字信号来集中传输”不同,DCS系统为了避免由于线缆断裂或者节点问题导致整个控制系统失灵,采用“分散传输,集中采集”的方式,即每个传感器通过4-20mA的模拟量通…

畜牧机械5G智能制造工厂物联数字孪生平台,推进制造业数字化转型

畜牧机械5G智能制造工厂物联数字孪生平台,推进制造业数字化转型。畜牧机械5G智能制造工厂物联数字孪生平台,是近年来制造业数字化转型的杰出代表。工业物联数字孪生平台平台集成了物联网、大数据、云计算和人工智能等先进技术,通过高速、低延…

redis需要知道的点

目录 一、为什么要用缓存 二、使用 Redis有哪些好处 三、什么是 redis? 四、redis和memcached区别 五、为什么redis单线程模型效率也能那么高 六、redis的线程模型 七、redis 6.0 引入多线程 八、为什么Redis需要把所有数据放到内存中? 九、Red…

cad由于找不到mfc140u.dll的解决方法,彻底解决mfc140u.dll丢失问题

在计算机辅助设计(CAD)的时候,我们可能会遇到各种错误和问题。其中,“CAD由于找不到mfc140u.dll,无法继续执行代码”的错误提示。这个问题可能会导致CAD无法启动运行,因此,我希望通过分享我的经…

计算机网络之数据通信原理(下)

上一讲内容:数据传输方式、数据传输形式、传输差错处理、常用差错检测方法 数据通信过程中,一个很重要的问题就是如何控制数据的传输,就涉及到了传输控制规程(协议) 下面介绍两种: ①BSC:面向…

鸿蒙 HarmonyOS NEXT星河版APP应用开发-阶段一

一、鸿蒙开发环境搭建 DevEco Studio安装 下载 访问官网:https://developer.huawei.com/consumer/cn/deveco-studio/选择操作系统版本后并注册登录华为账号既可下载安装包 安装 建议:软件和依赖安装目录不要使用中文字符软件安装包下载完成后&#xff0…

GGUF模型转换入门

一、定义 1 定义 2 案例 二、实现 定义 GGUF是一种大模型文件格式,由开发者Georgi Gerganov提出。 这是一种针对大规模机器学习模型设计的二进制格式文件规范。它的主要优势在于能够将原始的大模型预训练结果经过特定优化后转换成这种格式,从而可以更…