【selenium】执行js脚本

这篇具有很好参考价值的文章主要介绍了【selenium】执行js脚本。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在当前窗口或框架上下文中,执行 JavaScript 脚本。

使用JavaScript操作页面:

  • 解决点击不生效的问题
  • 页面滚动
  • 修改元素属性

JavaScript

// 进入浏览器 -> 检查 -> console
// 获取网页名称
document.title

// 显示 alert
window.alert("hello selenium")

// 获取网页的性能数据
JSON.stringify(performance.timing)

Selenium 调用

def execute_script(self, script, *args):
    # script: JavaScript 代码
   	# args: 任何适用于 JavaScript 的参数
    ...
    
# 示例:返回 h1 标签元素的文本
driver.get("https://www.selenium.dev/")
header = driver.find_element(By.CSS_SELECTOR, "h1")
# return: 返回 js 执行结果
# arguments: 参数传递
text = driver.execute_script('return arguments[0].innerText', header)
assert text == "Selenium automates browsers. That's it!"
定位元素
js = 'return document.getElementById("su")'
driver.execute_script(js)
滑动

常见的滑动场景分为四种:文章来源地址https://www.toymoban.com/news/detail-582260.html

  • 滑动至底部
  • 滑动至顶部
  • 滑动至具体位置
  • 滑动至目标元素可见
# 模拟鼠标滚轮,滑动页面至底部
js = "window.scrollTo(0, document.body.scrollHeight)" 
driver.execute_script(js)

# 模拟鼠标滚轮,滑动页面至顶部
js = "window.scrollTo(0, 0)"
driver.execute_script(js)
js = "window.scrollBy(0, 500)"  # 向下滑动500个像素
js = "window.scrollBy(0, -500)" # 向上滚动500个像素
js = "window.scrollBy(500, 0)"  # 向右滑动500个像素
js = "window.scrollBy(-500, 0)" # 向左滚动500个像素

# 滑动到具体位置
driver.execute_script("window.scrollTo(x, y)")  

# 向下滚动至-元素可见
driver.execute_script("arguments[0].scrollIntoView();", element)
 
# 向上滚动至-元素可见
driver.execute_script("arguments[0].scrollIntoView(false);", element)
示例:操作控件 & 获取返回值
# 场景:百度搜索结果页,滑动到页面底部,点击下一页

"""
1. 进入搜索结果页
"""
driver.get("http://www.baidu.com")
driver.find_element_by_id("kw").send_keys("selenium")
ele_search = driver.execute_script('return document.getElementById("su")')
ele_search.click()

"""
2. 通过 JavaScript 滑动到页面底部
"""
js_code = "document.documentElement.scrollTop=10000"
driver.execute_script(js_code)
sleep(2)
driver.find_element_by_css_selector("#page a:nth-last-child(1)").click()

"""
3. 断言页面跳转,打印页面标题和页面性能数据
"""
# 方法一: 多条 js 脚本分别执行
js_codes = [
    "return document.title",
    "return JSON.stringify(performance.timing)"
]
for code in js_codes:
    print(self.driver.execute_script(code))

# 方法二 合并执行
# 注意,在 title 处已经返回,后续不会执行
js_code = "return document.title;return JSON.stringify(performance.timing)"
title = self.driver.execute_script(js_code)
assert title == "selenium_百度搜索"

# 会打印 timing ,因为 title 未返回
js_code = "document.title;return JSON.stringify(performance.timing)"
print(self.driver.execute_script(js_code))
示例:修改控件属性
"""
时间控件属性为 readonly
手动测试时:手动去选择对应的时间
自动化测试时:使用 js 修改控件属性
	- 要取消日志的 readonly 属性
	- 给 value 赋值

场景:12306 网站内修改出发日期
"""

"""
1. 打开 12306
"""
driver.get("https://www.12306.cn/index/")

"""
2. 修改出发日期为 2021-5-12
"""
driver.execute_script(
    'train_date=document.getElementById("train_date");'
    'train_date.removeAttribute("readonly");'
    'train_date.value = "2021-05-12"'
)

"""
3. 打印出发日期
"""
print(driver.execute_script(
    'return document.getElementById("train_date").value')
)
driver.quit()

到了这里,关于【selenium】执行js脚本的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于Selenium模块实现无界面模式 & 执行JS脚本

    此篇文章主要介绍如何使用 Selenium 模块实现 无界面模式 执行JS脚本(把滚动条拉到底部),并以具体的示例进行展示。 创建浏览器对象之前,创建 options 功能对象 : options = webdriver.ChromeOptions() 添加无界面功能参数: options.add_argument(\\\"--headless\\\") 构造浏览器对象,打开浏览器,并

    2024年02月13日
    浏览(37)
  • python脚本——selenium自动化执行一些网页上的操作

    通过python的selenium模块,自动化执行一些网页上的重复的无聊的工作。 chromdriver下载地址

    2024年02月13日
    浏览(55)
  • Selenium4+Python3 - Iframe、Select控件、交互式弹出框、执行JS、Cookie操作

    iframe识别: 语法: driver.switch_to.frame(‘方式’) 1、常见处理方法三种 index:下标 name:id或name属性的值 webelement:元素 2、通过下标进入 进入第一个iframe: 3、通过id或name属性的值进入 通过id或name属性的值进入指定的iframe: 4、通过iframe元素进入iframe 通过iframe元素进入指定i

    2024年02月04日
    浏览(59)
  • JavaScript+Selenium自动化测试_selenium和js能一起做自动化测试

    var webdriver = require(‘selenium-webdriver’), By = webdriver.By, until = webdriver.until; var driver = new webdriver.Builder() .forBrowser(‘chrome’) .build(); driver.get(‘https://www.baidu.com’); driver.findElement(By.id(‘kw’)).sendKeys(‘webdriver’); driver.findElement(By.id(‘su’)).click(); driver.wait(until.titleIs(‘webdriver_百度

    2024年04月25日
    浏览(42)
  • selenium 执行js后拿不到返回值的原因

    1.js代码报错,可以把代码放到浏览器控制台中执行查看具体报错信息; 2.如果js中使用了ajax调用,最后return出去请求的结果值,记得把参数async设置为false;async默认设置为true,如果你的返回结果在请求的后面程序不会等待ajax请求返回就会执行完毕,会直接执行ajax后面的语句

    2024年02月04日
    浏览(29)
  • selenium执行js代码的两个方法你都会用吗?

    在使用selenium做web自动化的时候,很多小伙伴反馈有些页面上动作我们无法通过selenium封装的方法直接去做,比如说修改元素的属性,影子节点的操作等等。需要使用原生的js代码去实现,而selenium也给我提供了两个执行js代码的方法,一个是execute_script,另一个是execute_async_s

    2024年04月28日
    浏览(36)
  • 【技巧】ScriptEngine--Java动态执行JS Javascript脚本(可调用java的方法)

    开发手册 Java Platform, Standard Edition Nashorn User\\\'s Guide, Release 14 用户手册 Nashorn User\\\'s Guide (oracle.com) https://docs.oracle.com/en/java/javase/14/nashorn/ 甚至可以让前端来写后端业务代码 可以通过js调用java的方法, 通过传参的方式将java对象传给js 可以单独写个JsUtil 让js来调用 里边写常用的方法

    2024年02月01日
    浏览(44)
  • selenium(4)-------自动化测试脚本(python)

    webdriverAPI 一)定位元素的方式,必问 1.1)id来定位元素,前提是元素必须具有id属性,因为有的元素是没有id的 1.2)name,元素必须有name,并且必须全局唯一 1.3)tagname,元素是一定有的,但是必须全局唯一才可以定位到元素 1.4)classname,class的名字,必须全局唯一 1.5)link_text,通过

    2024年02月02日
    浏览(52)
  • 渗透测试——python脚本(selenium模块)暴力破解

    免责声明 本文仅用于技术讨论与学习,利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。 背景:实习的第二个周的第二个评估网站项目,很明显,这里没有验证码(有验证码的情况也可以用这个方法,具

    2024年02月02日
    浏览(45)
  • (问卷星)自动填写问卷星脚本python、selenium

    该脚本只解决了单选,多选以及量表和矩阵量表,别的题目都没有改到,其次,如果多选有其他这个选项请修改代码,或者有最多和最少选择项规定,请修改源码。

    2024年02月11日
    浏览(61)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包