Playwright的基本使用

devtools/2024/9/25 5:32:43/

文章目录

    • 介绍
    • 安装
      • 环境安装
    • 屏幕录制
    • 保留记录cookie
    • 基本使用
    • 元素定位
      • CSS选择器定位
      • xpath定位
      • count
      • nth(index)
      • inner_text()
      • get_by_text(xxx)
      • get_attribute(attrName)

介绍

Playwright 是一个用于自动化浏览器操作的开源工具,由 Microsoft 开发和维护。它支持多种浏览器(包括 Chromium、Firefox 和 WebKit)和多种编程语言(如 Python、JavaScript 和 C#),可以用于测试、爬虫、自动化任务等场景。

安装

环境安装

python版本的Playwright官网文档:
https://playwright.dev/python/docs/intro

  • 系统要求:

    • Python 3.8 或更高版本。
    • Windows 10+、Windows Server 2016+ 或适用于 Linux 的 Windows 子系统 (WSL)。
    • MacOS 12 Monterey 或 MacOS 13 Ventura。
    • Debian 11、Debian 12、Ubuntu 20.04 或 Ubuntu 22.04。
  • 安装playwright的python版本

    • pip install playwright
  • 安装Playwright所需的所有工具插件和所支持的浏览器

    • playwright install
    • 该步骤耗时较长

屏幕录制

  • 创建一个py文件,比如:main.py

  • 在终端中,执行如下指令:

python"> playwright codegen -o main.py  

在这里插入图片描述

python">playwright codegen --viewport-size=800,600  www.baidu.com -o main.py 
  • 模拟手机设备进行网络请求(只支持手机模拟器,无需单独安装)
  • 访问指定网址,并且设置浏览器窗口大小
python">playwright codegen --device="iPhone 13" -o main.py

保留记录cookie

  • 在屏幕录制时,进行登录操作,登录后,cookie信息会被保存到auth.json文件中
python">playwright codegen --save-storage=auth.json http://download.java1234.com/ 
  • 基于auth.json进行屏幕录制,会自动进入到登录成功后的页面中
python">playwright codegen --load-storage=auth.json http://download.java1234.com/ -o main.py 

基本使用

python">from playwright.sync_api import sync_playwright
with sync_playwright() as p:# headless 是否是无头浏览器bro=p.chromium.launch(headless=False)page=bro.new_page()# 访问的网站page.goto("https://www.baidu.com")# 等待时长page.wait_for_timeout(1000)# 获取网页标头title=page.title()# 获取网站源码content=page.content()print(title,content)page.close()bro.close()

在这里插入图片描述

元素定位

CSS选择器定位

  • 语法结构:page.locator()
    • 参数:标签/id/层级/class 选择器
  • 交互操作:
    • 点击元素, click() 方法
    • 元素内输入文本, fill() 方法
python">import randomfrom playwright.sync_api import sync_playwrightwith sync_playwright() as p:# headless 是否是无头浏览器bro = p.chromium.launch(headless=False)page = bro.new_page()# 访问的网站page.goto("https://www.baidu.com")# 等待时长page.wait_for_timeout(1000)# 定位并输入pythonpage.locator("#kw").fill("python")# 定位搜索按钮,进行搜索 #id定位  .class定位page.locator("#su").click()page.wait_for_timeout(1000)# 网页回退page.go_back()page.wait_for_timeout(1000)# 标签+属性定位page.locator("input#kw").fill("人工智能")page.locator("#su").click()page.go_back()page.wait_for_timeout(1000)# 层级定位page.locator('#form > span > input#kw').fill('数据分析')page.locator('#su').click()page.wait_for_timeout(1000)page.go_back()page.wait_for_timeout(1000)# 聚焦于当前标签page.locator('#form > span > input#kw').focus()input_text = 'Hello, World!'for char in input_text:page.keyboard.type(char, delay=random.randint(300, 600))# 定位搜索按钮,进行点击操作page.locator('#su').click()page.close()bro.close()

xpath定位

page.locator(xpath表达式)

python">from playwright.sync_api import sync_playwrightwith sync_playwright() as p:bro = p.chromium.launch(headless=False,slow_mo=2000)page = bro.new_page()page.goto('https://www.bilibili.com/')#xpath定位page.locator('//*[@id="nav-searchform"]/div[1]/input').fill('Python教程')page.locator('//*[@id="nav-searchform"]/div[2]').click()page.close()bro.close()

count

python">const count = await page.locator('div.my-class').count();  
console.log(count); // 输出匹配 'div.my-class' 的元素数量

nth(index)

python">const element =page.locator('button').nth(1); // 获取第二个按钮元素  
element.click();

inner_text()

python">const element = await page.locator('h1');  
const text = await element.inner_text();  
console.log(text); // 输出 h1 元素的内部文本

get_by_text(xxx)

python">const element =page.locator('button:text("Click me")'); // 定位包含文本 "Click me" 的按钮  
element.click();

get_attribute(attrName)

python">const element = page.locator('img');  
const src = element.get_attribute('src');  
console.log(src); // 输出图像的 src 属性值

http://www.ppmy.cn/devtools/16497.html

相关文章

ChatGPT付费创作系统V2.8.4独立版 WEB+H5+小程序端 (新增Pika视频+短信宝+DALL-E-3+Midjourney接口)

小狐狸GPT付费体验系统最新版系统是一款基于ThinkPHP框架开发的AI问答小程序,是基于国外很火的ChatGPT进行开发的Ai智能问答小程序。当前全民热议ChatGPT,流量超级大,引流不要太简单!一键下单即可拥有自己的GPT!无限多…

抽象的算法0.1.2版本

前言: 公式:(基础 基础 基础 ...更多的基础) 维度(影响因素) 问题 总感觉这个公式还缺了什么,将会在后续更新! 斐波那契数列 斐波那契数列(Fibonacci sequence&am…

BGP的路径属性

路径属性 l每条BGP路由都拥有多个的路径属性,有些是必须携带的,有些是可选添加的 lBGP的路径属性将影响最优路由的选择 lBGP路径属性是描述路由的一组参数,BGP根据路由的属性选择最佳路由,可以人为置值,以便执行路由…

springboot+Vue实现分页

文章目录 一、后端二、前端 今天开发的有一个场景就是需要从远程ssh服务器上加载一个文件展示到前端,但是一次性拉过来有几万条数据,一下载加载整个文件会导致前端非常非常的卡,于是要使用分页解决,我之前看过的有mybatis的分页查…

力扣---填充每个节点的下一个右侧节点指针 II

给定一个二叉树: struct Node {int val;Node *left;Node *right;Node *next; } 填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL 。 初始状态下,所有 next 指针都…

时间默认显示当前日期及系统时间

要将 xtdsSj 绑定到当前日期和系统时间&#xff0c;你可以在组件的 data 中初始化 xtdsSj 属性为当前日期及系统时间的字符串。然后&#xff0c;在组件创建时更新 xtdsSj&#xff0c;确保它始终显示当前日期和系统时间。 1.系统读数时间默认显示当前日期及系统时间 <templa…

【C++题解】1043. 行李托运价格

问题&#xff1a;1043. 行李托运价格 类型&#xff1a;分支 题目描述&#xff1a; 某车站行李托运收费标准是&#xff1a; 10 公斤或 10 公斤以下&#xff0c;收费 2.5 元&#xff0c;超过 10 公斤的行李&#xff0c;按每超过 1 公斤增加 1.5 元进行收费。 试编一程序&#x…

linux第八章 git连接本地仓库和gitee

&#x1f436;博主主页&#xff1a;ᰔᩚ. 一怀明月ꦿ ❤️‍&#x1f525;专栏系列&#xff1a;线性代数&#xff0c;C初学者入门训练&#xff0c;题解C&#xff0c;C的使用文章&#xff0c;「初学」C&#xff0c;linux &#x1f525;座右铭&#xff1a;“不要等到什么都没有了…