网站首页 > 开源技术 正文
前言
我们在进行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脚本的结果,使用示例如下:
pythonfrom playwright.sync_api import sync_playwright
def 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()
也可以执行一个函数,如下:
pythonfrom playwright.sync_api import sync_playwright
def 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
示例
- 打印网页标题
执行document.title 获取页面的title,代码如下:
pythonfrom playwright.sync_api import sync_playwright
def 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()
- 操作元素示例
pythonfrom playwright.sync_api import sync_playwright
def 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。
pythonfrom playwright.sync_api import sync_playwright
def 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脚本来完成一些不便操作的元素。
猜你喜欢
- 2024-10-26 Bun - 一个快速的JS运行时(js runtime)
- 2024-10-26 爬虫基础之自动化工具 DrissionPage 的使用
- 2024-10-26 前端工程化应该怎么做?Letjs工程化体系介绍
- 2024-10-26 JavaScript 基础特性大类,前端大佬的年度回顾总结,建议收藏
- 2024-10-26 腾讯云云函数 SCF Node.js Runtime 最佳实践
- 2024-10-26 Node.js是什么?又能做什么?(node.js是干啥的)
- 2024-10-26 详解下一代开源混合应用框架Reapp
- 2024-10-26 加载后执行RunAfterImgLoaded.js(进行加载)
- 2024-10-26 使用Delphi开发echarts图表(delphi图表控件chart)
- 2024-07-20 JavaScript 是如何运行的?(javascript运行机制)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)