python Selenium3 执行JavaScript脚本

介绍

Selenium 能够执行 JavaScript,这使得 Selenium 拥有更为强大的能力,对于执行一些 WebDriver 本身不提供的操作非常有用:

  • 直接使用js操作页面,能解决很多click()不生效的问题
  • 页面滚动到底部,顶部
  • 处理富文本
  • 时间控件的输入

语法

driver.execute_script(script, *args)

参数:

  • script:JavaScript脚本

  • args:可选的参数,该参数传给 JavaScript 脚本

例子:弹出提示框

driver.execute_script("window.alert('Selenium弹框测试')")

例子:获取input控件的值

driver.execute_script("a = document.getElementByld('kw').value;window.alert(a)")

例子:滑动到页面底部

self.driver.execute_script("document.documentElement.scrollTop=10000")

传参

arguments 对象在Selenium的 execute_script() 方法中,表示传递给 JavaScript代码的参数

例子

from selenium import webdriver

driver = webdriver.Chrome()

# 示例:通过 ID 查找元素并设置文本内容
driver.get("https://www.baidu.com")
driver.execute_script("alert(arguments[0])", "哈喽")

获取 JavaScript 返回结果

如果 JavaScript 代码返回一个值,那么 execute_script 方法也会返回这个值

例子

返回 input 控件的值:

el = driver.execute _script("return document.getElementById('kw').value")

传参并返回结果

例子1

将 JavaScript函数 add(),作为 execute_script()方法的第一个参数传递,
并将参数 2 和 3 传递给 add() 函数。

JavaScript代码将在浏览器中执行,并将 JavaScript add() 函数的返回结果赋值给 result

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()

例子2

注意:本例中没有定义 JavaScript 函数

通过JavaScript获取元素,并返回;将该元素对象传给 execute_script(),arguments 对象在Selenium的 execute_script() 方法中,表示传递给 JavaScript代码的参数

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()

参考:
https://www.jianshu.com/p/7b760e2db555
https://blog.csdn.net/book_dw5189/article/details/136978681


原文出处:/show_1GWQv7ibl2J.html