Playwright快速入门

Playwright 支持多种语言开发,比如 JavaScript/TypeScript, Python, Java, C#

本教程 使用的是 Python语言

1.安装:

pip install playwright

playwright install chromium

# 1.安装 playwright 客户端库
#     执行 pip install playwright
#
# 2.安装 浏览器
#   playwright 默认使用自己编译好的浏览器,比如 chromium, firefox, webkit
#   playwright install           将安装三款浏览器
#   playwright install chromium  指定安装一款浏览器
# 
# playwright 也可以自动化 已经安装好的品牌浏览器,比如Chrome, Edge, Firefox等,后文会有讲解
# 品牌浏览器往往会自动更新,如果使用Selenium自动化,就需要不断下载新的驱动。
# playwright使用自编译浏览器不会自动更新,从而避免驱动和浏览器不匹配的问题。

2.简单示例

from playwright.sync_api import sync_playwright

input('1....')
# 启动 playwright driver 进程
p = sync_playwright().start()

input('2....')
# 启动浏览器,返回 Browser 类型对象
browser = p.chromium.launch(headless=False) # 无头模式=假



# 创建新页面,返回 Page 类型对象
page = browser.new_page()
page.goto("https://www.byhy.net/cdn2/files/selenium/stock1.html") #打开指定网页
print(page.title()) # 打印网页标题栏

# 输入通讯,点击查询。这是定位与操作,是自动化重点,后文详细讲解
# locator查询   #按ID查询    fill写入内容     click点击
page.locator('#kw').fill('通讯')  # 输入通讯   在page页面,通过 locator方法按ID查询,然后填写数据 
page.locator('#go').click()      # 点击查询


# 打印所有搜索内容
lcs = page.locator(".result-item").all()
for lc in lcs:
    print(lc.inner_text())

input('3....')
# 关闭浏览器
browser.close()
input('4....')
# 关闭 playwright driver 进程
p.stop()

3.使用其它浏览器

# 使用其它浏览器
# 可以换一种启动firefox浏览器
browser = p.firefox.launch(headless=False)
# 可以换一种启动webkit浏览器
browser = p.webkit.launch(headless=False)


# 使用 系统自带浏览器
# 加上 executable_path参数
browser = p.chromium.launch(headless=False,executable_path='c:\Program Files\Google\Chrome\Application\chrome.exe') # 程序路径

4.使用 with as 会话管理

代码简化,不需要调用 start() 和 stop()

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch(headless=False)
    page = browser.new_page()
    page.goto("https://www.byhy.net/cdn2/files/selenium/stock1.html")
    print(page.title())
    page.locator('#kw').fill('通讯\n')
    page.locator('#go').click()
    # 打印所有搜索内容
    lcs = page.locator(".result-item").all()
    for lc in lcs:
        print(lc.inner_text())
    browser.close()

5. wait_for_timeout 界面等待

不能在Playwright中使用 time.sleep 进行等待,可能产生异外结果.

因为Playwright底层使用的是异步的python库进行各种事件处理,time.sleep 会破坏异步框架的处理逻辑。

可以使用 Page 对象的 wait_for_timeout 方法达到等待效果,单位是 毫秒

page.wait_for_timeout(1000)

6.自动化代码助手

命令行运行:

playwright codegen

注意这个只能作为助手,它主要是记录人对页面的输入。

并不能取代人自己写代码,特别是那些 获取页面上信息 的代码

比如,这个打印标题栏,就没法自动化生成

print(page.title())

7.tracing 跟踪功能

启用跟踪功能后, 可以在执行自动化后,通过记录的跟踪数据文件, 回看自动化过程中的每个细节

下面的的代码进行了自动化搜索股票,并打开跟踪功能,保存 跟踪数据文件 为 trace.zip

from playwright.sync_api import sync_playwright

p = sync_playwright().start()
browser = p.chromium.launch(headless=False)

# 创建 BrowserContext对象
context = browser.new_context()
# 启动跟踪功能
context.tracing.start(snapshots=True, sources=True, screenshots=True)

page = context.new_page()
page.goto("https://www.baidu.com/")

# 搜找到对应元素后输入内容,
page.locator('#kw').fill('百度一下')  #输入内容
page.locator('#kw').press('Enter')   #按回车

page.wait_for_timeout(1000) # 等待1秒

# 结束跟踪
context.tracing.stop(path="trace.zip")

browser.close()
p.stop()

执行完以后,我们发现,当前工作目录下面多了 trace.zip 这个跟踪数据文件。

怎么查看这个跟踪文件呢?有2种方法:

  • 直接访问 trace.playwright.dev 这个网站,上传 跟踪文件

  • 执行命令 playwright show-trace trace.zip

8.缺省等待时间

Playwright 中,当我们定位元素(比如 通过locator/get_by_text 等方法)后,

对元素进行操作(比如 click, fill),

如果当时根据定位条件,找不到这个元素, Playwright并不会立即抛出错误,

而是缺省等待元素时间为30秒,在30秒内如果元素出现了,就立即操作成功返回。

表示等待元素出现时长修改为10毫秒,再运行,就会有错误了
print(lc.inner_text(timeout=10 ))
# 想修改 缺省 等待时间, 可以使用 BrowserContext 对象


from playwright.sync_api import sync_playwright
p = sync_playwright().start()

browser = p.chromium.launch(headless=False, slow_mo=50)
context = browser.new_context()
context.set_default_timeout(10) #修改缺省等待时间为10毫秒
page = context.new_page() # 通过context 创建Page对象
page.goto("https://www.byhy.net/cdn2/files/selenium/stock1.html")
page.locator('#kw').fill('通讯\n')
page.locator('#go').click()

element = page.locator("[id='1']")
print(element.inner_text())

# 可以发现缺省等待时间修改为10毫秒,后续操作等待时间无需单独指定,都是10毫秒了。

slow_mo参数可以在启动浏览器时设置,其值以毫秒为单位,表示每次操作之间的延迟时间。例如,slow_mo=50表示每次操作之间会有0.05秒的延迟

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值