Playwright执行 JavaScript 脚本:探索浏览器自动化的新境界

news/2024/9/22 11:42:03

前言

我们在进行web自动化时,经常遇到一些不好操作的元素,普通的元素定位和操作容易报错,如果我们使用的selenium的话,就可以使用selenium调用js脚本进行操作。在playwright 中也有类似的方法,使用page.evaluate()执行JavaScript脚本。
page.evaluate()和page.evaluate_handle()之间的唯一区别是page.evaluate_handle()返回JSHandle。

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

page.evaluate()

返回evaluate() 返回执行JavaScript脚本的结果,使用示例如下:

from playwright.sync_api import sync_playwrightdef run_js_script():with sync_playwright() as playwright:browser = playwright.chromium.launch(headless=False)context = browser.new_context()page = context.new_page()page.goto('https://www.baidu.com')print(page.evaluate("1 + 2"))# 关闭浏览器context.close()browser.close()run_js_script()

也可以执行一个函数,如下:

from playwright.sync_api import sync_playwrightdef run_js_script():with sync_playwright() as playwright:browser = playwright.chromium.launch(headless=False)context = browser.new_context()page = context.new_page()page.goto('https://www.baidu.com')print(page.evaluate("() => '拜仁慕尼黑'"))# 关闭浏览器context.close()browser.close()run_js_script()

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

示例

  1. 打印网页标题

执行document.title 获取页面的title,代码如下:

from playwright.sync_api import sync_playwrightdef run_js_script():with sync_playwright() as playwright:browser = playwright.chromium.launch(headless=False)context = browser.new_context()page = context.new_page()page.goto("https://www.baidu.com/")title = page.evaluate('document.title')print(title)page.pause()# 关闭浏览器context.close()browser.close()run_js_script()
  1. 操作元素示例
from playwright.sync_api import sync_playwrightdef run_js_script():with sync_playwright() as playwright:browser = playwright.chromium.launch(headless=False)context = browser.new_context()page = context.new_page()page.goto("https://www.baidu.com/")js = """document.getElementById('kw').value='playwright';document.getElementById('su').click();"""page.evaluate(js)page.pause()# 关闭浏览器context.close()browser.close()run_js_script()

页面如下:

page.evaluate_handle()

page.evaluate_handle()的返回值是JSHandle。

from playwright.sync_api import sync_playwrightdef run_js_script():with sync_playwright() as playwright:browser = playwright.chromium.launch(headless=False)context = browser.new_context()page = context.new_page()page.goto("https://www.baidu.com/")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()page.pause()# 关闭浏览器context.close()browser.close()run_js_script()

总结

本文主要介绍了playwright执行js脚本的操作,与selenium一样,playwright同样可以执行js脚本来完成一些不便操作的元素。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/31440.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

互联网发展对计算机及其应用的影响

先来说一个问题,就是zookeeper leader选举问题直接说结论,通过逻辑时钟(zxid)来保证事件发生的因果关系,因果最新的节点优先被选为主,其他小弟跟着同步,如果大家因果相同那就用server id决断作为兜底方案。解释下什么逻辑上时钟?通过数值来记录事件的因果关系,比如a去…

第十一周实验

Pixso特点实时协作——让所有人聚焦同一个目标 当面对一个复杂的设计项目时,通过链接邀请团队成员,进行多人云端协作设计,实时同步字号、边框、颜色等各种细节。 智能UI设计工具——快速上手专业技能 传统产品,往往要多个工具协作才能预期效果。而Pixso自带组件变体、自动布…

m5stack

m5stack cardcomputer+m5stack c3 首先,感谢得捷社区,本次参与奖我选取的是m5stack cardcomputer+m5stack c3,m5stack被乐鑫已经收购了,他们的产品我觉得精致小巧,正好m5stack cardcomputer他拥有usb有线连接和蓝牙连接的键盘功能,对于开发板的一些输入指令什么可以就使用…

性能测试工具--如何有效度量前端性能

转自:https://testerhome.com/topics/35529 目标:从用户角度明确前端 Web、H5 性能测试需要重点关注的内容; 根据关注内容明确性能测试过程中的性能评判指标和建议的阈值范围; 整理性能测试过程中各性能评价指标的收集方法; 明确性能测试完毕后的测试结果展现形式; 本文来…

基于MATLAB手搓人工神经网络

神经网络 基本概念 ​ 神经网络,模拟生物神经网络,节点称为神经元。神经网络分层命名,直接接收输入数据的是输入层,输出结果的是输出层,输入层与输出层之间的是隐藏层。 ​ 前向传播:数据从输入层开始,逐层向前传播计算,直到输出层得到输出结果。 ​ 反向传播:将输出层…

drawcall优化 - 无限滚动容器

这是一个前端项目常见的一个问题dc优化。比如一个复杂的背包容器500个元素,如果使用粗暴的实例化500个元素进去,最终的dc无疑会是灾难的。在内存管理和性能角度上讲也是铺张浪费的。 看见效果如下 dc 1091 但实际上500个元素itemCell,在一个屏幕视界内能看到和交互的也就6~…

java所有集合的相互关系是什么

Java集合框架是一个设计精良、功能强大的工具集,用于存储和操作对象集合。它大致分为以下几类,并且各类之间存在一定的层级关系和功能差异:### 顶级接口(根接口)1. **Collection**: 是最基础的集合接口,所有集合类都直接或间接实现了这个接口。它定义了基本的集合操作,如…

mysql 锁

1,介绍锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除传统的计算资源(CPU、RAM、I/O)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个…