如何使用Selenium Webdriver自动化验证码?

6

我正在为一个登录页面编写脚本。但是我有一个验证码需要处理。


你不能绕过验证码,这就是它存在的意义!! - Pankaj Kumar Katiyar
3个回答

8

Selenium无法处理验证码。

网站使用验证码的原因是为了防止任何机器人自动化他们的网站。

您可以要求您的开发人员为您提供特殊环境,以绕过验证码功能或在DOM上公开验证码值,以便您可以在运行时获取验证码值。

有一些第三方库声称他们也可以自动化验证码,但我从未尝试过并且听说它们也不高效。

一些参考资料:- 如何使用Selenium WebDriver和Java读取图像(验证码)中的文本

http://www.mythoughts.co.in/2012/11/automatingbreaking-captcha-using.html#.Vt5psdx94x8


1

大多数验证码解决方案都是付费的。一些示例包括:

  • DeathByCaptcha
  • 2Captcha
  • AntiCaptcha
  • Decaptcher

tesseract库可以解决一些简单的验证码示例。


1
这里,试试我的方法(用c语言):
public void GenerateSnapshot(string filePath)
{
    IWebDriver driver = new ChromeDriver();
    driver.Manage().Window.Maximize(); driver.Navigate().GoToUrl(“your url here”);
    var remElement = driver.FindElement(By.Id(“your Captcha Id here”));
    Point location = remElement.Location;
    var screenshot = (driver as ChromeDriver).GetScreenshot();
    using(MemoryStream stream = new MemoryStream(screenshot.AsByteArray))
    {
        using(Bitmap bitmap = new Bitmap(stream))
        {
            RectangleF part = new RectangleF(location.X, location.Y, remElement.Size.Width, remElement.Size.Height);
            using(Bitmap bn = bitmap.Clone(part, bitmap.PixelFormat))
            {
                bn.Save(filePath + “CaptchImage.png”, System.Drawing.Imaging.ImageFormat.Png);
            }
        }
    }

    //reading text from images
    using(var engine = new TesseractEngine(“tessdata path here”, “eng”, EngineMode.Default))
    {

        Page ocrPage = engine.Process(Pix.LoadFromFile(filePath + “CaptchImage.png”), PageSegMode.AutoOnly);
        var captchatext = ocrPage.GetText();
    }
}

来源:https://thedotnetlight.wordpress.com/2018/02/16/read-captcha-image-in-selenium-c/


在Stack Overflow上,仅提供链接的答案通常会受到反对。随着时间的推移,链接可能会失效或无法访问,这意味着您的答案将来对用户没有用处。最好的做法是在实际帖子中提供您答案的一般细节,并引用您的链接作为参考。 - Athul Nath

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接