java+selenium爬取图片签名的方法

本文实例为大家分享了java+selenium爬取图片签名的具体实现方法,供大家参考,具体内容如下

学习记录:

1.注意

对应的版本非常重要,使用selenium得下载与游览器版本相对应的插件,有火狐和谷歌我用的谷歌,贴下谷歌driver的插件

查看谷歌版本:

2.插件存放路径

3.获取签名图片存放路径

4.Controller代码如下

 @ResponseBody
 @RequestMapping(value = "signatureGenerationv")
 public String signatureGeneration(String userName, HttpServletRequest request) throws Exception{
 System.setProperty("webdriver.chrome.driver", ".\\Tools\\chromedriver.exe");
 //初始化一个谷歌浏览器实例,实例名称叫driver
 WebDriver driver = new ChromeDriver();
 // get()打开一个站点
 driver.get("https://www.yishuzi.cn/qianming/");
 //签名
 driver.findElement(By.xpath("//*[@id=\"text\"]")).clear();
 driver.findElement(By.xpath("//*[@id=\"text\"]")).sendKeys(userName);
 //签名配色
 driver.findElement(By.xpath("//*[@id=\"index\"]/div[1]/div/div[4]/div[2]/div/div[7]/div/div/p[2]/a[2]")).click();
 //最大化窗口
 driver.manage().window().maximize();
 Thread.sleep(2000);
 WebElement webElement = driver.findElement(By.xpath("//*[@id=\"SaveImg\"]"));
 //生成签名图片,裁剪图片
 byte[] imageData = BrowserUtil.captureElement(webElement);
 //设置隐性等待时间
 driver.manage().timeouts().implicitlyWait(8, TimeUnit.SECONDS);
 //getTitle()获取当前页面title的值
 System.out.println("当前打开页面的标题是: "+ driver.getTitle());
 //关闭并退出浏览器
 driver.quit();
 //把图片转换成能够在页面直接展示的BASE64Encoder格式
 BASE64Encoder base64Encoder = new BASE64Encoder();
 String img = base64Encoder.encode(imageData);
 return img;
 }

5.BrowserUtil工具类代码

public static byte[] captureElement(WebElement element) throws Exception {
 WrapsDriver wrapsDriver = (WrapsDriver) element;
 // 截图整个页面
 byte[] screen = ((TakesScreenshot) wrapsDriver.getWrappedDriver()).getScreenshotAs(OutputType.BYTES);

 ByteArrayOutputStream out = new ByteArrayOutputStream();
 try {
  BufferedImage img = ImageIO.read(new ByteArrayInputStream(screen));
  ImageIO.write(img, "png", new File("img/imgs/img"+System.currentTimeMillis()+".png"));

  // 获得元素的高度和宽度
  int width = element.getSize().getWidth();
  int height = element.getSize().getHeight();
  // 创建一个矩形使用上面的高度,和宽度
  java.awt.Rectangle rect = new java.awt.Rectangle(width, height);
  // 得到元素的坐标
  Point p = element.getLocation();

  float rate = img.getWidth()/1280;
  BufferedImage dest = img.getSubimage(
   (int)(p.getX()*rate),
   (int)(p.getY()*rate),
   (int)(rect.width*rate),(int)(rect.height*rate));
  ImageIO.write(dest, "png", new File("img/"+System.currentTimeMillis()+".png"));
  boolean flag = ImageIO.write(dest, "png", out);
  byte[] imageData = out.toByteArray();
  return imageData;
 } finally {
  out.close();
 }
 }

6.index.html代码

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>签名生成</title>
 <script type="text/javascript" src="js/jquery-3.3.1.min.js"></script>
</head>
<body>
<div>
 请输入名字:<input type="text" id="userName" name="userName"><input type="button" id="btn" value="生成">
 <!--<img id="img" src="">-->
 <div id="img"></div>
</div>
<script>

 $("#btn").click(function () {
  var userName = $("#userName").val();
  $.ajax({
  url : "signatureGenerationv",
  type : "post",
  // dataType :"string",
  data :{'userName':userName},
  success : function(data) {
   data = data.replace(/\\n/g,'\n')//去换行
   var str = data.substring(0,data.length)
   var base = "data:image/png;base64,"+str;
   var img = new Image();//创建img容器
   img.src = base;
   document.body.appendChild(img);
  },
  error : function(data) {
   alert("失败"+data.responseText)
  }
  })
 })

</script>
</body>
</html>

7.结果图

8.pom包

<!--selenium依赖文件-->
 <!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -->
 <dependency>
  <groupId>org.seleniumhq.selenium</groupId>
  <artifactId>selenium-java</artifactId>
  <version>3.8.1</version>
 </dependency>
 <!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-server -->
 <dependency>
  <groupId>org.seleniumhq.selenium</groupId>
  <artifactId>selenium-server</artifactId>
  <version>3.8.1</version>
 </dependency>
 <!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-chrome-driver -->
 <dependency>
  <groupId>org.seleniumhq.selenium</groupId>
  <artifactId>selenium-chrome-driver</artifactId>
  <version>3.8.1</version>
 </dependency>
 <!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-chrome-driver -->
 <dependency>
  <groupId>org.seleniumhq.selenium</groupId>
  <artifactId>selenium-chrome-driver</artifactId>
  <version>3.8.1</version>
 </dependency>
 <dependency>
  <groupId>org.seleniumhq.selenium</groupId>
  <artifactId>selenium-htmlunit-driver</artifactId>
  <version>2.52.0</version>
 </dependency>
 <dependency>
  <groupId>com.google.code.gson</groupId>
  <artifactId>gson</artifactId>
  <version>2.8.5</version>
 </dependency>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Java爬虫实现爬取京东上的手机搜索页面 HttpCliient+Jsoup

    1.需求及配置 需求:爬取京东手机搜索页面的信息,记录各手机的名称,价格,评论数等,形成一个可用于实际分析的数据表格. 使用Maven项目,log4j记录日志,日志仅导出到控制台. Maven依赖如下(pom.xml) <dependencies> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId>

  • Java实现爬取百度图片的方法分析

    本文实例讲述了Java实现爬取百度图片的方法.分享给大家供大家参考,具体如下: 在以往用java来处理解析HTML文档或者片段时,我们通常会采用htmlparser(http://htmlparser.sourceforge.net/)这个开源类库.现在我们有了JSOUP,以后的处理HTML的内容只需要使用JSOUP就已经足够了,JSOUP有更快的更新,更方便的API等. jsoup 是一款 Java 的HTML 解析器,可直接解析某个URL地址.HTML文本内容.它提供了一套非常省力的API,

  • Java实现爬取往期所有双色球开奖结果功能示例

    本文实例讲述了Java实现爬取往期所有双色球开奖结果功能.分享给大家供大家参考,具体如下: 梦想还是要有的,万一实现了呢?我相信经常买双色球的朋友和我都会有一个疑问,就是往期双色球的开奖结果是什么?我钟意的这一注双色球在往期是否开过一等奖,如果开过的话,基本上可以放弃这一注了,因为历史上应该没有出现过两期双色球开奖完全一致的吧?那么往期的开奖结果是什么呢?我自己用Java写了一个简易的类,爬取所有双色球开奖结果,本来想开发安卓版本的,由于UI等需要时间准备,有缘再开发吧. import java

  • java实现爬取知乎用户基本信息

    本文实例为大家分享了一个基于JAVA的知乎爬虫,抓取知乎用户基本信息,基于HttpClient 4.5,供大家参考,具体内容如下 详细内容: 抓取90W+用户信息(基本上活跃的用户都在里面) 大致思路: 1.首先模拟登录知乎,登录成功后将Cookie序列化到磁盘,不用以后每次都登录(如果不模拟登录,可以直接从浏览器塞入Cookie也是可以的). 2.创建两个线程池和一个Storage.一个抓取网页线程池,负责执行request请求,并返回网页内容,存到Storage中.另一个是解析网页线程池,负

  • 详解Java两种方式简单实现:爬取网页并且保存

    对于网络,我一直处于好奇的态度.以前一直想着写个爬虫,但是一拖再拖,懒得实现,感觉这是一个很麻烦的事情,出现个小错误,就要调试很多时间,太浪费时间. 后来一想,既然早早给自己下了保证,就先实现它吧,从简单开始,慢慢增加功能,有时间就实现一个,并且随时优化代码. 下面是我简单实现爬取指定网页,并且保存的简单实现,其实有几种方式可以实现,这里慢慢添加该功能的几种实现方式. UrlConnection爬取实现 package html; import java.io.BufferedReader; i

  • java代理实现爬取代理IP的示例

    仅仅使用了一个java文件,运行main方法即可,需要依赖的jar包是com.alibaba.fastjson(版本1.2.28)和Jsoup(版本1.10.2) 如果用了pom,那么就是以下两个: <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.28</version> </depe

  • java爬取并下载酷狗TOP500歌曲的方法

    是这样的,之前买车送的垃圾记录仪不能用了,这两天狠心买了好点的记录仪,带导航.音乐.蓝牙.4G等功能,寻思,既然有这些功能就利用起来,用4G听歌有点奢侈,就准备去酷狗下点歌听,居然都是需要办会员才能下载,而且vip一月只能下载300首,我这么穷又这么抠怎么可能冲会员,于是百度搜了下怎么免费下载,都是python爬取,虽然也会一点,但是电脑上没安装python,再安装再研究感觉有点费劲,于是就花了半小时做了这个爬虫,技术一般,只记录分析实现过程,大牛请绕行.其中用到了一些库,包括:jsoup.Ht

  • java+selenium爬取图片签名的方法

    本文实例为大家分享了java+selenium爬取图片签名的具体实现方法,供大家参考,具体内容如下 学习记录: 1.注意 对应的版本非常重要,使用selenium得下载与游览器版本相对应的插件,有火狐和谷歌我用的谷歌,贴下谷歌driver的插件 查看谷歌版本: 2.插件存放路径 3.获取签名图片存放路径 4.Controller代码如下 @ResponseBody @RequestMapping(value = "signatureGenerationv") public String

  • 如何在scrapy中集成selenium爬取网页的方法

    1.背景 我们在爬取网页时一般会使用到三个爬虫库:requests,scrapy,selenium.requests一般用于小型爬虫,scrapy用于构建大的爬虫项目,而selenium主要用来应付负责的页面(复杂js渲染的页面,请求非常难构造,或者构造方式经常变化). 在我们面对大型爬虫项目时,肯定会优选scrapy框架来开发,但是在解析复杂JS渲染的页面时,又很麻烦. 尽管使用selenium浏览器渲染来抓取这样的页面很方便,这种方式下,我们不需要关心页面后台发生了怎样的请求,也不需要分析整

  • java selenium使用浏览器调试工具实现方法

    在基于UI元素的自动化测试中, 无论是桌面的UI自动化测试,还是Web的UI自动化测试.   首先我们需要查找和识别UI元素. 在基于Web UI 自动化测试中, 测试人员需要了解HTML, CSS和Javascript的一些知识, 还需要学会使用各种浏览器的调试功能 查找Web UI 页面上的元素, 必须先了解页面的DOM结构, 元素的属性, 甚至一些JavaScript的调用信息.  现在主流的浏览器都自带了很多强有力的工具 阅读目录 Google Chrome Internet Explo

  • Java使用selenium爬取b站动态的实现方式

    目录 selenium mac安装chromedriver 完整代码 maven依赖 完整代码 目标:爬取b站用户的动态里面的图片,示例动态 如下所示,我们需要获取这些图片 如图所示,哔哩哔哩漫画的数据是动态请求获取的 这里我们使用selenium来爬取数据 selenium Selenium是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样. 官网地址 这里我使用chrome浏览器,所以驱动就选用chromedriver mac安装chrome

  • java selenium XPath 定位实现方法

    xpath 的定位方法, 非常强大.  使用这种方法几乎可以定位到页面上的任意元素. 阅读目录 什么是xpath xpath定位的缺点 testXpath.html 代码如下 绝对路径定位方式 使用浏览器调试工具,可以直接获取xpath语句 绝对路径的缺点 绝对路径和相对路径的区别 相对路径定位方式 使用索引号定位 使用页面属性定位 模糊定位starts-with关键字 模糊定位contains关键字 text() 函数 文本定位 什么是xpath xpath 是XML Path的简称, 由于H

  • Java使用DSA密钥对生成XML签名的方法

    本文实例讲述了Java使用DSA密钥对生成XML签名的方法.分享给大家供大家参考.具体实现方法如下: MainClass.java代码如下: 复制代码 代码如下: import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.SecureRandom; import java.util.Collections; import javax.xml.crypto.dsig.Canon

  • java+selenium实现自动化打开页面的方法

    闲聊一下: 毕业后的第一份工作很重要,我2015年6月985硕士毕业,7月参加工作,由于自己对职业生涯的迷茫,再加上对offer选择错误的后果(考虑太多也是错),导致自己现在并未从事自己一直愿意从事的自动化测试工作,今年想换工作了,还是特别想从事自动化测试的工作,可是目前的有一个offer也不是测试的(伤!),还有一个测试的offer在等结果,估计这两天就能有通知(好希望能够被录用!!).用我的经历,提醒大家,在毕业之前一定要想好自己想从事的方向,并且在选择offer时一定毫不犹豫的选择对自己发

  • Python使用Selenium爬取淘宝异步加载的数据方法

    淘宝的页面很复杂,如果使用分析ajax或者js的方式,很麻烦 抓取淘宝'美食'上面的所有食品信息 spider.py #encoding:utf8 import re from selenium import webdriver from selenium.common.exceptions import TimeoutException from selenium.webdriver.common.by import By from selenium.webdriver.support.ui

  • python根据用户需求输入想爬取的内容及页数爬取图片方法详解

    本次小编向大家介绍的是根据用户的需求输入想爬取的内容及页数. 主要步骤: 1.提示用户输入爬取的内容及页码. 2.根据用户输入,获取网址列表. 3.模拟浏览器向服务器发送请求,获取响应. 4.利用xpath方法找到图片的标签. 5.保存数据. 代码用面向过程的形式编写的. 关键字:requests库,xpath,面向过程 现在就来讲解代码书写的过程: 1.导入模块 import parsel # 该模块主要用来将请求后的字符串格式解析成re,xpath,css进行内容的匹配 import req

随机推荐