0


使用C#和Selenium实现滑动验证码识别及自动登录的完整教程

准备工作
确保你已经安装了Visual Studio(或者其他C#开发环境)和Selenium库,并且能够访问网络。

实现步骤

  1. 初始化
    首先,创建一个新的C#项目,并安装Selenium库。

csharp

using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Support.UI;
using System;
using System.IO;
using System.Drawing;
using System.Threading;
2. 模拟登录填写,点开滑块验证
在模拟登录过程中,我们需要输入账户和密码,然后点击滑块验证按钮。

csharp

class CrackGeetest
{
private readonly string url = "https://account.geetest.com/login";
private readonly IWebDriver driver;

public CrackGeetest()
 {
     driver = new ChromeDriver();
     driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(10);
 }

public void OpenLoginPage()
 {
     driver.Navigate().GoToUrl(url);
 }

public void Login()
 {
     // 输入账户和密码
     var emailInput = driver.FindElement(By.Id("email"));
     var passwordInput = driver.FindElement(By.Id("password"));
     emailInput.SendKeys("your_email");
     passwordInput.SendKeys("your_password");

    // 点击滑块验证按钮
     var geetestButton = driver.FindElement(By.ClassName("geetest_radar_tip"));
     geetestButton.Click();

    // 其他操作...
 }

}

class Program
{
static void Main(string[] args)
{
var crack = new CrackGeetest();
crack.OpenLoginPage();
crack.Login();
}
}
3. 获取并储存有无缺口的两张图片
接下来,我们需要获取网页截图并裁剪出验证码图片,包括有缺口和无缺口的图片。

csharp

class CrackGeetest
{
// 省略之前的代码...

public void GetImages()
 {
     // 获取无缺口图片
     Thread.Sleep(2000); // 等待页面加载完成
     var noGapImage = driver.FindElement(By.ClassName("geetest_canvas_img"));
     var noGapScreenshot = ((ITakesScreenshot)driver).GetScreenshot();
     var noGapBitmap = new Bitmap(new MemoryStream(noGapScreenshot.AsByteArray));
     var noGapLocation = noGapImage.Location;
     var noGapSize = noGapImage.Size;
     var noGapRectangle = new Rectangle(noGapLocation, noGapSize);
     var noGapCrop = noGapBitmap.Clone(noGapRectangle, noGapBitmap.PixelFormat);
     noGapCrop.Save("no_gap_image.png");

    // 模拟点击滑块显示缺口
     var sliderButton = driver.FindElement(By.ClassName("geetest_slider_button"));
     sliderButton.Click();

    // 获取有缺口图片
     Thread.Sleep(2000); // 等待滑块显示缺口
     var gapImage = driver.FindElement(By.ClassName("geetest_canvas_img"));
     var gapScreenshot = ((ITakesScreenshot)driver).GetScreenshot();
     var gapBitmap = new Bitmap(new MemoryStream(gapScreenshot.AsByteArray));
     var gapLocation = gapImage.Location;
     var gapSize = gapImage.Size;
     var gapRectangle = new Rectangle(gapLocation, gapSize);
     var gapCrop = gapBitmap.Clone(gapRectangle, gapBitmap.PixelFormat);
     gapCrop.Save("gap_image.png");

    // 其他操作...
 }

}
4. 获取缺口位置
在这一步,我们可以通过一些图像处理技术来识别图片中的缺口位置。

csharp

class CrackGeetest
{
// 省略之前的代码...

public Point GetGapPosition(Bitmap noGapImage, Bitmap gapImage)
 {
     // 使用图像处理技术识别缺口位置
     // 省略具体实现...

    var gapPosition = new Point(100, 50); // 示例缺口位置
     return gapPosition;
 }

}
5. 获取移动轨迹
根据缺口位置计算出拖动滑块的轨迹。

csharp

class CrackGeetest
{
// 省略之前的代码...

public int[] GetTrack(Point gapPosition)
 {
     // 根据缺口位置计算滑动轨迹
     // 省略具体实现...

    var track = new int[] { 10, 20, 30, 40, 50 }; // 示例滑动轨迹
     return track;
 }

}
6. 按照轨迹拖动,完成验证
最后,根据计算出的轨迹拖动滑块完成验证。

csharp

class CrackGeetest
{
// 省略之前的代码...

public void DragSlider(int[] track)
 {
     // 拖动滑块完成验证
     // 省略具体实现...
 }

}
7. 完成登录
如果验证成功,则执行登录操作。

csharp

class CrackGeetest
{
// 省略之前的代码...

public void Login()
 {
     // 省略输入账户和密码等操作...

    // 如果验证成功,则执行登录操作
     if (verificationSuccess)
     {
         var loginButton = driver.FindElement(By.ClassName("login-btn"));
         loginButton.Click();
         Console.WriteLine("登录成功");
     }
     else
     {
         Console.WriteLine("验证失败");
     }
 }

}

更多内容联系1436423940


本文转载自: https://blog.csdn.net/rrrrroottttttt/article/details/138390753
版权归原作者 rrrrroottttttt 所有, 如有侵权,请联系我们删除。

“使用C#和Selenium实现滑动验证码识别及自动登录的完整教程”的评论:

还没有评论