selenium通过js脚本操作canvas元素的几种方法

1、python--selenium-web自动化canvas绘图 https://www.itdaan.com/blog/2019/01/04/dcf139461997f281dc3149ff70cfe278.html

# canvas绘图
def painting_canvas(driver):
    driver.execute_script('var s=document.getElementsByClassName("signature-pad--body")[0];'#signature-pad--bod为绘图页的元素ClassName
                          + 'var c=s.getElementsByTagName("canvas")[0];'
                          + 'var ctx=c.getContext("2d");'#2维
                          + 'ctx.font="100px Arial";'#像素大小
                          + 'ctx.fillText("Lucky me",100,200);')#为输入内容和坐标

2、https://www.cnblogs.com/sprouts/p/10343142.html

selenium鼠标操作

背景:  页面中的表格都是用canvas画出来的,导致无法定位到canvas里面的内容,但是点击的内容可以从双击后的详细页面获取.

解决方案

通过canvas标签元素的坐标位置的相对位置来点击canvas中的任何一条记录后进入到详情页面再获取详情页中的元素信息.

actions = ActionChains(self.webdriver)
actions.move_to_element_with_offset(el, 102, 35).context_click().perform()
#el是canvas标签元素,102和35是相对于canvas的相对便宜量.

注意: 

move_to_element_with_offset()方法和 move_by_offset()方法的区别
前者是移动鼠标到某个元素的相对便宜量位置,后者是移动鼠标到鼠标当前位置的便宜量位置.

3、[Selenium] 操作 HTML5 中的 Canvas 绘制图形 https://blog.csdn.net/weixin_33881140/article/details/93677365

以 Chrome Driver 为例阐述,通过 Actions 在 Canvas 上绘制一个封闭图形。对于 Canvas 上的操作,推荐 Chrome Driver 或 Firefox Driver

示例:

package com.learningselenium.html5;

 

import org.junit.After;

import org.junit.Before;

import org.junit.Test;

import org.openqa.selenium.By;

import org.openqa.selenium.WebDriver;

import org.openqa.selenium.WebElement;

import org.openqa.selenium.chrome.ChromeDriver;

import org.openqa.selenium.interactions.Actions;

 

public class testHTML5Canvas{

  WebDriver driver;

 

  @Before

  public void setUp() throws Exception{

    System.setProperty("webdriver.chrome.driver", "/Selenium 2/selenium/chromedriver");

    driver = new ChromeDriver();

    driver.get("http://literallycanvas.com/");

  }

 

  @Test

  public void testHTML5Canvas() throws Exception{

    //元素不存在,有问题 “div.literally.index div.lc-drawing canvas”

    WebElement canvas = driver.findElement(By.xpath("//*[@id = \"about\"]/div[1]/canvas"));   

    Actions drawing = new Action(driver);

    //绘制图形

    driver.clickAndHold(canvas).moveByOffset(10,50).moveByOffset(50,10).moveByOffset(-10,-50).moveByOffset(-50,-10).release().perform();

  }

 

  @After

  public void tearDown() throws Exception{

    driver.quit();

  }

}

转载于:https://www.cnblogs.com/feifeidxl/p/4554651.html

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值