爬虫playwright入门讲解

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

window.test = function(){

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

}

test(); //直接调用

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

var a = "test";

window[a](); //通过定义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 小时前
JavaScript Promise,包括构造函数、对象方法和类方法
开发语言·javascript·ecmascript
桜吹雪1 小时前
LangChain.js/DeepAgents可观测性
javascript·人工智能
5***o5001 小时前
前端在移动端中的NativeBase
前端
灵魂学者1 小时前
Vue3.x —— 父子通信
前端·javascript·vue.js·github
1***Q7841 小时前
前端跨域解决方案
前端
小雨青年2 小时前
MateChat 进阶实战:打造零后端、隐私安全的“端侧记忆”智能体
前端·华为·ai·华为云·状态模式
勇气要爆发2 小时前
问:ES5和ES6的区别
前端·ecmascript·es6
永不停歇的蜗牛3 小时前
Maven的POM文件相关标签作用
服务器·前端·maven
芳草萋萋鹦鹉洲哦3 小时前
【vue/js】文字超长悬停显示的几种方式
前端·javascript·vue.js