driver.execute_script() 是 Selenium WebDriver 中非常强大且灵活的功能,可以用来执行任意的 JavaScript 代码在浏览器上下文中。以下是一些常用的 execute_script() 方法的例子和用法:
- 修改元素的属性和值
python# 修改输入框的值
driver.execute_script("arguments[0].value = '你好'", element)#清空输入框
driver.execute_script("arguments[0].value = ''", element)# 修改元素的属性
driver.execute_script("arguments[0].setAttribute('style', 'background: yellow')", element)
- 获取元素的属性或值
# 获取元素的值
value = driver.execute_script("return arguments[0].value", element)# 获取元素的属性
attribute = driver.execute_script("return arguments[0].getAttribute('attributeName')", element)
- 执行滚动操作
# 滚动到顶部
driver.execute_script("window.scrollTo(0, 0);")# 滚动到页面底部
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")#在实际项目中,滚动到顶部和底部操作十分常见,在滚动前后页面元素可能还没有加载完毕,因此需要考虑加上显示等待操作:# 设置显式等待,等待直到页面加载完成(例如,可以等待页面底部的某个元素出现)
wait = WebDriverWait(driver,10)# 等待时间设置为10秒钟#滚动到特定元素#特定元素element,是定位的位置,可以是文字,也可以是具体某个下拉框,选择框等等;
driver.execute_script("arguments[0].scrollIntoView(true);", element)
- 执行点击操作
# 点击元素#.click() 方法用于模拟用户在页面上点击某个元素,例如一个按钮、链接或者其他可点击的元素
element = driver.find_element_by_xpath("//button[@id='myButton']")
driver.execute_script("arguments[0].click();", element)#.focus() 方法用于将焦点设置到页面上的某个元素,通常是表单元素(如输入框)或者可接受焦点的其他元素#这通常用于模拟用户手动在页面上进行焦点操作,例如在输入框中输入内容之前,先确保该输入框已经获得了焦点
input_box = driver.find_element_by_xpath("//input[@id='username']")
driver.execute_script("arguments[0].focus();", input_box)
input_box.send_keys("desired_text")
注意!!!
.click()一般只用于点击操作,如果使用点击后输入操作会无效,所以给输入框输入文字请采用.focus()将焦点设置到指定的元素上,再输入自定义的内容
- 获取页面内容或元数据
# 获取页面的标题
title = driver.execute_script("return document.title;")# 获取页面的URL
url = driver.execute_script("return document.URL;")
- 操作浏览器的导航
# 前进到下一个页面
driver.execute_script("window.history.go(1);")# 返回到上一个页面
driver.execute_script("window.history.go(-1);")
- 执行复杂的 JavaScript 代码
# 执行一个自定义的 JavaScript 函数
result = driver.execute_script("""
function customFunction() {
// 自定义逻辑
return 'Hello from custom function!';
}
return customFunction();
""")
- 处理 AJAX 请求或动态内容
python# 等待 AJAX 请求完成
driver.execute_script("""
var callback = arguments[arguments.length - 1];
var xhr = new XMLHttpRequest();
xhr.open('GET', '/some/ajax/request', true);
xhr.onreadystatechange = function() {
if (xhr.readyState == 4) {
callback(xhr.responseText);
}
};
xhr.send();
""")
- 创建和触发事件
# 创建并触发一个事件
driver.execute_script("""
var event = new Event('change');
arguments[0].dispatchEvent(event);
""", element)
版权归原作者 ZingKings 所有, 如有侵权,请联系我们删除。