在Selenium执行JavaScript脚本中介绍了Selenium执行JavaScript脚本的方法,playwright也支持执行JavaScript脚本,playwright本身就是一个Node.js库,本文介绍playwright-python执行js脚本的方法。
playwright-python使用 evaluate()
方法来执行JavaScript脚本,和selenium类似,也有两种方法实现元素操作。
- page.evaluate():直接执行完整的JavaScript脚本。
- locator.evaluate():定位到元素后再使用JavaScript执行操作。
page.evaluate()
在浏览器上下文中执行:
1
| page.evaluate(expression, **kwargs)
|
示例代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| from playwright.sync_api import sync_playwright
class TestJs(): def setup(self): playwright = sync_playwright().start() self.browser = playwright.chromium.launch(headless=False) self.context = self.browser.new_context() self.page = self.context.new_page()
def teardown(self): self.browser.close()
def test_case1(self): self.page.goto("https://www.baidu.com/") lan = self.page.evaluate("window.navigator.language;") assert lan == "zh-CN"
title = self.page.evaluate("document.title;") assert title == self.page.title()
self.page.evaluate('document.getElementById("kw").value = "test"') text = self.page.evaluate("document.getElementById('kw').value") assert text == "test"
self.page.evaluate('document.getElementById("su").click()') self.page.click("#page >> text=2")
|
locator.evaluate()
先定位到元素后再进行js操作:
1 2
| handle = page.query_selector("id=kw") handle.evaluate('node => node.value = "test"')
|
下面来看一个例子,实现上面代码中的操作:输入“test”,点击【百度一下】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| def test_case2(self): self.page.goto("https://www.baidu.com/")
input_handle = self.page.query_selector("id=kw") input_handle.evaluate('node => node.value = "test"')
text = input_handle.evaluate('node => node.value') print(text) assert text == "test"
submit_handle = self.page.query_selector("id=su") submit_handle.evaluate('node => node.click()') time.sleep(10)
|
--THE END--