【爬虫】PlayWright使用说明

Scrapy第十五篇:后起之秀-Playwright Playwright 是微软在 2020 年初开源的新一代自动化测试工具,它的功能类似于 Selenium、Pyppeteer 等,它的功能非常强大,使用便捷简单,缺点是更新较快,市面上相关文档又少。 阅读详情
AI摘要

本文围绕Playwright爬虫展开,介绍了其安装方式,支持pip和conda。详细阐述使用时的各类事件,如page关闭、崩溃等事件,还说明了page.on()监听事件、wait_util参数。此外,讲解了在编写自动化测试脚本时,Playwright调试和定位元素的方法,包括多种定位器。

持续更新中

1. 安装

安装参考:安装
支持pip和conda安装,以conda为例:

conda config --add channels conda-forge
conda config --add channels microsoft
conda install pytest-playwright
playwright install

如遇到防火墙或者公司网络限制,可参考我另一篇文字conda的proxy设置方式:[]

如果是laywright install的时候需要proxy,则:

set HTTP_PROXY=你的proxy地址
set HTTPS_PROXY=你的proxy地址
playwright install

2. 使用

2.1 事件

事件列表:

  • close: page 关闭
  • console:当页面中的 JavaScript 调用控制台 API 方法之一(例如console.log或 console.dir)时产生的事件。
    • 传递进console.log的参数可在ConsoleMessage事件处理程序参数中使用。,ConsoleMessage对象由页面通过page.on("console")事件分派。
    • 对于页面中记录的每条ConsoleMessage,Playwright 上下文中都会有相应的事件。
  • crash:page崩溃。
    • 如果浏览器page尝试分配过多内存,则可能会崩溃。当page崩溃时,正在进行的操作和后续操作将抛出。
  • dialog: JavaScript 对话框出现事件,如alert, prompt, confirm 或 beforeunload。
  • domcontentloaded:JavaScript的DOMContentLoaded事件被分发时的事件。
    • 当 HTML 文档已完全解析且所有延迟脚本(deferred scripts)(<script defer src="…">和<script type="module">)已下载且执行完时,将触发DOMContentLoaded事件。它不会等待图像、子帧和异步脚本等其他内容完成加载。
    • DOMContentLoaded不等待样式表(stylesheets )加载,但延迟脚本(deferred scripts)会等待样式表(stylesheets ),并且DOMContentLoaded事件排在延迟脚本之后。此外,非延迟或异步的脚本(例如<script>)将等待已解析的样式表加载。
    • 应仅使用不同的事件load来检测页面是否已完全加载。使用load一个常见错误是用成了DOMContentLoaded,因为后者可能更合适。
    • 此事件不可取消。
  • download: 附件(attachment)开始下载的事件。
    • page.on("download")可分发Download对象,该对象可用于对下载文件的操作。
  • filechooser:当应该出现文件选择器( file chooser)时的事件,例如单击 <input type=file> 后。
  • frameattached:Frame对象被附加(attached)的事件。
    • Frame介绍: 通过使用Frame,你可以在同一个浏览器窗口中显示不止一个页面,简而言之,就是在一个窗口中显示多个页面。 每个页面称之为一个框架。并且每个框架独立于其他的框架。
    • Frame对象的生命周期受三个事件控制:page.on("frameattached") ,page.on("framenavigated") ,page.on("framedetached")
  • framedetached: Frame被分离( detached).
  • framenavigated:Frame被导航到新的 url。
  • load: JavaScript的load事件被分发时的事件.
    • load介绍:整个页面加载完成后会触发load事件,包括所有依赖资源(例如样式表、脚本、iframe 和图像,但延迟加载( loaded lazily)的资源除外)。这不同于DOMContentLoaded,后者在页面 DOM 加载完成后立即触发,而不等待资源完成加载。
  • pageerror:当页面内发生未捕获的异常时的事件。
  • popup:当页面打开新选项卡或窗口时的事件。
    • browser_context.on("page")也会触发此事件,但仅针对与此页面相关的弹出窗口(popups)。
    • 该页面最早可用的时刻是导航到初始 URL 时。例如,当使用 window.open('http://example.com') 打开弹出窗口时,当对http://example.com”的网络请求完成并且其响应已开始加载时,将触发此事件弹出窗口。
  • request:当页面发出请求时的事件。
    • request对象介绍:每当页面发送对网络资源的请求时,Page对象都会发出以下事件序列:page.on("request") 、 page.on("response") 、page.on("requestfinished") 。
  • requestfailed:当请求失败时的事件,例如超时。
  • requestfinished:当响应正文下载且请求完成时的事件。
  • response:当/如果收到请求的响应状态和标头时的事件。
  • websocket:WebSocket请求发出时的事件。
  • worker:当页面生成专用 WebWorker 时的事件。
    • Web Workers 可以在与 Web 应用程序的主执行线程分开的后台线程中运行脚本操作。这样做的优点是可以在单独的线程中执行繁重的处理,从而允许主(通常是 UI)线程运行而不会被阻塞/减慢。
  1. 处理crash,处理崩溃最常见的方式是捕获异常:
try:
    # crash might happen during a click.
    page.click("button")
    # or while waiting for an event.
    page.wait_for_event("popup")
except Error as e:
    pass
    # when the page crashes, exception message contains "crash".

2.2 page.on() 监听事件

2.3 wait_util参数

wait_until : Union["commit", "domcontentloaded", "load", "networkidle", None]
等待到某个事件触发,默认值 load. 可选参数:

  • 'domcontentloaded' - DOMContentLoaded 事件触发
  • 'load' - load 事件触发.
  • 'networkidle' - 不建议使用,当网络断连至少 500 ms时触发。不要使用此方法进行测试,而是依靠网络assert来评估准备情况。
  • 'commit' - 当收到网络响应并且文档开始时加载中时触发。

2.4 Role:

"alert" | "alertdialog" | "application" | "article" | "banner" | "blockquote" | "button" | "caption" | "cell" | "checkbox" | "code" | "columnheader" | "combobox" | "complementary" | "contentinfo" | "definition" | "deletion" | "dialog" | "directory" | "document" | "emphasis" | "feed" | "figure" | "form" | "generic" | "grid" | "gridcell" | "group" | "heading" | "img" | "insertion" | "link" | "list" | "listbox" | "listitem" | "log" | "main" | "marquee" | "math" | "meter" | "menu" | "menubar" | "menuitem" | "menuitemcheckbox" | "menuitemradio" | "navigation" | "none" | "note" | "option" | "paragraph" | "presentation" | "progressbar" | "radio" | "radiogroup" | "region" | "row" | "rowgroup" | "rowheader" | "scrollbar" | "search" | "searchbox" | "separator" | "slider" | "spinbutton" | "status" | "strong" | "subscript" | "superscript" | "switch" | "tab" | "table" | "tablist" | "tabpanel" | "term" | "textbox" | "time" | "timer" | "toolbar" | "tooltip" | "tree" | "treegrid" | "treeitem"

三、 调试和定位元素

在编写自动化测试脚本时,经常需要调试和定位页面上的元素。Playwright提供了多种方法来定位元素,如使用CSS选择器、XPath等。

3.1 调试

使用page.pause():在脚本中添加page.pause()方法,可以在执行到该位置时暂停脚本,并自动打开Playwright Inspector工具,方便进行页面调试。

Playwright Inspector是Playwright框架中自带的GUI工具,可以辅助开发者调试Playwright脚本。以下是Playwright Inspector的使用方法:
【PlayWright】Playwright Inspector使用

3.2 定位元素 Locator

Playwright提供了page.locator()方法来定位页面上的元素,它支持多种选择器,如CSS选择器、XPath等。

Locator是用来执行动作的对象。以前的Page.click已经被废弃,用Locator.click.

除了推荐的Locator(如 page.get_by_role() 和 page.get_by_text())之外,Playwright 还支持本各种其他定位器。

chrom中便捷获取xpath的方法

Locator获取元素属性:

<a data-v-323b850e="" class="titlecontent" href="https://xxxxxxx" target="_blank" title="硬件单板互连设计工程师" style="max-width: 598px;"><!---->
	<span data-v-323b850e="">硬件单板互连设计工程师</span>
</a>
h1 = i.locator('a.titlecontent')
url = h1.get_attribute('href') # https://xxxxxxx
title = h1.get_attribute('title') # 硬件单板互连设计工程师

3.2.1 CSS locator

3.2.2 N-th element locator

3.2.3 Parent element locator

3.2.4 Parent element locator

3.2.5 Vue locator

3.2.6 XPath locator

3.2.7 Label to form control retargeting

3.2.8 Legacy text locator

3.2.9 id, data-testid, data-test-id, data-test selectors

3.2.10 Chaining selectors

3.2.11 Intermediate matches

3.3 定位元素 ElementHandle

The difference between the Locator and ElementHandle is that the ElementHandle points to a particular element, while Locator captures the logic of how to retrieve an element.
ElementHandle 也可以用get_attribute获取元素属性。

Locator转ElementHandle

Locator有以下两个函数,可用来将返回Locator对应的ElementHandle

    def element_handle(
        self, *, timeout: typing.Optional[float] = None
    ) -> "ElementHandle":
        """Locator.element_handle

        Resolves given locator to the first matching DOM element. If there are no matching elements, waits for one. If
        multiple elements match the locator, throws.

        Parameters
        ----------
        timeout : Union[float, None]
            Maximum time in milliseconds. Defaults to `30000` (30 seconds). Pass `0` to disable timeout. The default value can
            be changed by using the `browser_context.set_default_timeout()` or `page.set_default_timeout()` methods.

        Returns
        -------
        ElementHandle
        """

        return mapping.from_impl(
            self._sync(self._impl_obj.element_handle(timeout=timeout))
        )

    def element_handles(self) -> typing.List["ElementHandle"]:
        """Locator.element_handles

        Resolves given locator to all matching DOM elements. If there are no matching elements, returns an empty list.

        Returns
        -------
        List[ElementHandle]
        """

        return mapping.from_impl_list(self._sync(self._impl_obj.element_handles()))

参考

官网教程
官方视频

playwright基础教程 Playwright是一个由Microsoft开发的自动化测试工具,可以用来测试Web应用程序。它支持多种编程语言和多个浏览器,包括Chrome,Firefox和WebKit。它通过提供一组API,使得开发人员可以在浏览器中模拟用户行为,例如单击,输入文本和导航到不同的页面,同时还能捕捉截图和视频。Playwright的主要特点包括:跨浏览器支持:Playwright支持多个浏览器,包括Chrome,Firefox和WebKit。这意味着开发人员可以在不同的浏览器中执行自动化测试,而无需更改测试代码。 阅读详情

相关推荐

playwright爬虫,TypeScriptr入门

通过这篇教程,相信你对TypeScript的基本语法有了一个初步了解,结合Playwright提供的钩子和断言,完全可以开始自动化测试脚本编写。进阶和高级的Playwright用法可以参考官网。

专注于技术分享的博主 1909

playwright最详细使用教程

Playwright详细教程

m0_51156601的博客 6万+

一文掌握 Playwright 的详细使用

Playwright 是一个功能强大的浏览器自动化工具,适用于网页自动化测试、数据抓取和网页交互。通过掌握其基础用法和高级功能,你可以轻松实现各种浏览器自动化任务。Playwright 支持多浏览器、多语言,并且具有高效的异步操作能力,是现代浏览器自动化的首选工具之一。

数据知道的博客 1万+

Playwright 自动化测试与爬虫快速入门指南

这个教程涵盖了 Playwright 的主要使用方法和反爬虫策略。建议在实际使用时,根据具体需求选择合适的功能组合,并且要注意遵守网站的使用条款和爬虫规则。使用 Playwright Inspector 进行元素定位。遵守网站的 robots.txt 规则。定期更新 User-Agent 和代理。开启详细日志:设置环境变量。注意内存管理,及时释放资源。做好异常处理和重试机制。数据及时保存,避免丢失。

徐白知识星球 2220

2026年经典爬虫案例专栏|第1篇:Python爬虫基础入门与环境搭建

网络爬虫(Web Crawler),也称为网页蜘蛛(Spider)、网络机器人(Bot),是一种自动化程序,用于按照一定的规则自动浏览万维网(WWW),并获取网页内容。爬虫技术在当今互联网时代扮演着至关重要的角色,它是搜索引擎、数据挖掘、内容聚合、舆情分析等众多应用的基础。在2026年,爬虫技术已经发展到一个新的高度。随着人工智能和大数据技术的快速发展,爬虫不再仅仅是简单的网页内容抓取工具,而是成为了数据采集、分析和应用的核心组件。

2201_76125261的博客 1148

Python爬虫实战:基于Scrapy+Playwright高效爬取智联招聘数据

本文将详细介绍如何使用Python最新技术栈(Scrapy+Playwright)构建高效、稳定的智联招聘数据爬取系统。文章从爬虫基本原理讲起,逐步深入到反爬机制应对、数据存储与分析等高级话题,提供完整可运行的代码示例,并分享实际开发中的经验技巧。关键词:Python爬虫、Scrapy、Playwright、智联招聘、数据采集、反反爬虫网络爬虫(Web Crawler)是一种自动获取网页内容的程序,是搜索引擎的重要组成部分。通用爬虫:如搜索引擎爬虫,目标是尽可能覆盖整个互联网聚焦爬虫。

2201_76125261的博客 723

爬虫系列,(4),playwright使用说明

pyppeteer 相比与selenium优秀,但是搜索后发现长时间未有维护,非官方的python版本也不是很稳定,个人就想找一个新的爬虫库。 因此找到了爬虫新库playwright,它具备强大的爬虫功能,目前看要比selenium稳定高效,接口也较为容易理解。 https://playwright.dev/python/docs/intro #安装 pip pip install --upgrade pip pip install playwright playwright install #conda

enodhs 2416

Python爬虫实战:利用Scrapy+Playwright高效爬取律师信息数据

本文详细介绍了如何使用Python最新爬虫技术Scrapy框架结合Playwright浏览器自动化工具,高效爬取律师信息数据。文章从爬虫基础知识讲起,逐步深入到高级技巧,包括反爬应对策略、数据清洗存储以及性能优化等方面。通过一个完整的律师信息爬取项目,展示了现代Python爬虫开发的最佳实践。关键词:Python爬虫、Scrapy、Playwright、律师信息、数据采集、反反爬虫Python作为数据科学和网络爬虫的首选语言,其生态系统在近年来有了显著发展。

2201_76125261的博客 1009

playwright比selenium更好用的爬虫工具

Playwright 是微软在 2020 年初开源的新一代自动化测试工具,可以驱动浏览器进行各种自动化操作

是分享,也是笔记,欢迎大家补充纠错,共同进步 1216

Python爬虫实战:使用Scrapy+Playwright高效爬取天涯论坛热帖

本文将详细介绍如何使用Python最新技术栈(Scrapy+Playwright)高效爬取天涯论坛的热门帖子,包含完整项目搭建、反反爬策略、数据存储及可视化分析。文章涵盖现代爬虫技术的核心要点,包括异步处理、动态页面渲染、智能代理轮换等高级技巧,并附有完整可运行的代码示例。动态内容加载:天涯论坛等现代网站大量使用JavaScript动态渲染内容反爬机制完善:验证码、行为分析、IP封锁等防御手段数据复杂度提升:页面结构嵌套深,数据提取难度大。

2201_76125261的博客 1576

Python爬虫实战:基于Scrapy与Playwright的搜狐新闻高效爬取

在当今信息爆炸的时代,网络爬虫技术已成为数据获取和分析的重要工具。作为国内领先的新闻门户网站,搜狐新闻包含了大量有价值的新闻数据,这些数据对于舆情分析、市场研究等领域具有重要意义。本文将详细介绍如何使用Python最新的爬虫技术栈(Scrapy框架结合Playwright浏览器自动化工具)来高效爬取搜狐新闻数据。pythontitle = scrapy.Field() # 新闻标题url = scrapy.Field() # 新闻链接。

2201_76125261的博客 1553

单元测试框架 Playwright 使用入门

Playwright 是一个端到端E2E)测试框架, 它可在所有现代浏览器中运行功能强大的测试和自动化。支持多种编程语言 API, 包括 JavaScript 、 TypeScript, Python, .NET 和 Java。正因为它基于浏览器,相当于模拟用户真实操作,因此不光能够用来跑测试用例,还可以用来写爬虫。

2201_76100073的博客 896

基于Python与Playwright的海关进出口数据高效爬取实战

本文将详细介绍如何使用Python结合最新浏览器自动化工具Playwright构建一个高效、稳定的海关进出口数据爬虫系统。我们将从爬虫基础知识讲起,逐步深入到反爬应对策略、数据解析与存储优化等高级话题,并提供完整的代码实现。本文适合有一定Python基础,希望学习现代网页爬取技术的开发者阅读。关键词:Python爬虫、Playwright、海关数据、反爬策略、数据解析、数据存储。

2201_76125261的博客 1197

Playwright库入门

Playwright是一个用于自动化浏览器操作的开源工具,由Microsoft开发和维护,支持多种浏览器和多种编程语言,可以用于测试、爬虫、自动化任务等场景。Playwright是基于WebSocket协议的,可以使双向通信的数据交换效率更高,可以更快地获取页面内容和执行操作。Playwright最大的特点就是,可见即可得,缺陷是,不灵活,没有requests的效率高。

weixin_49898946的博客 2004

Python爬虫实战:使用Playwright抓取YouTube视频标题与观看量的全流程解析(含反爬技巧与完整代码)

按频道抓取内容(如 /@channelname)可视化数据:如绘制视频标题词云、观看量分布图加入 Flask 或 Streamlit 前端界面展示本项目实现了通过 Playwright 模拟浏览器行为,绕过 YouTube 的前端动态加载机制,成功获取某关键词下的视频标题、观看数与链接数据,并实现结构化存储(CSV + SQLite),为后续的数据分析和可视化打下基础。

2201_76125261的博客 1440

Python爬虫实战:利用Playwright与Asyncio高效爬取拼多多秒杀商品数据

本文将详细介绍如何使用Python最新技术栈(Playwright+Asyncio)高效爬取拼多多秒杀商品数据。我们将从爬虫基础原理讲起,逐步深入到反爬虫策略应对、高性能爬虫架构设计,最终实现一个完整的拼多多秒杀商品爬虫系统。文章包含大量实战代码和性能优化技巧,适合中高级Python开发人员学习参考。关键词:Python爬虫、Playwright、Asyncio、拼多多、秒杀商品、反爬虫、高性能爬虫本文详细介绍了如何使用Playwright和Asyncio构建高效的拼多多秒杀商品爬虫。动态页面渲染处理。

2201_76125261的博客 972

Python网络爬虫在公共卫生事件舆情分析系统中的应用

摘要随着互联网和社交媒体的快速发展,网络舆情已成为反映公众对公共卫生事件态度和情绪的重要指标。本文基于Python最新技术栈,设计并实现了一个针对公共卫生事件的网络舆情爬虫系统。系统采用Scrapy框架结合Selenium、Playwright等现代化工具,能够高效抓取多源数据,包括新闻网站、社交媒体平台和论坛等。文章详细阐述了系统架构设计、关键技术实现、数据处理方法以及反爬虫策略,并提供了完整的代码实现。本系统可为公共卫生管理部门提供实时、全面的舆情监测和分析支持。关键词:Python网络爬虫;

2201_76125261的博客 357

使用 Python + Playwright 模拟登录知网并抓取论文摘要(含验证码/反爬全攻略)

本文通过使用实现了对中国知网论文摘要的自动化爬取。相比传统的 requests + BeautifulSoup 爬虫方式,本项目具有更强的反爬适应能力和自动化水平。📌 不仅能应对复杂登录、验证码、JavaScript渲染,还为后续进行数据分析、文本挖掘打下坚实基础。

2201_76125261的博客 1590
上一篇: 【PlayWright】Playwright Inspector使用
下一篇: 【算法】多榜单排序->综合排序问题
Code_LT
博客等级 码龄10年 307粉丝 182原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值