Python 系列--爬虫利器Playwright

和数据打交道,工作中难免会遇到一些需要爬取数据的场景,由于一些网站的反爬措施,模拟浏览器登录,从开发者选项的源代码中获取想要的数据就成了一种解决方案。此时,Playwrightselenium 这些原本的自动化测试工具就派上了大用场。亲自体验后,觉得前者用起来特别方便,各种网站基本都能应付。因此准备写一个playwright 爬虫专篇,今天为入门篇,话不多说。

一、Playwright 是什么?

它是微软在 2020 年初开源的新一代自动化测试工具,其功能和 selenium 类似,都可以驱动浏览器进行各种自动化操作。

二、特点是什么

  1. 支持当前所有的主流浏览器,包括 chrome、edge、firefox、safari;
  2. 支持浏览器有头和无头模式;
  3. 安装和配置过程简单,会自动安装对应的浏览器和驱动,不需要额外配置 WebDriver 等

三、如何安装

打开命令行,输入

pip install playwright
playwright install

四、基本概念

browser

浏览器:支持多种浏览器:Chromium(chrome、edge)、FirefoxWebKit(Safari),一般每一种浏览器只需要创建一个 browser 实例。示例:

browser = playwright.chromium.launch(headless=False) # headless=False 是有头模式,也就是代码运行时候,需要浏览器页面
browser = playwright.firefox.launch()

context

上下文:一个浏览器实例下可以有多个context,将浏览器分割成不同的上下文,以实现会话的分离,如需要不同用户登录同一个网页,不需要创建多个浏览器实例,只需要创建多个context即可

context = browser.new_context()

page

页面:一个context下可以有多个page,一个page就代表一个浏览器的标签页或弹出窗口,用于进行页面操作。这个也是我们主要操作的对象。

page = context.new_page()

五、快速入门

使用时,我已知的,目前不兼容 jupyter notebook,所以,我使用的是 vscode

下面是一段 html,用这段代码快速入门演示一下

<h1 data-v-4a3b3bb4="" class="form-title">欢迎登录</h1>
<div data-v-4a3b3bb4="" class="login-form-tab el-tabs el-tabs--top">
   <div class="el-tabs__header is-top">
      <div class="el-tabs__nav-wrap is-top">
         <div class="el-tabs__nav-scroll">
            <div role="tablist" class="el-tabs__nav is-top" style="transform: translateX(0px);">
               <div class="el-tabs__active-bar is-top" style="width: 56px; transform: translateX(0px);"></div>
               <div id="tab-by-password" aria-controls="pane-by-password" role="tab" aria-selected="true" tabindex="0" class="el-tabs__item is-top is-active">密码登录</div>
               <div id="tab-by-code" aria-controls="pane-by-code" role="tab" tabindex="-1" class="el-tabs__item is-top">验证码登录</div>   
            </div>
         </div>
      </div>
   </div>
<div class="el-tabs__content">
   <div data-v-4a3b3bb4="" role="tabpanel" id="pane-by-password" aria-labelledby="tab-by-password" class="el-tab-pane"></div>
   <div data-v-4a3b3bb4="" role="tabpanel" aria-hidden="true" id="pane-by-code" aria-labelledby="tab-by-code" class="el-tab-pane" style="display: none;"></div>

页面跳转

常用于模拟操作的第一步,去到目标网站

page.goto(url) # 你想去到的页面地址

页面点击

进入某个网站后,模拟用户的点击行为,点击某个元素

# 页面点击
page.click(selector) # selector 为页面元素选择器

相当于告诉程序,你点击的地方在哪里,playwright提供了多种选择的方法,有CSS选择法,文本选择,xpath。作为爬虫演示,主要使用文本选择和xpath

# 文本选择
page.click("text=保存")
# xpath
page.click("xpath=//div[@class='nav-items']/ul/li[4]/a")

比如要点击上面页面中的**【登录】**

# xpath 方式
page.click('xpath=//button[@class="el-button btn-submit el-button--primary el-button--small"]')

输入字符

page.fill(selector,value) # value 为填入的值,前者为输入框元素
page.fill("xpath=//input[@id='inp-query']",'你好')

比如要在上面输入手机号

<input type="text" autocomplete="email" autofocus="autofocus" placeholder="手机号/邮箱" class="el-input__inner">

page.fill("xpath=//input[@placeholder='手机号/邮箱']",'183xxxx2345')

获取当前页面的url

page.url

获取当前页面title

page.title

获取页面全文

# 获取页面全文
page.content()

获取某个数据

page.text_content(selector)
page.text_content("xpath=//div[@class='nav-logo']/a")

比如要获取上面截图中的【欢迎登录】四个字

# <h1 data-v-4a3b3bb4="" class="form-title">欢迎登录</h1>
page.text_content('xpath=//h1[@class="form-title"]')

获取属性值

page.get_attribute(selector,attr)
page.get_attribute("xpath=//div[@class='nav-logo']/a",'href')

比如要获取截图中左边的大图

# <img data-v-3aa1f3cd="" src="//static.revobit.cn/user-center%402.0.0%2Bbe1fa77/img/login-holder.d395120d.jpg" alt="网站展示图片" class="login-holder">
page.get_attribute("xpath=//img[@alt='网站展示图片']",'src')
# 输出大图的url

获取元素节点

# 获取单个
page.query_selector("//a")
# 获取多个节点
page.query_selector_all("//a")

六、代码录制功能

也叫做自动生成代码功能,使用场景是,你不会或者懒的写代码时,可以在命令行输入下面代码,会自动弹出一个浏览器和一个代码编辑器,我们输入需要模拟的网站地址,人为操作就好,每一步的代码会自动生成到代码编辑器上,可复制使用

playwright codegen -o script.py

 

此篇就简单介绍一下 Playwright 的入门级功能,如果觉得有用,麻烦点个赞或者喜欢,也是我继续更新的动力,后续会结合真实的爬虫场景来演示。

 

Python 系列--爬虫利器Playwright - 知乎

posted on 2025-04-21 16:44  ExplorerMan  阅读(1267)  评论(0)    收藏  举报

导航