当前位置: 首页 > 知识库问答 >
问题:

用Selenium WebDriver和Java实现从图像中读取文本(captcha)

胥玮
2023-03-14

我有注册网页,但在最后验证码显示…

我无法从图像中读取文本。我将提到代码和输出…

@Test
public void loginTest() throws InterruptedException {
    System.out.println("Testing");
    driver.get("https://customer.onlinelic.in/ForgotPwd.htm");

    WebElement element = driver.findElement(By.xpath("//*[@id='forgotPassword']/table/tbody/tr[5]/td[3]/img"));
    System.out.println(" get the instance ");

    String elementTest = element.getAttribute("src");
    System.out.println("Element : " + elementTest);
}

输出:错误

共有1个答案

归翔
2023-03-14

为了说明前面的答案,CAPTCHA是“完全自动化的公共图灵测试来区分计算机和人类”的首字母缩写。所以,如果“机器”能解决它,那就不是真的做它的工作了。

为了解决它,您可以做一些事情--使用外部服务的API,如http://www.deathbycaptcha.com。您实现他们的API,将验证码传递给他们,然后返回文本。我观察到的平均解决时间大约是10-15秒。

实现示例(取自此处)

import com.DeathByCaptcha.AccessDeniedException;
import com.DeathByCaptcha.Captcha;
import com.DeathByCaptcha.Client;
import com.DeathByCaptcha.SocketClient;
import com.DeathByCaptcha.HttpClient;

/* Put your DeathByCaptcha account username and password here.
   Use HttpClient for HTTP API. */
Client client = (Client)new SocketClient(username, password);
try {
    double balance = client.getBalance();

    /* Put your CAPTCHA file name, or file object, or arbitrary input stream,
       or an array of bytes, and optional solving timeout (in seconds) here: */
    Captcha captcha = client.decode(captchaFileName, timeout);
    if (null != captcha) {
        /* The CAPTCHA was solved; captcha.id property holds its numeric ID,
           and captcha.text holds its text. */
        System.out.println("CAPTCHA " + captcha.id + " solved: " + captcha.text);

        if (/* check if the CAPTCHA was incorrectly solved */) {
            client.report(captcha);
        }
    }
} catch (AccessDeniedException e) {
    /* Access to DBC API denied, check your credentials and/or balance */
}
 类似资料:
  • 问题内容: 我可以用来从图像(JPEG,PNG)文件中提取文本的最佳开源Java库是什么? 问题答案: 有GOCR和tesseract,但我不确定它们的当前版本如何堆叠-尝试同时尝试您需要处理的一些典型输入并通过此试验进行选择吗?

  • 问题内容: 佳能/尼康/其他相机将传感器的原始输出保存为某些专有格式(.CR2等)。是否有旨在读取它们并将其转换为可管理的BufferedImages的Java库? 在这里,我不需要关心完全可定制的转换(类似于ufraw或imagemagick),而是“可以正常工作”以渲染此类图像的简单预览的简单方法。 问题答案: 我去过你那里,我对你有感觉。最好的选择是使用基于Adobe或dcraw的程序自动创

  • 如果我打开浏览器并复制页面的所有文本和图像(Ctrl+a),然后粘贴到Microsoft Word(例如)中,文本和图像都将被粘贴。 我正在尝试编写Java代码,从剪贴板内容中提取文本和所有图像,以便在程序中使用文本/图像,例如稍后在GUI中显示图像,并提供支持文本。 现在,我的代码成功地从包含文本和图像的剪贴板内容中提取文本,但是图像部分失败了。图像代码仅在剪贴板内容包含单个图像(如按下打印屏幕

  • 这是我的选项2选项 但它给出了一个错误的说法 java.io.FileNotFoundException:C:\users\businesssupport\documents\netBeansProjects\InvoiceGenerator\resources\hemaslogo.jpg(系统找不到指定的路径)

  • 假设我的用户去了他们办公室的扫描仪。扫描仪能够生成扫描文档的PDF。这基本上就是我拥有的文件类型。 我想做的是从这个PDF中提取文本。这不是“第一代”pdf,因为文本没有嵌入到pdf中。文本嵌入在PDF中的图像中。 PDFBox的iText中是否有允许检索此数据的功能?如果可能的话,我正在尝试避免对图像进行OCR。我希望IText或PDFBox中有一些内置的东西可以做到这一点。 请注意,我不是在谈

  • 问题内容: 是否有一个Java库可以读取很大图像(例如JPEG)文件(> 10,000 x 10,000像素)的区域,而无需将整个图像保留在内存中。 或者,哪个Java库能够以最小的开销处理非常大的图像文件。 问题答案: 标准ImageIO允许您读取(大)图像区域,而无需先将整个图像读取到内存中。