Python Playwright 基本使用(步骤详细)

简介: Python Playwright 基本使用(步骤详细)

一、简介

二、为什么选择 Playwright

  • Playwright的优势1、Selenium需要通过WebDriver操作浏览器;Playwright通过开发者工具与浏览器交互,安装简洁,不需要安装各种Driver。2、Playwright几乎支持所有语言,且不依赖于各种Driver,通过调用内置浏览器所以启动速度更快。3、Selenium基于HTTP协议(单向通讯),Playwright基于Websocket(双向通讯)可自动获取浏览器实际情况。4、Playwright为自动等待,而在Selenium中经常需要写sleep去作为一个等待,保证程序正常运行。
  • 等待元素出现(定位元素时,自动等待30s,等待时间可以自定义,单位毫秒)
  • 等待事件发生
  • 已知局限性
    1、Playwright 不支持旧版 Microsoft EdgeIE11。支持新的 Microsoft Edge(在 Chromium 上),所以对浏览器版本有硬性要求的项目不适用。
    2、需要 SSL 证书进行访问的网站可能无法录制,该过程需要单独定位编写。

三、安装

  • 1)安装 (Playwright 支持 Async\Await 语法,故需要 Python3.7+
$ pip install playwright
  • 2)安装 ChromiumFirefoxWebKit等浏览器的驱动文件(内置浏览器)和 ffmpeg 用于视频录制
    注意,下面这种安装方式安装,会安装所有驱动文件,如果需要打包成 exe/app 文件还会报错 Please run the following command to download new browsers,所以可以按需安装就行。
# 全装
$ python -m playwright install
# 按需安装,重新安装一下(chromium 是其中一个浏览器插件,看自己用什么就装什么) # Expecting one of: chromium, chrome, chrome-beta, msedge, msedge-beta, msedge-dev, firefox, webkit 
# PLAYWRIGHT_BROWSERS_PATH=0 是为了支持 pyinstaller 打包报错 Please run the following command to download new browsers 问题
$ PLAYWRIGHT_BROWSERS_PATH=0 playwright install chromium

四、案例

  • 案例一(同步案例)
# 导入
from playwright.sync_api import Playwright, sync_playwright
# 导入 定时器
# from time import sleep
# 创建浏览器
def run (playwright: Playwright) -> None:
  # 创建浏览器
  browser = playwright.chromium.launch(headless=False)
  # 使用 selenium 如果要打开多个网页,需要创建多个浏览器,但是 playwright 中只需要创建多个上下文即可
  # 例如:content1 = browser.new_context()、content2 = browser.new_context() 分别去访问网页做处理
  content = browser.new_context()
  # 每个 content 就是一个会话窗口,可以创建自己的页面,也就是浏览器上的 tab 栏,在每个会话窗口中,可以创建多个页面,也就是多个 tab 栏
  # 例如:page1 = content.new_page()、page2 = content.new_page() 封面去访问页面
  page = content.new_page()
  # 页面打开指定网址
  page.goto('https://www.baidu.com')
  # 找到百度输入框( locator 会自动识别传入的选择器是 css xpath .... 不需要像 selenium 指定 By.XPATH/ID 这样的 )
  # page.locator('//input[@id="kw"]').fill('周杰伦') # 也可以写成下面这样:
  page.fill('//input[@id="kw"]', '周杰伦')
  # 点击百度一下进行搜索
  # page.locator('//input[@id="su"]').click() # 也可以写成下面这样:
  page.click('//input[@id="su"]')
  # 延迟关闭(为啥需要延迟一下,这里是用于测试,因为代码执行完马上就回关闭,运行太快了,还以为崩溃了
  # 暂时没找到配置不需要进行自动关闭,但是肯定跟 selenium 一样有这个配置)
  # sleep(10) # 之前使用使用 sleep 的方式进行等待,传入的是单位是秒
  # 但是在 playwright 中有自带的延迟等待,单位是毫秒
  page.wait_for_timeout(10000)
  # 使用完成关闭上下文(也就是会话窗口)
  content.close()
  # 关闭浏览器
  browser.close()
# 调用
with sync_playwright() as playwright:
  run(playwright)
  • 案例二 (有 hover)
# 导入
from playwright.sync_api import Playwright, sync_playwright
# 创建浏览器
def run (playwright: Playwright) -> None:
  # 创建浏览器
  browser = playwright.chromium.launch(headless=False)
  # 新建窗口
  content = browser.new_context()
  # 新建页面
  page = content.new_page()
  # 访问首页
  page.goto('https://hepai.video/')
  # 点击登录
  page.click('//a[@href="/login"]')
  # 延迟
  page.wait_for_timeout(1000)
  # 密码登录
  page.click('//a[contains(text(), "密码登录")]')
  # 写入账号
  page.fill('//input[@id="username"]', 'xxxx')
  # 写入密码
  page.fill('//input[@id="password"]', 'dzm123456')
  # 点击登录
  page.click('//button[@type="submit"]')
  # 延迟
  page.wait_for_timeout(1000)
  # hover 出菜单(失败)
  # page.hover('//div[@class="nav-adv nav-adv-home u-info"]/p')
  # page.wait_for_selector('//div[@class="nav-adv nav-adv-home u-info"]/ul', state='visible', timeout=30000)
  # page.locator('//div[@class="nav-adv nav-adv-home u-info"]/ul')
  # 延迟
  # page.wait_for_timeout(1000)
  # 点击财务管理
  # page.click('//a[@href="/pipeline-record"]')
  # 上面 hover 失败,那就直接手动加载网页
  page.goto('https://hepai.video/pipeline-record')
  # 延迟
  page.wait_for_timeout(1000)
  # hover 出菜单
  page.hover('//div[@class="u-info"]/img')
  # 退出登录
  page.click('//a[contains(text(), "退出登录")]')
  # 点击确定按钮
  page.click('//button/span[contains(text(), "确")]/..')
  # 延迟
  page.wait_for_timeout(10000)
  # 关闭上下文
  content.close()
  # 关闭浏览器
  browser.close()
# 调用
with sync_playwright() as playwright:
  run(playwright)
相关文章
|
24天前
|
测试技术 Python
手动解决Python模块和包依赖冲突的具体步骤是什么?
需要注意的是,手动解决依赖冲突可能需要一定的时间和经验,并且需要谨慎操作,避免引入新的问题。在实际操作中,还可以结合使用其他方法,如虚拟环境等,来更好地管理和解决依赖冲突😉。
|
1月前
|
数据采集 数据可视化 数据处理
如何使用Python实现一个交易策略。主要步骤包括:导入所需库(如`pandas`、`numpy`、`matplotlib`)
本文介绍了如何使用Python实现一个交易策略。主要步骤包括:导入所需库(如`pandas`、`numpy`、`matplotlib`),加载历史数据,计算均线和其他技术指标,实现交易逻辑,记录和可视化交易结果。示例代码展示了如何根据均线交叉和价格条件进行开仓、止损和止盈操作。实际应用时需注意数据质量、交易成本和风险管理。
68 5
|
2月前
|
数据处理 Apache 数据库
将 Python UDF 部署到 Apache IoTDB 的详细步骤与注意事项
【10月更文挑战第21天】将 Python UDF 部署到 Apache IoTDB 中需要一系列的步骤和注意事项。通过仔细的准备、正确的部署和测试,你可以成功地将自定义的 Python UDF 应用到 Apache IoTDB 中,为数据处理和分析提供更灵活和强大的支持。在实际操作过程中,要根据具体情况进行调整和优化,以确保实现最佳的效果。还可以结合具体的代码示例和实际部署经验,进一步深入了解和掌握这一过程。
32 2
|
3月前
|
机器学习/深度学习 数据挖掘 测试技术
自学Python的系统策略与步骤
通过遵循这些步骤和策略,你可以系统地自学Python,并有效地构建和深化你的编程知识和技能。
36 6
|
3月前
|
NoSQL Linux Redis
linux安装单机版redis详细步骤,及python连接redis案例
这篇文章提供了在Linux系统中安装单机版Redis的详细步骤,并展示了如何配置Redis为systemctl启动,以及使用Python连接Redis进行数据操作的案例。
90 2
|
3月前
|
自然语言处理 算法 数据可视化
9-4|Python在一群人聊天记录中提取关键字 需要什么步骤
9-4|Python在一群人聊天记录中提取关键字 需要什么步骤
|
4月前
|
数据挖掘 Python
【Python数据分析】假设检验的基本思想、原理和步骤
文章详细介绍了假设检验的基本思想、原理、可能犯的错误类型、基本步骤以及在不同总体情况下的检验方法,阐述了如何在Python中应用假设检验,并通过P值来判断假设的可靠性。
72 1
|
4月前
|
IDE Linux 开发工具
Python环境安装步骤?
【8月更文挑战第22天】Python环境安装步骤?
34 0
|
5月前
|
自然语言处理 安全 Shell
【Python】已解决:Python pip正确安装pyhanlp库步骤
【Python】已解决:Python pip正确安装pyhanlp库步骤
215 2
|
6月前
|
网络安全 网络虚拟化 数据安全/隐私保护
使用Python实现VPN搭建的流程步骤
保护个人隐私和数据安全变得尤为重要。VPN(虚拟私人网络)是一种有效的解决方案,可以帮助我们在网络上匿名浏览,保护数据传输的安全性。虽然市面上有许多商业VPN服务,但你也可以通过Python自己搭建一个简单的VPN。本文将介绍如何用Python建立自己的VPN。