pip install playwright==版本号
playwright install # 安装支持的浏览器:cr:chromium, ff:firefox, wk 和 webkit
playwright install chromium # 安装指定的chromium浏览器
安装时会自动下载浏览器依赖,windows系统在%USERPROFILE%\AppData\Local\ms-playwright
路径下。
命令行窗口使用如下语法格式进行脚本录制:
python -m playwright codegen [options] [url]
options参数:
-o, --output
:保存生成脚本
--target
:生成的脚本语言,可以设置javascript, test, python, python-async和csharp,默认为python。
-b, --browser
:要使用的浏览器,可以选择cr, chromium, ff, firefox, wk和webkit,默认chromium。
--channel
:chromium版本,比如chrome, chrome-beta, msedge-dev等,
--color-scheme
:模拟器的颜色主题,可选择light 或者 dark样式。
--device
:模拟的设备,比如iPhone 11。
--save-storage
:保存上下文状态,用于保存cookies 和localStorage,可用它来实现重用。例如playwright codegen --save-storage=auth.json
--load-storage
:加载--save-storage
保存的数据,重用认证数据。
--proxy-server
:指定代理服务器
--timezone
: 指定时区
--geolocation
:指定地理位置坐标
--lang
:指定语言/地区,比如中国大陆:zh-CN
--timeout
:超时时间,定位毫秒,默认10000ms
--user-agent
:用户代理
--viewport-size
:浏览器窗口大小
-h, --help
:查看帮助信息
样例:
python -m playwright codegen -o D:\my.py -b chromium --viewport-size 1200,900 https://www.baidu.com/
data-test-id
甚至文本内容)来搜索元素。可以使用分隔符>>
组合使用相同或不同引擎的选择器。CSS (Cascading Style Sheets)是一种样式表语言,是所有浏览器内置的,用于描述以HTML或XML编写的文档的外观和样式。
css
是默认引擎 - 任何不以引号//
开头和结尾的格式的选择器假定为 css 选择器。例如 page.$(‘span > button’)
常见实例:
#
#autocomplete="off">
#1.标签选择器,元素不唯一
_elements = page.query_selector_all('input', '武汉')
#2.id选择器
page.fill('#kw', '武汉') 或 page.fill('id=kw', '武汉')
#3.class选择器
page.fill('.s_ipt', '武汉') 或 page.fill('class=kw', '武汉')
#4.属性选择器,格式:[属性="值">],可进行子字符串匹配,如:^= 匹配前缀、$= 匹配后缀、
#*= 包含某个字符串
page.fill('[id="kw"]', "武汉")
page.fill('[class="s_ipt"]', "武汉")
page.fill('[name="wd"]', "武汉")
#5组合[标签选择器+属性选择器],格式:标签[属性=值>]
page.fill('input[name=wd]', '武汉')
CSS_Selectors
XPath是XML路径语言,是一种查询语言,使用路径表达式浏览XML文档中的元素和属性。
以引号//
开头的格式选择器被假定为xpath选择器。例如 page.$(‘//html/body’)`
XPath标准语法:Xpath=//tagname[@attribute=‘value’]
// : 选择当前节点
Tagname: 节点标签名(如input、text、button、table、tbody、ul、li等Dom标签元素名)
@: 选择属性 Attribute: 节点属性名 Value: 属性值
常见函数:
contains()
: 是否包含对应的值starts-with()
: 是否以某种字符串开始ends-with()
: 是否以某种字符串结束last()
: 列表/集合类元素的最后一个值text()
: 一个节点的文本值 #百度一下
page.click('//a[text()="click here"]')
常见实例:
#
# autocomplete="off">
#
page.fill('//*[@id="kw"]','武汉')
page.fill('//input[@name="wd" and @type="text"]','武汉')
# ‘and’ 、 ‘or’ 、‘not’ 连接 和 !=
#page.fill('//input[@id="kw"]','武汉')
#page.fill('//input[@name="wd"]','武汉')
#page.fill('//input[@class="s_ipt"]','武汉')
page.click('//input[@id="su"]')
#中国夏粮实现增产丰收
_text_content = page.query_selector('text="中国夏粮实现增产丰收"').text_content()
#或_text_content = page.query_selector('"中国夏粮实现增产丰收').text_content()
assert _text_content == "中国夏粮实现增产丰收"
总结:
XPath通过遍历的方式从XML文档中选择节点,CSS Selector是一种匹配模式定位,CSS Selector比 XPath 执行效率高。
Playwright 在执行某些操作之前会对元素进行一系列可操作性检查,确保操作按预期运行,例如不会单击禁用的按钮。
Playwright 会等到所有相关的可操作性检查都通过后才执行操作。如果检查未在指定的范围内通过,操作将失败Timeout
,抛出TimeoutError
。
某些操作(如page.click()
支持{force: true}
选项)禁用非必要的可操作性检查,例如传递{force: true}
给click()
方法将不会检查目标元素是否实际接收到点击事件。
例如click
和fill
自动等待元素可见和可操作之类的操作,单击后将:
visibility:hidden
// Playwright waits for #search element to be in the DOM
page.fill('#search', 'query');
// Playwright waits for element to stable and accept clicks Events.
page.click('#search');
您可以显式地等待元素出现在 DOM 中或变得可见:
// Wait for #search to appear in the DOM.
page.wait_for_selector('#search', { state: 'attached' });
// Wait for #promo to become visible, for example with `visibility:visible`.
page.wait_for_selector('#promo');
常见方法操作执行的可操作性检查的完整列表:
visibility:hidden
计算样式时,元素被认为是可见的。像样式大小为零或元素display:none
为不可见。
、
具有disabled
属性 或
,
时,它被认为是启用的。readonly
设置属性时,它被认为是可编辑的。页面加载需要时间通过网络检索响应正文、解析、执行脚本和触发事件。典型的负载场景会经历以下负载状态:
networkidle
- 至少500ms没有新的网络请求,发送网络ajax等请求 page.goto('http://example.com');
// If the page does a client-side redirect to 'http://example.com/login'.
// Playwright will automatically wait for the login page to load.
// Playwright waits for the lazy loaded #username and #password inputs
# to appear before filling the values.
page.fill('#username', 'John Doe');
page.fill('#password', '********');
// Playwright waits for the login button to become enabled and clicks it.
page.click('text=Login');
// Clicking the button navigates to the logged-in page and
# Playwright automatically waits for that.
加载弹出窗口(显式加载处理)场景:
const [ popup ] = Promise.all([
page.wait_for_event('popup'),
page.click('a[target="_blank"]'), // <-- opens popup
]);
popup.wait_for_load_state('load');
常见显式等待加载api:
page.wait_for_event(event, **kwargs)
page.wait_for_function(expression, **kwargs)
page.wait_for_load_state(**kwargs)
page.wait_for_selector(selector, **kwargs) #等待元素出现
page.wait_for_timeout(timeout)
Page.click(selector, **kwargs) #no_wait_after:false
robot framework 管理和编写测试用例,robotframework-browser测试库。
安装:
wxPython:https://sourceforge.net/projects/wxpython/files/wxPython/2.8.12.1/
下载exe安装包
pip install robotframwork
pip install robotframework-ride #安装图形编辑器,基于wxPython
启动:python %Python%\Scripts\ride.py
robotframework-browser api说明文档
1.初始化Sync的playwright的实例 with 写法:
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
for browser_type in [p.chromium, p.firefox, p.webkit]:
browser = browser_type.launch()
...
初始化一个全局的playwright的实例,供后续使用:
p = sync_playwright().start()
RPA 之家:https://www.rpazj.com/
程序员福利网: https://www.coderfuli.com/#/home
开源中国社区:https://www.oschina.net/
开源 软件:https://gitee.com/explore/new-tech
w3schools英文官网: https://www.w3schools.com/
w3cschool官网(中文):https://www.w3cschool.cn/dict/