python Selenium3 执行JavaScript脚本 作者:马育民 • 2025-01-19 09:30 • 阅读:10002 # 介绍 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 原文出处:http://malaoshi.top/show_1GWQv7ibl2J.html