介绍
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