当前位置: 代码网 > it编程>编程语言>Javascript > 使用Selenium的execute_script方法执行JavaScript代码

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

2024年08月01日 Javascript 我要评论
通过 execute_script 方法,利用 JavaScript 的强大功能与页面进行更深入的交互,完成一些 Selenium 本身无法直接实现的功能,从而更灵活地进行 Web 自动化测试或数据抓取任务。

seleniumexecute_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)")

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

# 示例:插入行到表格
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 自动化测试或数据抓取任务。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com