0


使用Selenium的execute_script方法执行JavaScript代码

**

Selenium

execute_script

方法允许在浏览器上下文中执行 JavaScript 代码。这对于执行一些

WebDriver

本身不提供的操作非常有用,比如直接操作

DOM

元素、执行一些特定的

JavaScript

功能等。**这个方法的一般语法是:

**
driver.execute_script(script, *args) 

**

  • script 是要执行的 JavaScript 代码。
  • args 是可选的参数,它们可以传递给 JavaScript 代码。

这个方法的返回值取决于执行的

JavaScript

代码。通常情况下,如果

JavaScript

代码返回一个值,那么

execute_script

方法也会返回这个值。

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://example.com")

# 使用execute_script方法执行JavaScript代码并传递参数
result = driver.execute_script("function add(a, b) { return a + b; }", 2, 3)

print(result)  # 输出结果为 5

driver.quit()

在这个例子中,我们将JavaScript代码作为execute_script方法的第一个参数传递,并将要传递的参数(2和3)作为第二个参数传递。JavaScript代码将在浏览器上下文中执行,并且**

arguments

对象**将包含传递的参数(在这个例子中是2和3)。

可以将其功能大致分类如下:

  • 1. 查找和操作元素
    • 通过 ID 查找元素
    • 通过类名查找元素
    • 通过标签名查找元素
    • 通过 CSS 选择器查找元素
    • 设置元素文本内容
    • 设置元素值(适用于输入框等)
    • 设置元素样式
    • 点击元素
    • 触发事件
    • 模拟键盘按键
from selenium import webdriver

driver = webdriver.Chrome()

# 示例:通过 ID 查找元素并设置文本内容
driver.get("https://example.com")
element = driver.execute_script("return document.getElementById('element_id')")
driver.execute_script("arguments[0].textContent = 'New text'", element)

# 示例:点击元素
driver.execute_script("arguments[0].click()", element)

# 示例:触发事件
driver.execute_script("arguments[0].dispatchEvent(new Event('click'))", element)

# 示例:模拟键盘按键
driver.execute_script("arguments[0].dispatchEvent(new KeyboardEvent('keydown', {key: 'Enter'}))", element)

driver.quit()

**

arguments

对象在Selenium的execute_script方法中表示传递给JavaScript代码的参数**。通过将参数作为execute_script方法的第二个参数传递,您可以在JavaScript代码中访问这些参数,并在浏览器上下文中执行自定义操作。

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://example.com")

# 使用execute_script方法获取特定DOM元素的文本内容
text = driver.execute_script("return arguments[0].textContent", driver.find_element_by_tag_name("h1"))
print(text)

driver.quit()

在这个例子中,我们使用execute_script方法来获取页面上的h1元素的文本内容。我们首先使用find_element_by_tag_name方法找到h1元素,然后将其作为execute_script方法的第一个参数传递。JavaScript代码

"return arguments[0].textContent"

将返回h1元素的文本内容,我们可以从返回值中获取这个值。

  • 2. 页面滚动
    • 滚动到指定位置
    • 滚动到元素可见
# 示例:滚动到指定位置
driver.execute_script("window.scrollTo(0, 500)")

# 示例:滚动到元素可见
driver.execute_script("arguments[0].scrollIntoView(true);", element)
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
3. 表单操作
- 提交表单
- 重置表单
# 示例:提交表单
form_element = driver.execute_script("return document.getElementById('form_id')")
driver.execute_script("arguments[0].submit()", form_element)

# 示例:重置表单
driver.execute_script("arguments[0].reset()", form_element)
  • 4. 浏览器操作
    • 设置浏览器标题
    • 弹出提示框
    • 刷新页面
title = driver.execute_script("return document.title;")
print("页面标题:", title)
from selenium import webdriver
import time
# 创建 WebDriver 实例(如 Chrome WebDriver)
driver = webdriver.Chrome()

# 打开网页
driver.get("https://www.example.com")

# 触发一个警告框(alert、confirm 或 prompt)
driver.execute_script("alert('This is an alert message.')")

# switch_to.alert 方法是 Selenium 中用于处理浏览器中出现的警告框(alert、confirm 和 prompt)的方法。
# 它的作用是将 WebDriver 的控制权切换到警告框上,以便进行相应的操作。

# 切换到警告框
alert = driver.switch_to.alert
time.sleep(4)
# 对警告框进行操作,例如获取文本和点击确认按钮
alert_text = alert.text  # 获取警告框的文本
print("Alert Text:", alert_text)

alert.accept()  # 点击确认按钮

# 关闭浏览器
driver.quit()
# 示例:设置浏览器标题
driver.execute_script("document.title = 'New Title'")

# 示例:刷新页面
driver.execute_script("location.reload()")
5. Cookie 和存储操作
- 设置 Cookie
- 获取 Cookie
- 存储数据到 localStorage/sessionStorage
- 获取 localStorage/sessionStorage 数据
# 示例:设置 Cookie
driver.execute_script("document.cookie = 'name=value; expires=date; path=path'")

# 示例:获取 Cookie
cookies = driver.execute_script("return document.cookie")

# 示例:存储数据到 localStorage
driver.execute_script("localStorage.setItem('key', 'value')")

# 示例:获取 localStorage 数据
data = driver.execute_script("return localStorage.getItem('key')")
6. 其他操作
- 添加/移除类名
- 获取/设置属性值
- 延迟执行函数
# 示例:添加类名
driver.execute_script("arguments[0].classList.add('new-class')", element)

# 示例:获取属性值
attribute_value = driver.execute_script("return arguments[0].getAttribute('attribute_name')", element)

# 示例:创建新元素并添加到文档
new_element = driver.execute_script("return document.createElement('div')")
driver.execute_script("document.body.appendChild(arguments[0])", new_element)

# 示例:延迟执行函数
driver.execute_script("setTimeout(function(){ /* 操作 */ }, 2000)")
  1. 页面元素操作
    • 插入行到表格
    • 插入单元格到行
    • 创建新元素并添加到文档
# 示例:插入行到表格
table = driver.execute_script("return document.getElementById('table_id')")
driver.execute_script("table.insertRow(index)")

# 示例:插入单元格到行
row = driver.execute_script("return document.getElementById('row_id')")
driver.execute_script("row.insertCell(index)")

# 示例:创建新元素并添加到文档
new_element = driver.execute_script("return document.createElement('div')")
driver.execute_script("document.body.appendChild(arguments[0])", new_element)
8. 对话框处理
- 弹出警告框
- 更改 confirm 对话框返回值
# 示例:弹出警告框
driver.execute_script("alert('Hello, this is an alert!')")

# 示例:更改 confirm 对话框返回值
driver.execute_script("window.confirm = function(){return true;}")
9. 页面交互
- 添加事件监听器
- 触发自定义事件
# 示例:添加事件监听器
driver.execute_script("arguments[0].addEventListener('click', function(){ /* 处理函数 */ })", element)

# 示例:触发自定义事件
driver.execute_script("arguments[0].dispatchEvent(new Event('customEvent'))", element)
10. 样式操作
- 更改背景颜色
- 显示/隐藏元素
# 示例:更改背景颜色
driver.execute_script("arguments[0].style.backgroundColor = 'yellow'", element)

# 示例:显示/隐藏元素
driver.execute_script("arguments[0].style.display = 'none'", element)

**

execute_script

方法在 Selenium 中是一个非常有用的工具,它允许你直接在浏览器中执行自定义的 JavaScript 代码,从而实现与页面更深入的交互和操作。**通过这个方法,你可以执行各种自定义的 JavaScript 功能,例如:

  1. 操作 DOM 元素: 可以通过 JavaScript 修改、添加或删除页面上的元素,改变其样式、属性或内容。
  2. 模拟用户行为: 可以模拟用户的点击、输入、滚动等操作,例如触发事件、执行动作等。
  3. 页面滚动: 可以通过 JavaScript 控制页面的滚动,实现滚动到指定位置、滚动到元素可见等功能。
  4. 获取页面信息: 可以通过 JavaScript 获取页面的各种信息,例如页面标题、URL、元素属性、页面加载状态等。
  5. 执行复杂操作: 可以执行一些比较复杂的操作,例如执行自定义的 JavaScript 函数、调用第三方 JavaScript 库等。

**通过

execute_script

方法,利用 JavaScript 的强大功能与页面进行更深入的交互,完成一些 Selenium 本身无法直接实现的功能,从而更灵活地进行 Web 自动化测试或数据抓取任务。**


本文转载自: https://blog.csdn.net/book_dw5189/article/details/136978681
版权归原作者 铁松溜达py 所有, 如有侵权,请联系我们删除。

“使用Selenium的execute_script方法执行JavaScript代码”的评论:

还没有评论