selenium WebDriver 截取网站的验证码

news/2024/5/16 18:14:01/文章来源:https://blog.csdn.net/weixin_34291004/article/details/93200908

在做爬虫项目的时候,有时候会遇到验证码的问题,由于某些网站的验证码是动态生成的,即使是同一个链接,在不同的时间访问可能产生不同的验证码,

 

一 刚开始的思路就是打开这个验证码的链接,然后通过java代码get请求保存验证码图片到本地,然后用打码工具解析验证码,将验证码自动输入验证框就

可以把验证码的问题解决了,但是问题来,每次的请求同一个地址,产生的验证码图片是不一样的,所以这种方法行不通。所以只能将图片先用selenium  WebDriver 

截取到本地,然后用打码工具解析ok ,自动填写验证,很好把验证码的问题解决了。

 

package com.entrym.main;import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Set;import javax.imageio.ImageIO;import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.StringUtils;
import org.json.JSONObject;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.openqa.selenium.By;
import org.openqa.selenium.Cookie;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.Point;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.WebDriverWait;import com.entrym.crawler.util.verifyCode.Captcha;
import com.entrym.crawler.util.verifyCode.DamaUtil;
import com.entrym.domain.SogouInfo;
import com.entrym.domain.Wxinfo;
import com.entrym.util.ConfigUtil;
import com.entrym.util.DateUtil;
import com.entrym.util.HttpUtils;
import com.google.gson.Gson;
import com.vdurmont.emoji.EmojiParser;public class WebTest {private static final String GET_TITLE="/titles/getxiaoshuo";private static final String PATH=new File("config/config.properties").getAbsolutePath();private static final String CHROME_HOME=new File("config/chromedriver.exe").getAbsolutePath();private static final String CHROME_HOME_LINUX=new File("config/chromedriver").getAbsolutePath();private static final String BASEURL=ConfigUtil.reads(PATH, "baseurl");public static void main(String[] args) throws IOException {WebDriver driver=null;
//			System.setProperty("webdriver.gecko.driver", FIREFOX_HOME);System.out.println(PATH);String osname=System.getProperty("os.name").toLowerCase();if(osname.indexOf("linux")>=0){System.setProperty("webdriver.chrome.driver", CHROME_HOME_LINUX);
//				driver = new MarionetteDriver();}else{System.setProperty("webdriver.chrome.driver", CHROME_HOME);
//				driver = new MarionetteDriver();}driver=new ChromeDriver();driver.get("http://weixin.sogou.com/antispider/?from=%2fweixin%3Ftype%3d2%26query%3dz+%26ie%3dutf8%26s_from%3dinput%26_sug_%3dy%26_sug_type_%3d");WebElement ele = driver.findElement(By.id("seccodeImage"));// Get entire page screenshotFile screenshot = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);BufferedImage  fullImg = ImageIO.read(screenshot);// Get the location of element on the pagePoint point = ele.getLocation();// Get width and height of the elementint eleWidth = ele.getSize().getWidth();int eleHeight = ele.getSize().getHeight();// Crop the entire page screenshot to get only element screenshotBufferedImage eleScreenshot= fullImg.getSubimage(point.getX(), point.getY(),eleWidth, eleHeight);ImageIO.write(eleScreenshot, "png", screenshot);// Copy the element screenshot to diskFile screenshotLocation = new File("D:/captcha/test.png");FileUtils.copyFile(screenshot, screenshotLocation);WebElement classelement = driver.findElement(By.className("p2"));String errorText=classelement.getText();System.out.println("输出的内容是"+classelement.getText());if(errorText.indexOf("用户您好,您的访问过于频繁,为确认本次访问为正常用户行为")>=0){System.out.println("*********************");DamaUtil util=new DamaUtil();System.out.println("===================");String code="";           //验证码Captcha captcha=new Captcha();captcha.setFilePath("test.png");code = DamaUtil.getCaptchaResult(captcha);System.out.println("打码处理出来的验证码是"+code);WebElement elementsumbit = driver.findElement(By.id("seccodeInput"));// 输入关键字elementsumbit.sendKeys(code);try {Thread.sleep(1000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}// 提交 input 所在的  formelementsumbit.submit();System.out.println("成功");}}
}

  

 

以上就代码,关键的代码在Stack Overflow得到的,不得不说谷歌还是很强大的

 

driver.get("http://www.google.com");
WebElement ele = driver.findElement(By.id("hplogo"));// Get entire page screenshot
File screenshot = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
BufferedImage  fullImg = ImageIO.read(screenshot);// Get the location of element on the page
Point point = ele.getLocation();// Get width and height of the element
int eleWidth = ele.getSize().getWidth();
int eleHeight = ele.getSize().getHeight();// Crop the entire page screenshot to get only element screenshot
BufferedImage eleScreenshot= fullImg.getSubimage(point.getX(), point.getY(),eleWidth, eleHeight);
ImageIO.write(eleScreenshot, "png", screenshot);// Copy the element screenshot to disk
File screenshotLocation = new File("C:\\images\\GoogleLogo_screenshot.png");
FileUtils.copyFile(screenshot, screenshotLocation);
View Code
以上就是关键的截取代码,在国外的链接是http://stackoverflow.com/questions/13832322/how-to-capture-the-screenshot-of-a-specific-element-rather-than-entire-page-usin
感兴趣的小伙伴可以研究一下

转载于:https://www.cnblogs.com/nn839155963/p/6690295.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_755453.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网站出现DNS域名解析错误

很抱歉的告诉大家,我博客出现了很严重的问题。之前,我博客一直存在这个问题,只是当时我用的Google Dns,所以一直没发现,直到后来,有越来越多的朋友跟我反映,说我博客打不开,我才意识…

【大型网站开发系列第一篇】——网站结构层次

前言 网上有很多关于网站结构的各种讨论,对于他们的好坏,我没有资格去评论,因为对于不同领域需要不同的结构。我这里只讲解下我所开发的项目的各个方面,整理下自己的思路,同时也希望分享给大家。 好了,还是…

Web 应用程序项目与网站项目

在 Visual Studio 中,可以创建“Web 应用程序项目”或“网站项目”。每种项目类型各有优缺点,要选择可以满足需要的最佳项目类型,应了解各项目类型之间的差异。创建项目之前,必须选择合适的项目类型,原因是从一种项目类…

解析 PHP 中 session 的实现原理以及大网站应用应该注意的问题

一 PHP SESSION原理 session 是在服务器端保持用户会话数据的一种方法,而 cookie 是在客户端保持用户数据。HTTP 协议是一种无状态协议,服务器响应完之后就失去了与浏览器的联系。那么,服务器是如何记住众多用户的会话数据呢? 首先…

谈谈用ASP.NET开发的大型网站有哪些架构方式(成本)

在上篇文章里(http://www.cnblogs.com/ms0017/archive/2011/07/26/2117676.html),列举了国内外用ASP.NET开发的大型网站有哪些。最后提到了用.NET开发的大型网站和LAMP/JAVA平台的成本比较。其实在很多时候,收费的不一定就比免费的成本更高。因为开发一个…

大型互联网网站架构

构建高性能Web站点 http://download.csdn.net/download/E_wsq/2613845http://download.csdn.net/download/E_wsq/2613845 ===========&#xff…

部分HTTPS网站受影响:Firefox暂停“弃用SHA-1加密”计划

由于SHA-1脆弱的安全性,Mozilla、谷歌、微软纷纷宣布了弃用这项加密技术的计划。但是由于不少设备与平台未能及时跟进,这一迁移让大量老用户受到了影响。此前,Facebook曾表示会为不支持SHA-1的访客继续提供服务。而在部分Firefox用户报告无法…

php网站主页后台_标准化企业网站建设方案是什么样的?

一、企业网站的意义企业网站是企业在互联网上进行网络营销和形象宣传的平台,相当于企业的网络名片,不但对企业的形象是一个良好的宣传,同时可以辅助企业的销售,通过网络直接帮助企业实现产品的销售。企业可以利用网站来进行企业形…

python f.write 保存图片到路径_Python爬虫篇—网页爬虫、图片爬虫、文章爬虫、新闻网站爬虫...

今天分享一则python比较基础的技术,爬虫。教小白们怎么轻松利用爬虫技术获取自己想要的知识内容。本节学习目标:学习Python爬虫爬取新闻网站新闻列表爬取图片把爬取到的数据存在本地文件夹或者数据库学会用pycharm的pip安装Python需要用到的扩展包一、首…

js添加keyword让搜索引擎能够搜到_广州seo搜索搜索引擎优化电话-哪家好_华阳网络...

广州seo搜索搜索引擎优化电话-哪家好,热门搜索事件的短标题和普通微博的热门搜索标题。奇怪的头条类似于媒体的头条,伪“头条党”。当用户搜索结果时,他们首先看到的是标题和描述。如果标题和描述不够吸引人,则无法单击。那么,如何…

如何设置几个循环出来的span其中一个宽度_一步一步实现一个古诗词网站(三)——首页...

汪小黑:一步一步实现一个古诗文网站(二)——需求分析​zhuanlan.zhihu.com上篇文章,我们对项目进行了需求分析,明确了项目所需的各个功能模块,产出了页面的原型设计图。这篇文章我们将进入实战编码环节&…

.NET技术+25台服务器怎样支撑世界第54大网站

英文原文:StackOverflow Update: 560M Pageviews A Month, 25 Servers, And Its All About Performance StackOverflow 是一个 IT 技术问答网站,用户可以在网站上提交和回答问题。当下的 StackOverflow 已拥有 400 万个用户&…

seo伪原创工具_一键生成伪原创文章有用吗(正确使用伪原创工具)

一定有不少的SEOer正在使用伪原创文件生成器这个工具吧,我可以正确的断定出来,一个懂SEO优化的SEOer绝对能够正确理解文章的作用,而那些似懂非懂的SEOer每天都在为原创文章的事情烦恼。往往一直以为每天坚持更新文章就可以获得排名的SEOer却没…

十年Java编程开发生涯,java基础刷题网站

Spring 面试题 1、不同版本的 Spring Framework 有哪些主要功能? 2、什么是 Spring Framework? 3、列举 Spring Framework 的优点。 4、Spring Framework 有哪些不同的功能? 5、Spring Framework 中有多少个模块,它们分别是什…

antd table 时间搜索_一份完整的网站SEO搜索引擎优化方案思路,送给你,请查收!...

我们在给一个网站做SEO优化的时候,通常都需要先做出一份网站优化的方案,根据方案再去针对网站进行细致的调整优化工作。这份方案的思路决定了你是否能把网站的优化做好,具体详情请大家继续往下看。一、行业品牌/调研我们在做一个网站的SEO优化…

Windows平台网站图片服务器架构的演进

构建在Windows平台之上的网站,往往会被业内众多架构师认为很“保守”。很大部分原因,是由于微软技术体系的封闭和部分技术人员的短视造成的。由于长期缺乏开源支持,所以只能“闭门造车”,这样很容易形成思…

高扩展性网站的50条原则

《高扩展性网站的50条原则》,利用一天半的时间快速浏览总结的电子书,对网站的建设有一个原则性的把握,书中提到的大部分原则现在已成为互联网行业的共识,但并不妨碍我们重新整理分类,从全局层面把控高扩展性网站的建设…

大型网站图片服务器架构的演进

在主流的Web站点中,图片往往是不可或缺的页面元素,尤其在大型网站中,几乎都将面临“海量图片资源”的存储、访问等相关技术问题。在针对图片服务器的架构扩展中,也会历经很多曲折甚至是血泪教训(尤其是早期规划不足&am…

程序员 10个 堪称神器的学习网站

话不多说,直接上干货! 注:分享一个学习交流群796170550,有不懂的问题可以一起相互讨论 【群里还含有:Java80g学习视频Java学习书籍Java项目实战源码安装软件等】 01、大学资源网 大学资源网是一个完全免费并且功能非…

爆肝整理珍藏多年的实用工具/学习网站,助你在写代码的路上更顺利!!!

前言 这期是介绍自己常用的一些工具安利一下 千万不要白嫖,真香警告⚠️。 但是我在构思这篇文章的时候发现我贴个标题,然后发下软件信息会不会太乏味了,于是创作鬼才我呀,准备用一个产品的研发流程,是的就是用这样的…