爬虫playwright入门讲解

爬虫自动化工具,因为js逆向十分灵活,下面以在浏览器上的一个test函数为例

window.test = function(){

console.log("666"); //先创建一个函数

}

test(); //直接调用

window"test"(); //利用window来进行调用

var a = "test";

windowa(); //通过定义a来进行调用

console.log((true+"").slice(0,1)); //t

console.log((true+"").slice(3,4)); //e

console.log((false+"").slice(3,4)); //s

window(true+"").slice(0,1)+(true+"").slice(3,4)+(false+"").slice(3,4)+(true+"").slice(0,1)();

//通过切片来凑出test,下面还可以进一步变得更复杂

//还可以吧true换为!!\[\],把false换为!\[\]

介绍

Playwright 是一个开源的自动化库,由 Microsoft 开发,用于基于 Chromium, Firefox, 和 WebKit 的浏览器自动化。它支持多种语言,包括 Python,并能在 Windows, Linux, 和 macOS 上运行。

官方文档:https://playwright.dev/python/docs/api/class-elementhandle

安装

安装 Playwright

pip install playwright

安装浏览器驱动

python -m playwright install

注意事项:Python版本 ≥ 3.8。 都在终端操作

安装完成可以根据此目录去找

注意APPDATE是隐藏文件

基本操作

复制代码
# 导包
from playwright.sync_api import sync_playwright
# playwright 控制浏览器操作的【需不需要代码写请求数据?】 请求由浏览器发

# 创建 playwright 对象  =》 通过 python 操作浏览器 【playwright 对象】
pw = sync_playwright().start()
# 启动浏览器 =》通过 playwright 对象启动 chromium 浏览器(headless=False 无头模式)
browser = pw.chromium.launch(headless=False)  # 有头,显示浏览器    playwright支持的浏览器:chromium、firefox、webkit
# browser = pw.chromium.launch(headless=True)  # 无头 =》不显示浏览器界面

# 创建上下文管理器?
context = browser.new_context()

# 打开一个页面
page = context.new_page()
# 访问网站
page.goto('https://www.baidu.com')

# 等待时长
page.wait_for_timeout(10000)

page对象

page 对象

page.goto(): 参数是网址【需要通过定位请求来确定网址吗? 不要】

  • timeout:超时时间,单位毫秒

  • wait_until:等待,直到什么时候

获取页面源码: page.content()

获取页面标题: page.title()

获取页面 url:page.url

如果访问一个网站获取到的是 json 数据,那么显示出来的是json数据【直接显示】。

通过浏览器获取到的数据是经过浏览器处理之后得到的数据【html】。

xpath:如果直接在浏览器获取xpath得不到数据的话,还是需要分析 print(page.content())。

定位:

playwright 的 xpath 定位到的元素对象必须要先判断是否存在。

元素对象.count() 统计当前元素个数

获取所有元素: 元素对象.all()

获取文本: 元素对象.inner_text()

获取所有文本: 元素对象.all_inner_texts()

获取元素属性: 元素对象.get_attribute()

由于 playwright 支持多种定位方式,如果没有特殊的 xpath 定位符号,则需要明确表示是 xpath 语法。

以后不是以 // 开头的 xpath 语法,就需要用 xpath= 开头

输入:元素对象.fill(文本内容)

点击:元素对象.click()

鼠标操作

移动鼠标

page.mouse.down():按下鼠标

page.mouse.move(x, y):移动鼠标

page.mouse.up():释放鼠标

获取元素坐标

元素对象.bounding_box()

案例:https://www.helloweba.net/demo/2017/unlock/

python测试脚本

复制代码
# 导包
from playwright.sync_api import sync_playwright

pw = sync_playwright().start()
browser = pw.chromium.launch(headless=False)  # 有头,显示浏览器    playwright支持的浏览器:chromium、firefox、webkit
context = browser.new_context()
page = context.new_page()
page.goto('https://www.helloweba.net/demo/2017/unlock/')

# 定位滑块位置
slide = page.locator('//html/body/div/div/div/div[1]/div[1]/div[3]')
slide_location = None
if slide.count() > 0:
    # print(slide)
    # print(slide.bounding_box())  # {'x': 68.5, 'y': 192.796875, 'width': 37, 'height': 38}
    slide_location = slide.bounding_box()

# 定位滑块外方框的位置
box = page.locator('//html/body/div/div/div/div[1]/div[1]/div[1]')
box_location = None
if box.count() > 0:
    print(box)
    print(box.bounding_box())  # {'x': 68.5, 'y': 192.796875, 'width': 37, 'height': 38}
    box_location = box.bounding_box()


# 移动鼠标到滑块所在的位置【点击到滑块中间】
page.mouse.move(slide_location["x"]+slide_location["width"]/2, slide_location["y"]+slide_location["height"]/2)
# 按下鼠标左键
page.mouse.down()
# 移动鼠标到方框最右边
page.mouse.move(slide_location["x"] + box_location['width'], slide_location["y"])
# 释放鼠标
page.mouse.up()


# 等待时长
page.wait_for_timeout(3000)
相关推荐
এ慕ོ冬℘゜1 小时前
如何在 HTML 中嵌入音频和视频?
前端·html·音视频
2501_944521597 小时前
Ramda 跨端三方库仓颉适配全流程
开发语言·javascript·flutter·php
Ken_11159 小时前
小体积附件下载正常,大附件下载异常
javascript
变与不变8069 小时前
jQuery怎么使用
前端·javascript
神膘护体小月半10 小时前
flex 布局的 order 属性
前端·css
paopaokaka_luck10 小时前
流浪动物救助与收养系统(DeepSeek AI对话、 ECharts多维分析、救助流程衔接、领养与回访衔接、 捐赠确认与公示、志愿者协作)
java·前端·javascript·人工智能·mysql·echarts·推荐算法
仰望.10 小时前
vue 表格组件 vxe-table 树表格懒加载支持拖拽排序的详细用法
前端·javascript·vue.js·vxe-table
前端 贾公子10 小时前
vite-plugin-uni-manifest 升级指南
前端
小码哥_常10 小时前
iPhone 用户传了张 HEIC,我的前端崩了
前端
小码哥_常10 小时前
你发的原图可能暴露你家地址——聊聊图片 EXIF 隐私
前端