新一代爬虫利器Playwright——自动写代码
off999 2024-12-12 14:24 19 浏览 0 评论
作者:某某白米饭
来源:Python 技术
Playwright 是微软出的一款自动化测试工具,在做爬虫的时候,只需要点点点操作就能将代码录下来,用 python 脚本运行。有非常强大的 API,完全满足爬虫的需要。
安装
需要安装 playwright 第三方模块和Chromium、Firefox、WebKit等浏览器的驱动文件。
pip install playwright
python -m playwright install
录制
playwright 在抓取页面的时候是不需要太多写代码的,录制就完事了。首先看看有哪些命令参数:
python -m playwright codegen --help
这里有好几个选项:
- -o:输出的代码文件的名称
- --target:语言:默认为 python,python-async 自动生成的是异步模块的代码
- -b:用的浏览器
- --time:页面超时时间
将脚本文件存放在 D 盘的 playwright_demo.py 中。
# 命令行键入
python -m playwright codegen -o D:\playwright_demo.py
打开 D:\playwright_demo.py 在代码中可以看到:
browser = playwright.chromium.launch(headless=False)
headless 是 False 的时候会出现浏览器,如果是 True 就以没有浏览器的方式启动。
Page
Page 就是单独的一个浏览器 tab 标签(第一种)创建,也可以是 a 标签中 target="_blank" 打开的 tab 标签(第二种)创建。
# 1
page = context.new_page()
page.goto("https://www.jd.com/")
# 2
with page.expect_popup() as popup_info:
page.click("[aria-label=\"OPPO A96 8+256GB 琉璃幻彩 小星环 呼吸灯 高通八核5G芯片 33W快充 OLED超清护眼屏 拍照5G手机oppoa96\"] >> text=¥")
page3 = popup_info.value
page3.wait_for_load_state()
print(page3.title())
方法
page 有多个常用的方法:on、goto、fill、inner_html、content、query_selector、query_selector_all 等等。
一、goto():用于跳转网址。
二、on():事件的监听,可以用来监听浏览器中发生的任何事件,如:close、console、download、request、response 等等。
用来监听 request 请求,打印出 post 的提交数据和请求地址:
def on_request(request):
print('--------start---------')
print(request.url)
print(request.post_data)
print('--------start---------')
def run(playwright: Playwright) -> None:
browser = playwright.chromium.launch(headless=False)
context = browser.new_context()
# Open new page
page = context.new_page()
page.on('request', on_request)
page.goto("https://www.baidu.com/")
context.close()
browser.close()
用来监听 response 响应,并打印出百度中的 png 结尾的图片:
from playwright.sync_api import Playwright, sync_playwright
import time
def on_response(response):
if '.png' in response.url:
with open('D:\image\\'+str(int(time.time()))+ '.png', 'wb') as f:
f.write(response.body())
def run(playwright: Playwright) -> None:
browser = playwright.chromium.launch(headless=False)
context = browser.new_context()
# Open new page
page = context.new_page()
page.on('response', on_response)
page.goto("https://www.baidu.com/")
context.close()
browser.close()
三、fill() 用于填写 input 框,在百度搜索框中写入 111:
page.fill("input[name=\"wd\"]", "111")
四、inner_html()、content() 获取页面源代码:
page.inner_html('//html')
page.content()
五、query_selector 选择一个节点,当匹配到多个节点,只会返回第一个,获取 class='toindex' 的文本:
handle = page.query_selector('.toindex')
print(handle.text_content())
六、query_selector_all 选择所有的节点,获取百度页面上所有 input 的 name:
handles = page.query_selector_all('input')
for item in handles:
print(item.get_attribute('name'))
选择器
Text 选择器
以 jd 网站为例:下面两行可以选择登录或者注册。
page.click("text=你好,请登录")
page.click("text=免费注册")
text=后面也可以写正则表达式,比如:text=/Log\s*in/i 就可以匹配 Login 或者 log IN
如果不确定是否存在某个 text 也可以使用 :has-text('Log')
CSS 选择器
CSS 选择器就是使用的默认 CSS 引擎。Playwright 也自定义了一些伪类::visible、:text、:has 等等。
用 id 的方式登录到京东网站:
page.click('#loginsubmit')
根据节点的属性选择:
page.click('[aria-label="搜索"]')
根据 CSS 和文本选择:
page.click('a:has-text("电脑")')
page.click("[aria-label=\"OPPO A96 8+256GB 琉璃幻彩 小星环 呼吸灯 高通八核5G芯片 33W快充 OLED超清护眼屏 拍照5G手机oppoa96\"] >> text=¥")
根据 CSS 和子节点选择,li、img 是标签, seckill_mod_goods_link_img 是 img 的 class 值:
page.click('li:has(img.seckill_mod_goods_link_img)')
XPath
Playwright 支持 XPath 选择元素,自动化录制 python 脚本一般是使用的 text 而不是 Xpath。
page.click("//span[contains(@class, 'spinner__loading')]|//div[@id='confirmation']")
N-th
N-th 选择第几个:
点击第一个按钮
page.click("button >> nth=0")
点击最后一个按钮
page.click("button >> nth=-1")
总结
本文介绍了 Playwright 的用法和部分 api,抓取一个网站主要的操作就是获取 url 地址、参考 post 数据、request、response、元素,本篇文章都有涉及。还有大量的 api 可以参考官方网站。
相关推荐
- win11家庭版和专业版哪个好(win11家庭版和专业版哪个好用)
-
win11用专业版本最好,玩游戏最稳定。相对于前代的操作系统来讲,windowS11系统无论哪个版本都非常稳定,但是在门斗41所有版本当中,最稳定的是专业版,但是这个版本占用的空间很大,对硬件的要求...
- win7连不上win10打印机拒绝访问
-
原因及解决方法:1.在Win10Cortana搜索框中,搜索控制面板将打开;2.转到控制面板,选择查看方法作为一个小图标,然后单击程序和功能;3.单击以启用或禁用Windows功能选项;4....
- 电脑主机不启动但通电(电脑主机开机不通电没反应)
-
第1步:首先检查电脑的外部接线是否接好,把各个连线重新插一遍,看故障是否排除。第2步:如果故障依旧,接着打开主机箱查看机箱内有无多余金属物,或主板变形造成的短路,闻一下机箱内有无烧焦的糊味,主板上有无...
- 苹果一体机怎么重装系统(苹果一体机重装系统win10)
-
苹果更换硬盘后,如果您没有创建一个启动磁盘或者使用TimeMachine备份系统,您可以按照以下步骤重新安装操作系统:1.准备一个可用于安装系统的启动磁盘。您可以使用官方提供的macOS安装介质(...
-
- 装系统的u盘怎么制作(装系统怎么制作u盘启动盘)
-
1、下载安装u当家u盘启动盘制作工具,完成之后打开该软件2、将之前准备好的U盘插入电脑,U当家会自动识别并选为默认,如果有多个U盘可以在“选择U盘”的下拉框中选择要制作成U盘启动盘的U盘。3、点击下面的“一键制作”按钮。(如果是电脑主板是U...
-
2025-11-15 07:03 off999
- 台电u盘怎么样
-
感觉台电U盘还是可以的,我知道台电是国内最成功的数码产品制造商之一,是一个致力于IT及消费数码类产品研发、生产、销售及服务的一体化品牌,U盘很好用,用的人很多。威刚是480Mbit/S只是USB2...
- u盘重装系统蓝屏进不去(u盘装系统重启蓝屏)
-
尊敬的用户您好:可按下面的步骤进行系统盘装系统:1.买一张win7光盘,将系统光盘放入光驱里。2.打开电源,然后观察屏幕的提示,在启动系统之前有按“f2进行bios设置。3.设置启动方式。找到boot...
- win快捷键大全(win快捷键大全表)
-
win快捷键:单独按Windows:显示或隐藏“开始”功能表Windows+BREAK:显示“系统属性”对话框Windows+D:显示桌面或恢复桌面Windows+M:最小化所有窗口Windows...
- u盘突然要格式化怎么回事(用着的u盘突然要格式化)
-
U盘提示格式化的原因可能有以下几点:文件系统损坏:U盘的文件系统可能出现损坏,导致无法正常读取和写入数据。病毒感染:U盘可能被病毒感染,病毒会破坏文件系统或隐藏文件。不兼容的文件系统:U盘可能使用了一...
- 路由器pppoe怎么设置(路由器如何设置pppoe上网)
-
移动宽带PPPOE是不用设置的,你只要把帐号和密码填上其他都不选就能上网。但是要注意连接到你电脑的网线是直接经过一个路由器后连接到猫上的,因为我见过有人是这样连接的猫---路由器---路由器---电脑...
- win7桌面图标设置在哪里(win7桌面图标在哪个文件夹)
-
要调出Win7桌面图标,首先需要进入桌面。可以通过点击任务栏上方的“显示桌面”按钮或按下Windows键+D快捷键进入桌面。在桌面上右键单击空白区域,选择“个性化”,然后选择“更改桌面图标”选项。在弹...
- win7手机壁纸(windows7手机桌面主题)
-
1.首先我们打开手机进入到桌面,找到设置图标点击打开。华为手机如何设置自定义锁屏壁纸2.进入到设置界面之后,点击下方的显示选项。华为手机如何设置自定义锁屏壁纸3.然后我们就可以在显示界面中找到壁纸...
- 怎么开启路由器wifi(怎么开启路由器的dhcp功能)
-
把路由器改为开放网络方法如下:1、打开浏览器,在地址栏输入路由器网关IP地址(路由器背后的标签上有,一般是192.168.1.1),输入登录用户名和密码(一般均为admin);2、登录成功后就显示运行...
- win10加载不出来桌面黑屏(window10加载不出来)
-
方法一、如果是遇到了突发性黑屏首先尝试使用Ctrl+Alt+Delete组合键来进行电脑重启一般重启可以解决大部分黑屏故障。win10电脑黑屏按什么键恢复_win10电脑黑屏一键恢复的方法方法...
- 怎么用火绒关闭win安全中心(win10火绒安全软件怎么关闭)
-
一、火绒防火墙关闭方法在电脑上运行火绒软件后,点击首页界面的“防护中心”,在病毒防护界面可以关闭文件、U盘、邮件等保护功能,。系统防护:在该界面可以关闭系统防护功能,。网络防护:可以关闭网络保护等功...
欢迎 你 发表评论:
- 一周热门
-
-
抖音上好看的小姐姐,Python给你都下载了
-
全网最简单易懂!495页Python漫画教程,高清PDF版免费下载
-
Python 3.14 的 UUIDv6/v7/v8 上新,别再用 uuid4 () 啦!
-
python入门到脱坑 输入与输出—str()函数
-
飞牛NAS部署TVGate Docker项目,实现内网一键转发、代理、jx
-
宝塔面板如何添加免费waf防火墙?(宝塔面板开启https)
-
Python三目运算基础与进阶_python三目运算符判断三个变量
-
(新版)Python 分布式爬虫与 JS 逆向进阶实战吾爱分享
-
慕ke 前端工程师2024「完整」
-
失业程序员复习python笔记——条件与循环
-
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)
