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

news2024/11/23 20:25:53

目录

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 webdriver

driver = 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 EC

driver = 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.coloradmin.cn/o/1869257.html

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

相关文章

KVM性能优化之磁盘IO优化

方法一&#xff1a;通过直接在XML里定义&#xff1a; 1.磁盘类型选择 <target devsda busscsi/> PS:virti0模式读写低于sata和SCSI模式&#xff0c;SCSI模式最高&#xff0c;大数据集建议使用SCSI 2.缓存模式选择 <driver nameqemu typeqcow2 cachenone/> 加上…

webpack+webpack server入门

​ 1.webpack介绍 webpack是一个模块加载器兼打包工具。它是以 commonJS 的形式来书写脚本的&#xff0c;但对 AMD/CMD 的支持也很全面&#xff0c;方便旧项目进行代码迁移。支持对react热插拔。 2.安装&#xff08;使用淘宝镜像&#xff09; 全局安装 cnpm install webpa…

同三维T700转换器 USB转HDMI转换器

让USB摄像头变成HDMI输出&#xff0c;支持4K60输出 一、产品简介&#xff1a; 此转换器可以把USB信号转成HDMI信号&#xff0c;支持4K60 HDMI输出&#xff0c;有效解决了USB摄像头连接电视、显示器、导播台的问题&#xff0c;带USB控制口&#xff0c;可升级/接蓝牙接收器&#…

Android高级面试_6_性能优化

Android 高级面试-7&#xff1a;网络相关的三方库和网络协议等 1、网络框架 问题&#xff1a;HttpUrlConnection, HttpClient, Volley 和 OkHttp 的区别&#xff1f; HttpUrlConnection 的基本使用方式如下&#xff1a; URL url new URL("http://www.baidu.com")…

停更公告

由于csdn越来越流氓了&#xff0c;我永久停更&#xff0c;专注于网站建设&#xff08;亚运奥运素材网&#xff09;qdhca.asiahttp://qdhca.asia/

一招教你搞定Windows系统指定IP不变[固定IP地址方法]

1.打开控制面板&#xff0c;找到“网络和Internet” 点击进入&#xff1a; 2.点击打开“网络和共享中心”后&#xff0c;选择“更改适配器选项”。 3.点击 “查看此连接的状态”&#xff0c; 接着点击“详细信息” 查看信息。记录当前的IP地址是 10.88.x.xx&#xff0c;后面我们…

第一视角:获取VC账号,是成为亚马逊供应商的全面准备与必要条件

在当今全球化、数字化的商业环境中&#xff0c;亚马逊作为全球最大的电子商务平台&#xff0c;为众多企业提供了无限的商业机会。然而&#xff0c;想要成功在亚马逊上立足&#xff0c;成为其优质供应商&#xff0c;并非易事。其中&#xff0c;VC(Vendor Central)账号&#xff0…

提高接口响应

1. 简介 接口响应慢会直接影响用户体验和降低业务效率。为了有效应对这一问题&#xff0c;合理使用多线程技术成为了一种高效的解决方案。通过将独立的任务分配给不同的线程进行并行处理&#xff0c;我们可以充分利用系统资源&#xff0c;避免单一任务阻塞整个系统&#xff0c…

【十】【QT开发应用】QT中文乱码解决方案

QT中文乱码解决方案 粘贴代码导致的乱码 粘贴别人的代码时,在记事本里面"过一遍",然后再粘贴到QTCreator 使用u8 配置QT 不使用QT使用VS QT自选编码格式 结尾 最后&#xff0c;感谢您阅读我的文章&#xff0c;希望这些内容能够对您有所启发和帮助。如果您有任何问…

[渗透测试] 任意文件读取漏洞

任意文件读取漏洞 概述 漏洞成因 存在读取文件的功能&#xff08;Web应用开放了文件读取功能&#xff09;读取文件的路径客户端可控&#xff08;完全控制或者影响文件路径&#xff09;没有对文件路径进行校验或者校验不严格导致被绕过输出文件内容 漏洞危害 下载服务器中的…

首次线下联合亮相!灵途科技携手AEye、ATI亮相2024 EAC 易贸汽车产业大会

6月22日&#xff0c;2024 EAC 易贸汽车产业大会在苏州国际博览中心圆满落幕&#xff0c;泛自动驾驶领域光电感知专家灵途科技携手自适应高性能激光雷达解决方案全球领导者AEye公司&#xff08;NASDAQ:LIDR&#xff09;及光电器件规模化量产巨头Accelight Technologies&#xff…

ASM插桩——动态添加字段并生成get set 方法

1 首先创建一个实体类Student. 代码如下 package com.org.xcyz.asm;public class Student {private int id;private String name;private boolean sex;public int getId() {return id;}public void setId(int id) {this.id id;}public String getName() {return name;}public…

触摸屏与罗克韦尔AB PLC之间 ModbusTCP/IP无线以太网通讯实例

在实际系统中&#xff0c;同一个车间里分布多台PLC&#xff0c;通过触摸屏人机界面集中控制。通常所有设备距离在几十米到上百米不等。在有通讯需求的时候&#xff0c;如果布线的话&#xff0c;工程量较大耽误工期&#xff0c;这种情况下比较适合采用无线通信方式。本方案以组态…

阿里云oss存储

文章目录 准备阿里云的OSS控制台创建bucket获取AccessKey java使用oss导入依赖官网demo修改参数运行demo代码 封装工具类Oss下载如何保证指定时间段内可以访问私有权限的图片文件&#xff1f; 准备阿里云的OSS 控制台 访问阿里云官网&#xff0c;登录以后&#xff0c;右上角有…

Omniverse 下载 isaac sim过慢的解决办法

比如在上海地区&#xff0c;下载isaac只有 200kb/s&#xff0c;这8个G下载要很长时间 对于着急的小伙伴&#xff0c;可以直接去日志里拿下载链接&#xff0c;在Omniverse里点右上角小人&#xff0c;点开里面SETTINGS&#xff0c;如图 点击&#xff0c;LOGS LOCATION&#xff0c…

校企合作,为人才培养注入新动力

树莓集团在校企合作育人方面取得了显著成效&#xff0c;通过共建专业、定制课程、实习实训等多种方式&#xff0c;实现了教育资源的优化配置和高效利用&#xff0c;为高校和企业提供了更多的发展机会和合作空间。 1、共建专业与实验室&#xff1a;树莓集团与高校共同建设数字产…

U-boot相关基础知识

U-boot和Bootloader之间的关系 U-Boot是Bootloader的一种实现&#xff0c;它专门用于嵌入式系统&#xff0c;特别是那些基于ARM、MIPS等处理器的系统。U-Boot提供了丰富的硬件支持和功能&#xff0c;使得开发者能够轻松地初始化硬件、加载操作系统内核&#xff0c;并进行一些基…

反向代购是怎么火起来的?今后的发展趋势如何?

反向代购和反向海淘的兴起可以归因于多个因素&#xff0c;这些因素共同推动了海外消费者对中国商品的需求和购买热潮。以下是对其火起来的原因的详细分析&#xff1a; 海外华人华侨的需求增加&#xff1a; 随着中国国际移民群体的扩大&#xff0c;海外华人华侨数量不断增多。这…

GD32F303 使用PA8输出内部时钟频率

前面给小伙伴介绍过串口发送和接收异常可能的一些原因&#xff0c;其中就有说到时钟频率对于异步通讯的重要性。而我们通过程序去配置的时钟都是理论值&#xff0c;那如果想要获得内部一些时钟频率的实际值&#xff0c;需要怎样做呢&#xff1f;今天&#xff0c;我们以GD32F303…

小项目——MySQL集训(学生成绩录入)

ddl语句 -- 创建学生信息表 CREATE TABLE students (student_id INT AUTO_INCREMENT PRIMARY KEY COMMENT 学生ID,name VARCHAR(50) NOT NULL COMMENT 学生姓名,gender ENUM(男, 女) NOT NULL COMMENT 性别,class VARCHAR(50) NOT NULL COMMENT 班级,registration_date DATE CO…