playwright_执行javascript
在之前的章节中,我们已经掌握了 Playwright 的基本功能,包括创建浏览器和页面,定位元素并与之交互等。这些功能已经足够满足大部分的浏览器自动化需求。
然而,在实际应用中,我们可能需要更复杂的操作,这时候 Playwright 的 API 就不足以满足我们的需求了。这时候,我们就需要使用更底层的方式来进行操作,即直接运行 JavaScript。
playwright也支持执行JavaScript脚本,playwright本身就是一个Node.js库,本文介绍playwright-python执行js脚本的方法。
playwright-python使用 evaluate() 方法来执行JavaScript脚本,和selenium类似,也有两种方法实现元素操作。
page.evaluate():直接执行完整的JavaScript脚本。
locator.evaluate():定位到元素后再使用JavaScript执行操作。
实践代码:
'''
# author: 测试-老姜 交流微信/QQ:349940839
# 欢迎添加微信或QQ,加入学习群共同学习交流。
# QQ交流群号:877498247
# 西安的朋友欢迎当面交流。
'''
from playwright.sync_api import Playwright, sync_playwright, expect
import re
import pytest
def run(playwright: Playwright) -> None:
browser = playwright.chromium.launch(headless=False)
context = browser.new_context()
page = context.new_page()
page.goto("http://127.0.0.1/zentao/user-login.html")
page.evaluate('document.getElementById("account").value = "admin"') #执行js 输入用户名
page.locator("input[name=\"password\"]").fill("Deshifuzhi01")
page.get_by_role("button", name="登录").click()
page.wait_for_timeout(2000)
t = page.evaluate('document.title') # 执行js 获取网页标题
print(t)
page.wait_for_timeout(10000)
# ---------------------
context.close()
browser.close()
with sync_playwright() as playwright:
run(playwright)
playwright下还有个evaluate_handle()方法,也可以执行js。page.evaluate()和page.evaluate_handle()之间的唯一区别是page.evaluate_handle()返回JSHandle。page.evaluate() 返回调用执行js的结果。打印这两个方法的返回值看起来一样,但是如果需要使用js的返回值进一步处理的话,尽量使用page.evaluate()执行js,因为page.evaluate_handle()返回的是JSHandle对象,进一步处理比较麻烦。