[Web自动化] Selenium执行JavaScript语句

10.3 Selenium执行JavaScript语句

在 Selenium 中,你可以使用 execute_script()execute_async_script() 方法来执行 JavaScript 语句。

以下是一些实用的例子:

10.3.1 执行简单的 JavaScript 语句

python 复制代码
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("http://example.com")
# 执行简单的 JavaScript 语句,比如打印一条消息到控制台
driver.execute_script("console.log('Hello, World!');")

10.3.2 处理需要JavaScript渲染的页面元素

有时,页面元素是通过JavaScript动态生成的,直接使用Selenium的find_element方法可能找不到。这时,可以使用上述的execute_script方法来访问这些元素。

python 复制代码
# 执行JavaScript代码
driver.execute_script("alert('Hello from JavaScript!');")
# 访问需要JavaScript渲染的页面元素
element = driver.execute_script("return document.getElementById('dynamic_element');")

10.3.3 通过 JavaScript 点击元素

python 复制代码
# 假设页面上有一个按钮
button = driver.find_element_by_id("myButton")
# 使用 JavaScript 来点击这个按钮
driver.execute_script("arguments[0].click();", button)

10.3.4 获取元素属性值

python 复制代码
element = driver.find_element_by_id("myElement")
# 使用 JavaScript 获取元素的 'class' 属性值
class_name = driver.execute_script("return arguments[0].className;", element)
print(class_name)

10.3.5 设置元素属性值

python 复制代码
element = driver.find_element_by_id("myElement")
# 使用 JavaScript 设置元素的 'style.display' 属性
driver.execute_script("arguments[0].style.display = 'none';", element)

10.3.6 滚动到页面底部

python 复制代码
# 使用 JavaScript 滚动到页面底部
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

10.3.7 等待页面元素加载完成

python 复制代码
# 等待某个元素出现在页面上
element = driver.find_element_by_id("myElement")
script = """
return new Promise((resolve, reject) => {
    const observer = new MutationObserver((mutations, observer) => {
        if (document.contains(arguments[0])) {
            resolve();
        }
    });
    observer.observe(document.body, { childList: true, subtree: true });
});
"""
driver.execute_script(script, element)

10.3.8 执行异步 JavaScript 代码

python 复制代码
# 假设你需要执行异步的 JavaScript 代码,比如等待一个 AJAX 请求完成
script = """
return fetch('https://api.example.com/data')
    .then(response => response.json())
    .then(data => {
        return data; // 或者你想要操作的数据
    });
"""
result = driver.execute_async_script(script)
print(result)

10.3.9 通过 JavaScript 获取元素的内部文本

python 复制代码
element = driver.find_element_by_id("myElement")
# 使用 JavaScript 获取元素的内部文本
text = driver.execute_script("return arguments[0].textContent;", element)
print(text)

10.3.10 通过 JavaScript 操作浏览器窗口

python 复制代码
# 使用 JavaScript 关闭当前浏览器窗口
driver.execute_script("window.close();")

这些例子展示了如何使用 execute_script() 方法执行各种 JavaScript 操作。在某些情况下,你可能需要将找到的 WebElement 作为参数传递给 JavaScript 代码,arguments[0] 是一个特殊的变量,它在 JavaScript 代码中代表了传递给 execute_script() 的第一个参数。

相关推荐
ℋᙚᵐⁱᒻᵉ鲸落2 小时前
移动端滑动手势冲突:overflow: auto导致外层横向滑动失效
前端·javascript·css·vue.js·html
默_笙3 小时前
🎃 前端学了 Next.js,后端该学啥?NestJS 就是 Node 版的蜜雪冰城
前端·javascript
傲笑风4 小时前
【openvino】tinybert基于openvino服务化部署(四)
人工智能·python·自然语言处理·nlp·bert·openvino
维基框架4 小时前
WIKI 知识库 v1.1.1 正式发布
人工智能·python
前端snow4 小时前
ai agent --- 实现 openclaw 定时间效果
前端
码云之上4 小时前
换模型之后,Chatbot 为什么要自己做 compact?
前端·agent·前端工程化
এ慕ོ冬℘゜4 小时前
navigator 导航对象 BOM制作方法
javascript
星栈5 小时前
自定义 UI-UX-Pro-Max 的 CSV 知识库,把 AI 生成的后台拉回行业该有的样子
前端·agent·weui
研☆香5 小时前
简单的图片上传 删除 预览
前端
ITresearchGuest5 小时前
我用 AI 一小时写了一个世界杯数据可视化平台|前端 VibeCoding 初体验
前端·人工智能·信息可视化