当前位置:   article > 正文

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

execute_script

Seleniumexecute_script 方法允许在浏览器上下文中执行 JavaScript 代码。这对于执行一些 WebDriver 本身不提供的操作非常有用,比如直接操作 DOM 元素、执行一些特定的 JavaScript 功能等。这个方法的一般语法是:

driver.execute_script(script, *args)
  • script 是要执行的 JavaScript 代码。
  • args 是可选的参数,它们可以传递给 JavaScript 代码。

这个方法的返回值取决于执行的 JavaScript 代码。通常情况下,如果 JavaScript 代码返回一个值,那么 execute_script 方法也会返回这个值。

  1. from selenium import webdriver
  2. driver = webdriver.Chrome()
  3. driver.get("https://example.com")
  4. # 使用execute_script方法执行JavaScript代码并传递参数
  5. result = driver.execute_script("function add(a, b) { return a + b; }", 2, 3)
  6. print(result) # 输出结果为 5
  7. driver.quit()

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

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

  • 1. **查找和操作元素**:

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

  1. from selenium import webdriver
  2. driver = webdriver.Chrome()
  3. # 示例:通过 ID 查找元素并设置文本内容
  4. driver.get("https://example.com")
  5. element = driver.execute_script("return document.getElementById('element_id')")
  6. driver.execute_script("arguments[0].textContent = 'New text'", element)
  7. # 示例:点击元素
  8. driver.execute_script("arguments[0].click()", element)
  9. # 示例:触发事件
  10. driver.execute_script("arguments[0].dispatchEvent(new Event('click'))", element)
  11. # 示例:模拟键盘按键
  12. driver.execute_script("arguments[0].dispatchEvent(new KeyboardEvent('keydown', {key: 'Enter'}))", element)
  13. driver.quit()

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

  1. from selenium import webdriver
  2. driver = webdriver.Chrome()
  3. driver.get("https://example.com")
  4. # 使用execute_script方法获取特定DOM元素的文本内容
  5. text = driver.execute_script("return arguments[0].textContent", driver.find_element_by_tag_name("h1"))
  6. print(text)
  7. driver.quit()

 在这个例子中,我们使用execute_script方法来获取页面上的h1元素的文本内容。我们首先使用find_element_by_tag_name方法找到h1元素,然后将其作为execute_script方法的第一个参数传递。JavaScript代码"return arguments[0].textContent"将返回h1元素的文本内容,我们可以从返回值中获取这个值。

  • 2. **页面滚动**:

   - 滚动到指定位置
   - 滚动到元素可见

  1. # 示例:滚动到指定位置
  2. driver.execute_script("window.scrollTo(0, 500)")
  3. # 示例:滚动到元素可见
  4. driver.execute_script("arguments[0].scrollIntoView(true);", element)
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
3. **表单操作**:
   - 提交表单
   - 重置表单
  1. # 示例:提交表单
  2. form_element = driver.execute_script("return document.getElementById('form_id')")
  3. driver.execute_script("arguments[0].submit()", form_element)
  4. # 示例:重置表单
  5. driver.execute_script("arguments[0].reset()", form_element)
  • 4. **浏览器操作**:

   - 设置浏览器标题
   - 弹出提示框
   - 刷新页面

  1. title = driver.execute_script("return document.title;")
  2. print("页面标题:", title)
  1. from selenium import webdriver
  2. import time
  3. # 创建 WebDriver 实例(如 Chrome WebDriver)
  4. driver = webdriver.Chrome()
  5. # 打开网页
  6. driver.get("https://www.example.com")
  7. # 触发一个警告框(alert、confirm 或 prompt)
  8. driver.execute_script("alert('This is an alert message.')")
  9. # switch_to.alert 方法是 Selenium 中用于处理浏览器中出现的警告框(alert、confirm 和 prompt)的方法。
  10. # 它的作用是将 WebDriver 的控制权切换到警告框上,以便进行相应的操作。
  11. # 切换到警告框
  12. alert = driver.switch_to.alert
  13. time.sleep(4)
  14. # 对警告框进行操作,例如获取文本和点击确认按钮
  15. alert_text = alert.text # 获取警告框的文本
  16. print("Alert Text:", alert_text)
  17. alert.accept() # 点击确认按钮
  18. # 关闭浏览器
  19. driver.quit()
  1. # 示例:设置浏览器标题
  2. driver.execute_script("document.title = 'New Title'")
  3. # 示例:刷新页面
  4. driver.execute_script("location.reload()")
5. **Cookie 和存储操作**:
   - 设置 Cookie
   - 获取 Cookie
   - 存储数据到 localStorage/sessionStorage
   - 获取 localStorage/sessionStorage 数据
  1. # 示例:设置 Cookie
  2. driver.execute_script("document.cookie = 'name=value; expires=date; path=path'")
  3. # 示例:获取 Cookie
  4. cookies = driver.execute_script("return document.cookie")
  5. # 示例:存储数据到 localStorage
  6. driver.execute_script("localStorage.setItem('key', 'value')")
  7. # 示例:获取 localStorage 数据
  8. data = driver.execute_script("return localStorage.getItem('key')")
6. **其他操作**:
   - 添加/移除类名
   - 获取/设置属性值
   - 延迟执行函数
  1. # 示例:添加类名
  2. driver.execute_script("arguments[0].classList.add('new-class')", element)
  3. # 示例:获取属性值
  4. attribute_value = driver.execute_script("return arguments[0].getAttribute('attribute_name')", element)
  5. # 示例:创建新元素并添加到文档
  6. new_element = driver.execute_script("return document.createElement('div')")
  7. driver.execute_script("document.body.appendChild(arguments[0])", new_element)
  8. # 示例:延迟执行函数
  9. driver.execute_script("setTimeout(function(){ /* 操作 */ }, 2000)")

7. **页面元素操作**:
   - 插入行到表格
   - 插入单元格到行
   - 创建新元素并添加到文档

  1. # 示例:插入行到表格
  2. table = driver.execute_script("return document.getElementById('table_id')")
  3. driver.execute_script("table.insertRow(index)")
  4. # 示例:插入单元格到行
  5. row = driver.execute_script("return document.getElementById('row_id')")
  6. driver.execute_script("row.insertCell(index)")
  7. # 示例:创建新元素并添加到文档
  8. new_element = driver.execute_script("return document.createElement('div')")
  9. driver.execute_script("document.body.appendChild(arguments[0])", new_element)
8. **对话框处理**:
   - 弹出警告框
   - 更改 confirm 对话框返回值
  1. # 示例:弹出警告框
  2. driver.execute_script("alert('Hello, this is an alert!')")
  3. # 示例:更改 confirm 对话框返回值
  4. driver.execute_script("window.confirm = function(){return true;}")
9. **页面交互**:
   - 添加事件监听器
   - 触发自定义事件
  1. # 示例:添加事件监听器
  2. driver.execute_script("arguments[0].addEventListener('click', function(){ /* 处理函数 */ })", element)
  3. # 示例:触发自定义事件
  4. driver.execute_script("arguments[0].dispatchEvent(new Event('customEvent'))", element)
10. **样式操作**:
   - 更改背景颜色
   - 显示/隐藏元素
  1. # 示例:更改背景颜色
  2. driver.execute_script("arguments[0].style.backgroundColor = 'yellow'", element)
  3. # 示例:显示/隐藏元素
  4. 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 自动化测试或数据抓取任务。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/518508
推荐阅读
相关标签
  

闽ICP备14008679号