爬虫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)
相关推荐
YHHLAI5 分钟前
[特殊字符] 面试中的 Promise —— 从入门到精通
前端·javascript·面试
weixin_BYSJ198737 分钟前
SpringBoot + MySQL 乒乓球运动员信息管理系统项目实战--附源码04954
java·javascript·spring boot·python·django·flask·php
沪飘大军1 小时前
ll-llm:一个零依赖、可插拔的 OpenAI 兼容 LLM 代理
javascript
kyriewen2 小时前
我扒了 GPT-5.6 的全部编程跑分——有一项 OpenAI 没敢放出来
前端·gpt·ai编程
前端H3 小时前
微前端 v3 架构升级:从加载隔离到状态协同
前端·架构·状态模式
山河木马3 小时前
GPU自动处理专题3-NDC怎么映射成屏幕像素坐标(视口变换)
javascript·webgl·图形学
UndefeatedJie3 小时前
全栈项目架构三支柱:模块化 × RESTful × 语义化HTML,附AI辅助开发心法
html
陆枫Larry4 小时前
小程序包体积优化:用 SVG 图片替换 iconfont,并保留 CSS 控色能力
前端
Appthing4 小时前
在 TanStack Start 中使用 VitePWA 的正确配置
javascript
凌奕4 小时前
Claude Code 上线了"一键发网页"功能:报告做完直接甩链接,部署这一步彻底消失
html·claude