前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python+playwright 学习-40.page.evaluate()执行JavaScript脚本

python+playwright 学习-40.page.evaluate()执行JavaScript脚本

作者头像
上海-悠悠
发布2023-08-22 11:09:18
6440
发布2023-08-22 11:09:18
举报
文章被收录于专栏:从零开始学自动化测试

前言

大家在学selenium的时候,对于页面上的有些元素不好操作的时候,可以使用driver.execute_script() 方法执行JavaScript脚本。 在playwright 中也有类似的方法,使用page.evaluate()执行JavaScript脚本。 page.evaluate()和page.evaluate_handle()之间的唯一区别是page.evaluate_handle()返回JSHandle。

  • page.evaluate() 返回调用执行的结果
  • page.evaluate_handle()返回JSHandle

page.evaluate()

此方法返回evaluate() 返回执行JavaScript脚本的结果,使用示例

简单示例

代码语言:javascript
复制
print(page.evaluate("1 + 2")) # prints "3"
x = 10
print(page.evaluate(f"1 + {x}")) # prints "11"

也可以是执行一个函数

代码语言:javascript
复制
res = page.evaluate("() => 'Hello World!'",)
print(res)   # Hello World!

函数也可以带上参数

代码语言:javascript
复制
res = page.evaluate("([a, b]) => a+b+'world'", ["hello", 'xx'])
print(res)  # helloxxworld

如果传递给page.evaluate()的函数返回一个不可序列化的值,则page.evaluate()解析为undefined

操作 web 网页示例

执行document.title 获取页面的title

代码语言:javascript
复制
    page.goto("https://www.baidu.com/")

    title = page.evaluate('document.title')
    print(title)
    page.pause()

登录网站示例

代码语言:javascript
复制
# 上海悠悠 wx:283340479
# blog:https://www.cnblogs.com/yoyoketang/

    page = browser.new_page()
    page.goto("http://127.0.0.1/login.html")

    js = """
    document.getElementById('username').value='yoyo';
    document.getElementById('password').value='******';
    document.getElementById('loginBtn').click();
    """

    page.evaluate(js)

page.evaluate() 方法一般用于页面上操作元素,无法正常操作的情况,可以用执行JavaScript脚本协助解决。

page.evaluate_handle()返回JSHandle

page.evaluate()和page.evaluate_handle()之间的唯一区别是page.evaluate_handle()返回JSHandle。

代码语言:javascript
复制
    a_handle = page.evaluate_handle("document.body")
    result_handle = page.evaluate_handle("body => body.innerHTML", a_handle)
    print(result_handle.json_value())
    result_handle.dispose()
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-05-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 从零开始学自动化测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • page.evaluate()
  • 操作 web 网页示例
  • page.evaluate_handle()返回JSHandle
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档