首页 > 编程语言 >python+playwright 学习-57 svg 元素拖拽

python+playwright 学习-57 svg 元素拖拽

时间:2023-04-29 20:33:23浏览次数:51  
标签:box playwright python svg circle mouse page

前言

SVG英文全称为Scalable vector Graphics,意思为可缩放的矢量图,这种元素比较特殊,需要通过 name() 函数来进行定位。
本篇讲下关于svg元素的拖拽相关操作。

拖拽 svg 元素

如图所示,svg下的circle元素是可以拖动的

python+playwright 学习-57 svg 元素拖拽_ci


比如往右拖动 100 个像素, 那么cx的值由原来的cx="100"变成 cx="200"

python+playwright 学习-57 svg 元素拖拽_拖拽_02

通过鼠标是可以实现拖拽操作的

playwright 拖拽 svg 元素

先定位目标元素,通过 mouse 鼠标事件操作

from playwright.sync_api import sync_playwright
#

with sync_playwright() as playwright:
    browser = playwright.chromium.launch(headless=False)
    page = browser.new_page()
    page.goto('file:///C:/Users/dell/Desktop/drag/snap_events.html')

    # svg元素定位
    circle = page.locator('//*[name()="svg"]/*[name()="circle"]')
    print(circle.bounding_box())
    box = circle.bounding_box()
    # svg元素拖拽
    page.mouse.move(x=box['x']+box['width']/2, y=box['y']+box['height']/2)
    page.mouse.down()
    page.mouse.move(x=box['x']+box['width']/2+100, y=box['y']+box['height']/2)
    page.mouse.up(button="middle")

如果不确定鼠标down事件有没触发,可以加个元素的事件监听,看console日志

from playwright.sync_api import sync_playwright


with sync_playwright() as playwright:
    browser = playwright.chromium.launch(headless=False)
    page = browser.new_page()
    page.goto('file:///C:/Users/dell/Desktop/drag/snap_events.html')

    # svg元素定位
    circle = page.locator('//*[name()="svg"]/*[name()="circle"]')
    print(circle.bounding_box())
    box = circle.bounding_box()
    # 添加事件监听
    circle.evaluate('node => node.addEventListener("mousedown", function(){console.log("目标元素被鼠标down了");});')

    # svg元素拖拽
    page.mouse.move(x=box['x']+box['width']/2, y=box['y']+box['height']/2)
    page.mouse.down()
    page.mouse.move(x=box['x']+box['width']/2+100, y=box['y']+box['height']/2)
    page.mouse.up(button="middle")

python+playwright 学习-57 svg 元素拖拽_拖拽_03


python+playwright 学习-57 svg 元素拖拽_元素定位_04




标签:box,playwright,python,svg,circle,mouse,page
From: https://blog.51cto.com/u_15249893/6236879

相关文章

  • python+playwright 学习-56 svg 元素定位
    前言SVG英文全称为ScalablevectorGraphics,意思为可缩放的矢量图,这种元素比较特殊,需要通过name()函数来进行定位。svg元素定位如下看到的svg标签,就是svg元素用普通的标签定位,是无法定位的,如xpath的//svg只能通过name()函数来定位//*[name()="svg"]页面上用多个svg元素如果......
  • python+playwright 学习-55 在docker 容器中运行playwright脚本
    前言Dockerfile.focal可用于在Docker环境中运行Playwright脚本。这些镜像包括在Docker容器中运行浏览器所需的所有依赖项,还包括浏览器本身。playwright在linux系统上目前只支持Ubuntu系统的部分版本,centos和debian系统上是没法运行的。镜像查看所有可用的图像标签https:......
  • 长度最小的子数组--Python解法
    给定一个含有 n 个正整数的数组和一个正整数target。找出该数组中满足其和≥target的长度最小的连续子数组 [numsl,numsl+1,...,numsr-1,numsr],并返回其长度。如果不存在符合条件的子数组,返回0。defminSubArrayLen(self,s:int,nums:List[int])->int:......
  • Python之路【第十九篇】:爬虫
    网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。 1.RequestsPython标准库中提供了:urllib、urllib2、httplib等模块......
  • python将pdf转为txt
    #encoding=utf8#-*-coding:utf-8-*-#pipinstallpypdf2-ihttps://pypi.tuna.tsinghua.edu.cn/simpleimportPyPDF2fromioimportStringIOcontent_all_list=[]#打开PDF文件并创建一个PyPDF2对象withopen('Scrum-Guide-Chinese-Simplified.pdf','r......
  • #yyds干货盘点#python包
    包是一种用“点式模块名”构造Python模块命名空间的方法。例如,模块名 A.B 表示包 A 中名为 B 的子模块。正如模块可以区分不同模块之间的全局变量名称一样,点式模块名可以区分NumPy或Pillow等不同多模块包之间的模块名称。假设要为统一处理声音文件与声音数据设计一个模......
  • Python之路【第十八篇】:Web框架们
    Python的WEB框架1.BottleBottle是一个快速、简洁、轻量级的基于WSIG的微型Web框架,此框架只由一个.py文件,除了Python的标准库外,其不依赖任何其他模块。 pipinstallbottleeasy_installbottleapt-getinstallpython-bottlewgethttp://bottlepy.org/bottle.py......
  • Python 与 Pycharm 安装
    推荐到官网下载,不推荐使用各种电脑管家如果没有强烈的版本要求,建议使用最新版Python安装到Python官网下载页面下载安装包,官网会自动根据当前系统推荐适合的安装包笔者此时最新版为Windows版本下的3.11.3,如果官网进不去,可以从笔者提供的备用地址下载下载完安装包后打......
  • Python 希尔排序(Shell Sort)原理以及应用
    希尔排序的原理:希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。希尔排序的原理是将待排序的序列按照一定间隔分成若干个子序列,对每个子序列使用插入排序进......
  • Python之路【第十七篇】:Django【进阶篇】
    原博客笔记链接:https://www.cnblogs.com/wupeiqi/articles/5246483.html 1.Model到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞:创建数据库,设计表结构和字段使用MySQLdb来连接数据库,并编写数据访问层代码业务逻辑层去调用数据访问层执行数......