0


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

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

本文转载自: https://blog.csdn.net/xyh2004/article/details/139928799
版权归原作者 图灵学者 所有, 如有侵权,请联系我们删除。

“使用Python Selenium,动态网页不再是难题!”的评论:

还没有评论