爬虫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)
相关推荐
Pedantic1 小时前
SwiftUI 手势层级(Gesture Hierarchy)详解
前端
飘尘1 小时前
前端转型全栈(Java后端)的快速上手指引
前端·后端·全栈
一颗烂土豆1 小时前
Meshopt 压缩深度解析,为什么它比 Draco 更快
前端·javascript·webgl
浏览器工程师2 小时前
AI Agent 接浏览器任务,先别让它一路点到底
前端·后端
雨季mo浅忆2 小时前
VSCode自动格式化三要素
前端
爱勇宝3 小时前
深扒 Anthropic 1680 位工程师简历:应届生几乎没机会,AI 公司最缺的不是博士
前端·后端·程序员
kyriewen4 小时前
同事每天催我 Code Review,我写了个脚本让 AI 替我 review PR——现在他反过来催 AI 了
前端·javascript·ai编程
user20585561518136 小时前
Windows 项目安装时报 `node-sass` 错误,如何快速处理
前端
LiaCode6 小时前
Redis 在生产项目的使用
前端·后端