使用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 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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

独立开发者系列(10)——fastadmin后台框架的认识

软件开发项目涉及到的东西非常多,作为独立开发者,普遍性的面对的是中小项目。而其中接单的情况下,以WEB方向的居多。其中主要有以下这么些类的:搭建官网cms 就是常见的资讯发布平台,发布一些企业新闻/活动宣传,纯粹是…

鸿蒙期末项目(3)

服务器搭建完成之后,编写了诸多api用于数据传输工作(略) 编写完成之后,回到鸿蒙开发工具,开始编写搜索页面的代码。 打开搜索页面时,先会展示历史搜索记录(如果有的话),…

爬取必应关键字搜索结果url

上代码 import aiohttp import asyncio from lxml import etree import aiofiles import time import random aiohttp 和 asyncio 用于异步HTTP请求和事件循环。 lxml 用于解析HTML。 aiofiles 用于异步文件操作。 time 和 random 用于控制爬取速度。 headers {User-Agent: M…

mysql安装创建数据库防止踩坑

为了安装MySQL的家人们走弯路,稍微有些啰嗦,讲述我安装的时遇到的问题,如何解决。仔细看看离成功不远。 mysql下载链接 MySQL :: Download MySQL Community Server windows下安装mysql-8.0.29-winx64,下载安装包后解压到文件夹中…

2024十大首码地推拉新app平台,一手首码对接平台!

到了2024年,地推新应用的接单平台成为创业者们关注的焦点。对于地推行业的从业人员而言,选择一家拥有一手单资源的平台至关重要,因为这直接关系到他们的利益。 2024年如果想要进行app地推活动,却没有人脉渠道的困扰,建…

谷歌网络营销中SEO的策略有哪些?

在网络营销中,SEO(搜索引擎优化)是一种关键策略,旨在提高网站在搜索引擎结果中的排名。首先,要进行关键词研究,找出潜在客户使用的搜索词。接下来,优化网站内容,使其包含这些关键词&…

【Java Web】Ajax异步请求

目录 一、Ajax概述 二、Ajax执行原理 三、实现Ajax的请求 一、Ajax概述 传统情况下,浏览器与服务端的交互都是采用同步交互的方式进行的;此交互方式用户在向服务端发送请求后只有等到服务端的响应报文回来后用户才能在标签页上进行其它操作,即…

openlayer 鼠标点击船舶,打开船舶简单弹框

背景: 对创建的地图对象,可以添加上监听事件,常用的有:地图点击事件、鼠标移动事件。 通过监听这些事件,又可以区分不同图层的不同要素,获取不同数据; 根据这些数据,又可以发起网络请…

电脑的D盘E盘F盘突然消失了 电脑只剩下C盘了其他盘怎么恢复

现如今随着时代的发展,无纸化办公成为主流,这主要归功于电脑,能够通过电脑完成的工作绝不使用纸质文件,这不仅提高了工作效率,也让一些繁杂的工作变的更加简单。不过电脑毕竟是电子产品,不可避免的会出现一…

【包邮送书】深度学习与信号处理

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和技术。关…

win11家庭版没有gpedit解决

1、右键桌面,新建记事本,把后缀名txt修改成bat 2、输入以下命令: echo offdir /b C:\Windows\servicing\Packages\Microsoft-Windows-GroupPolicy-ClientExtensions-Package~3*.mum >List.txtdir /b C:\Windows\servicing\Packages\Micr…

electron-builder创建桌面应用

一、利用vue-cli创建vue项目 创建electron方式有很多,这里说的是vuecli创建的项目,通过安装electron-builder插件创建 也可以通过electron-vite构建项目 : https://cn.electron-vite.org/guide/ vue-cli构建 vue create XXX项目名 //按提示操…

cad怎么导出为图片?分享四种导出方法

cad怎么导出为图片?在工程设计、建筑设计、机械设计等领域,CAD图纸的编辑和分享是一项日常工作。然而,如何将CAD图纸高效、准确地导出为图片格式,一直是设计师们关注的焦点。今天,就为大家推荐四款强大的CAD导出图片软…

Ubuntu 20.04安装显卡驱动、CUDA、Pytorch(2024.06最新)

文章目录 一、安装显卡驱动1.1 查看显卡型号1.2 根据显卡型号选择驱动1.3 获取下载链接1.4 查看下载的显卡驱动安装文件1.5 更新软件列表和安装必要软件、依赖1.6 卸载原有驱动1.7 禁用默认驱动1.8 安装lightdm显示管理器1.9 停止显示服务器1.10 在文本界面中,禁用X…

Java毕业设计 基于SSM vue药店管理系统小程序 微信小程序

Java毕业设计 基于SSM vue药店管理系统小程序 微信小程序 SSM 药店管理系统小程序 功能介绍 用户 登录 注册 首页 药品信息 药品详情 加入购物车 立即购买 收藏 购物车 立即下单 新增收货地址 我的收藏管理 用户充值 我的订单 留言板 管理员 登录 个人中心 修改密码 个人信息…

196.每日一题:检测大写字母(力扣)

代码解决 class Solution { public:bool detectCapitalUse(string word) {int capitalCount 0;int n word.size();// 统计大写字母的数量for (char c : word) {if (isupper(c)) {capitalCount;}}// 检查是否满足三种情况之一if (capitalCount n) {// 全部字母都是大写return…

查看LabVIEW及各个模块和驱动的版本号

要方便地查看当前计算机上安装的LabVIEW版本以及各个模块和驱动的版本号,可以使用以下几种方法: 1. 使用NI MAX (Measurement & Automation Explorer) NI MAX 是一个强大的工具,可以帮助你管理National Instruments硬件、软件和驱动程序…

软件测试面试被面试官问到:你会搭建测试环境吗?该怎么回答显得很有水平

一、你会搭建测试环境吗? 导语:很多人在面试软件测试的过程中,经常被问到“你会搭建测试环境吗”?面对这样的提问,你知道怎么回答么? 二、如何回答 面试的时候,遇到这样的提问,很多…

linux系统中vim ls grep等命令无法使用

linux突然vim ls grep等命令无法使用 系统配置路径被修改导致无法使用 添加路径 执行以下命令 export PATH$PATH:/root/bin export PATH$PATH:/usr/sbin

【Java Web】简单了解前端工程化

目录 一、什么是前端工程化? 二、前端工程化使用的技术栈 一、什么是前端工程化? 前端工程化是使用软件工程的方法来单独解决前端的开发流程中模块化、组件化、规范化、自动化的问题,其主要目的为了提高效率和降低成本。说白了就是将曾经同在一个工程中的前端和后…