selenium+java破解极验滑动验证码的示例代码

请见以下攻略:

selenium+java破解极验滑动验证码的示例代码攻略

简介

极验滑动验证码是一种常用的图形验证码,它需要用户在滑动拼图的同时,滑块位置与拼图位置匹配,才能完成验证。本篇攻略讲解使用selenium结合java来破解极验滑动验证码,并提供两个示例说明。

准备工作

在使用selenium之前,你需要先下载安装好java sdk和selenium webdriver,如果你是使用maven构建项目,也可以直接将其加入到pom.xml文件中。

<dependencies>
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-java</artifactId>
        <version>3.141.59</version>
    </dependency>
</dependencies>

实现过程

示例1:破解简单极验验证码

在这个示例中,我们将通过访问“极验验证”官网,尝试破解简单的极验验证码。首先,你需要在代码中引入以下包:

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

然后,在main函数中初始化WebDriver,并打开网站进行模拟操作。代码如下:

public static void main(String[] args) throws InterruptedException {
    System.setProperty("webdriver.chrome.driver", "path/to/chromedriver");
    WebDriver driver = new ChromeDriver();
    driver.get("http://www.geetest.com/demo/slide-puzzle.html");

    //等待页面加载完成
    Thread.sleep(3000);

    //通过xpath查找滑动按钮
    WebElement button = driver.findElement(By.xpath("//div[@class='gt_slider_knob gt_show']"));

    //执行滑动操作
    Actions actions = new Actions(driver);
    actions.clickAndHold(button).moveByOffset(300, 0).perform();

    //等待1秒后释放滑动按钮
    Thread.sleep(1000);
    actions.release().perform();

    //关闭浏览器
    driver.quit();
}

通过执行clickAndHold、moveByOffset和release三个方法,我们可以将滑动按钮拖动到目标位置,从而完成验证码的破解。

示例2:破解复杂极验验证码

虽然上面的示例可以破解简单的极验验证码,但是用同样的方法在复杂的验证码场景下就没有那么简单了。接下来我们将实际操作破解一下“极速数据”官网上的极验验证码。首先,你需要将以下包引入到代码中:

import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.Point;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

然后,在main函数中初始化WebDriver,并打开极速数据官网进行模拟操作。代码如下:

public static void main(String[] args) throws InterruptedException {
    System.setProperty("webdriver.chrome.driver", "path/to/chromedriver");
    WebDriver driver = new ChromeDriver();

    driver.get("https://www.tianyancha.com/login");

    //等待页面加载完成
    Thread.sleep(3000);

    //找到滑动块所在的iframe
    WebElement iframe = driver.findElement(By.xpath("//iframe[contains(@src,'/captcha')]"));

    //切换到滑动块所在的iframe
    driver.switchTo().frame(iframe);

    //找到滑动块元素
    WebElement button = driver.findElement(By.id("nc_1_n1z"));

    //定位滑动块起始位置
    Point start = button.getLocation();

    //执行滑动操作
    Actions actions = new Actions(driver);
    actions.clickAndHold(button).moveByOffset(290, 0).perform();

    //等待1秒后释放滑动按钮
    Thread.sleep(1000);
    actions.release().perform();

    //等待验证码的校验
    new WebDriverWait(driver, 20).until(ExpectedConditions.urlContains("verified=1"));

    //关闭浏览器
    driver.quit();
}

在这个示例中,我们需要使用WebDriver的switchTo方法,切换到滑动块所在的iframe中,才能进行后续操作。另外,我们还需要利用WebDriverWait来等待验证码的校验结果。

总结

selenium是一种自动化测试工具,它可以在浏览器中模拟用户各种操作,包括鼠标点击、键盘输入、拖拽等。对于某些场景下的验证码,结合selenium和java,我们可以通过自动化操作来破解。当然,这种方式并不一定总是有效,甚至在有些情况下可能会被网站屏蔽。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:selenium+java破解极验滑动验证码的示例代码 - Python技术站

(1)
上一篇 2023年6月15日
下一篇 2023年6月15日

相关文章

  • Java使用NIO优化IO实现文件上传下载功能

    我来为您讲解一下“Java使用NIO优化IO实现文件上传下载功能”的完整攻略。 概述 Java NIO library 是Java语言提供的一种基于缓冲区、非阻塞的IO,使得Java应用程序能够快速轻便地处理并发客户端请求。使用Java NIO实现文件上传下载功能的好处是可以大大提高系统的吞吐量、降低系统的IO延迟,而且还能避免阻塞线程,提高服务器的并发能力…

    Java 2023年5月19日
    00
  • Java如何实现判断并输出文件大小

    下面我将详细讲解 Java 如何实现判断并输出文件大小的完整攻略: 1. 获取文件大小方法 Java 中可以使用 File 类的 length() 方法来获取文件的大小,该方法返回文件的长度,以字节为单位。代码示例如下: import java.io.File; public class FileSizeDemo { public static void m…

    Java 2023年5月20日
    00
  • Java 多线程传值的四种方法

    Java 多线程传值的四种方法 在Java中,当多个线程需要共享数据时,传值成为一件非常重要的事情。该文章将介绍Java中多线程传值的四种方法。 方法一:使用静态变量 Java中的静态变量在不同的线程之间是共享的,我们可以通过修改静态变量实现线程之间的值的传递。 public class ThreadDemo1 { private static int va…

    Java 2023年5月19日
    00
  • Java 锁的知识总结及实例代码

    Java 锁的知识总结及实例代码 在 Java 中,锁机制是一个非常重要的多线程编程的知识点。下面对 Java 锁相关的知识进行总结,并提供两个示例代码说明锁机制的应用。 概念 互斥锁(mutex):用于控制对共享资源的访问。对于任一个时刻,只有一个线程可以访问共享资源,其他的线程必须等待。 读写锁(ReadWriteLock):允许多个线程同时读共享资源,…

    Java 2023年5月23日
    00
  • Hibernate原理及应用

    Hibernate原理及应用 什么是Hibernate Hibernate是一个开源的、轻量级的ORM(Object/Relational Mapping)框架。ORM封装了不同类型的数据库的操作,并且可以通过面向对象的方式来操作数据库,它将Java对象映射到关系数据库中。 Hibernate作为ORM框架,它的主要思想是面向对象的思想。它的目的是要简化Ja…

    Java 2023年5月19日
    00
  • java实现简单年龄计算器

    Java实现简单年龄计算器 简介 在这篇文章中,我们将会学习如何用Java编写一个简单的年龄计算器,可以输入生日日期,程序将会计算出当前的年龄。 前置知识 在编写本文所述的程序时,需要具备以下知识: Java基础语法 日期时间相关类的使用 步骤 获取当前时间 java LocalDateTime today = LocalDateTime.now(); 这里…

    Java 2023年6月15日
    00
  • 原生JS实现不断变化的标签

    实现不断变化的标签通常指的是像轮播图、动态效果等需要不断切换的元素。在原生JS实现这类效果时,可以使用定时器setTimeout或setInterval来实现,通过不断修改元素的属性值,从而达到动态变化的效果。 下面是一个基本的实现步骤: 1. HTML结构 首先,在HTML中需要定义需要变化的元素,比如轮播图的图片。这里以轮播图为例,HTML结构可以参考以…

    Java 2023年6月15日
    00
  • SpringBoot中Tomcat和SpringMVC整合源码分析

    SpringBoot中Tomcat和SpringMVC整合源码分析 SpringBoot是一种快速开发Java应用程序的框架,它提供了许多便捷的功能和工具,使得开发者可以更加高效地开发Java应用程序。其中,Tomcat和SpringMVC是SpringBoot中常用的两个组件,本文将详细讲解如何在SpringBoot中整合Tomcat和SpringMVC,…

    Java 2023年5月17日
    00
合作推广
合作推广
分享本页
返回顶部