如何使用Selenium+Tesseract-OCR智能识别验证码爬取网页数据
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章将为大家详细讲解有关如何使用Selenium+Tesseract-OCR智能识别验证码爬取网页数据,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1.项目需求
千家信息网最后更新 2026年11月01日如何使用Selenium+Tesseract-OCR智能识别验证码爬取网页数据1.项目需求描述
2.整体思路
3.功能实现
这篇文章将为大家详细讲解有关如何使用Selenium+Tesseract-OCR智能识别验证码爬取网页数据,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
1.项目需求描述
通过订单号获取某系统内订单的详细数据,不需要账号密码的登录验证,但有图片验证码的动态识别,将获取到的数据存到数据库。
2.整体思路
1.通过Selenium技术,无窗口模式打开浏览器
2.在输入框中动态输入订单号
3.将图片验证码截图保存到本地
4.通过Tesseract-OCR技术去本地识别验证码转化为文字
5.将获取的验证码输入输入框
6.点击查询获取列表数据
3.功能实现
1.下载并安装Google浏览器,安装Google驱动chromedriver.exe,获取安装路径,配置在项目中
2.使用Selenium进行浏览器操作
System.setProperty(浏览器驱动, 浏览器驱动安装位置);ChromeOptions options = new ChromeOptions();options.addArguments("--headless"); // 无窗口模式options.addArguments("--disable-infobars"); // 禁言消息条options.addArguments("--disable-extensions"); // 禁用插件options.addArguments("--disable-gpu"); // 禁用GPUoptions.addArguments("--no-sandbox"); // 禁用沙盒模式options.addArguments("--disable-dev-shm-usage");options.addArguments("--hide-scrollbars"); // 隐藏滚动条WebDriver driver = new ChromeDriver(options);driver.get(爬取网站URL);driver.manage().window().setSize(new Dimension(450, 260)); // 设置游览器打开后调整大小try { // 保存IMG图片到本地 saveImgToLocal(driver); Thread.sleep(2000); // OCR智能识别验证码 String codeByOCR = getCodeByOCR(); if (codeByOCR != null) { try { WebElement input1 = driver.findElement(By.id(TEXTBOX1)); input1.sendKeys(code); WebElement input2 = driver.findElement(By.id(TEXTBOX2)); input2.sendKeys(codeByOCR); // 获取table数据 WebElement addButton = driver.findElement(By.id(SELECT_BUTTON)); addButton.click(); List tRCollection = driver.findElement(By.id(TABLE_ID)).findElements(By.tagName("tr")); for (int t = 1; t < tRCollection.size(); t++) { List tDCollection = tRCollection.get(t).findElements(By.tagName("td")); VipLogisticsMinHangDetailVo minHangDetailVo = new VipLogisticsMinHangDetailVo(); minHangDetailVo.setLogistics_number(code); for (int i = 0; i < tDCollection.size(); i++) { String text = tDCollection.get(i).getText(); switch (i) { case 0: minHangDetailVo.setTime(text); case 1: minHangDetailVo.setOutlet(text); case 2: minHangDetailVo.setOrganization(text); case 3: minHangDetailVo.setEvent(text); case 4: minHangDetailVo.setDetail(text); } } list.add(minHangDetailVo); } log.info("验证码识别成功!"); } catch (Exception e) { if (e.toString().contains("错误提示:验证码错误或已过期!")) { log.error("验证码识别错误!" + e.toString()); } else if (e.toString().contains("错误提示:请输入验证码!")) { log.error("未输入验证码!:" + e.toString()); } else { log.error("其他异常:" + e.toString()); } } } driver.quit();} catch (Exception e) { e.printStackTrace();} 3.将图片验证码截图保存到本地(截屏法)
private void saveImgToLocal(WebDriver driver) { WebElement element = driver.findElement(By.id(img元素ID)); //创建全屏截图 WrapsDriver wrapsDriver = (WrapsDriver) element; File screen = ((TakesScreenshot) wrapsDriver.getWrappedDriver()).getScreenshotAs(OutputType.FILE); try { BufferedImage image = ImageIO.read(screen); //创建一个矩形使用上面的高度,和宽度 Point p = element.getLocation(); //元素坐标 BufferedImage img = image.getSubimage(p.getX(), p.getY(), element.getSize().getWidth(), element.getSize().getHeight()); ImageIO.write(img, "png", screen); FileUtils.copyFile(screen, new File(保存本地地址 + "imgname.png")); } catch (IOException e) { e.printStackTrace(); }}4.将图片验证码保存到本地(鼠标法)
private static void saveImgToLocal1(WebDriver driver) { Actions action = new Actions(driver); action.contextClick(driver.findElement(By.id(img元素ID))).build().perform(); try { Robot robot = new Robot(); Thread.sleep(1000); robot.keyPress(KeyEvent.VK_DOWN); Thread.sleep(1000); robot.keyPress(KeyEvent.VK_DOWN); Thread.sleep(1000); robot.keyPress(KeyEvent.VK_ENTER); Thread.sleep(1000); //释放向下键,不然在此之前的条目将起作用 robot.keyRelease(KeyEvent.VK_DOWN); Thread.sleep(1000); //运行保存 Runtime.getRuntime().exec(SAVE_IMG_EXE); Thread.sleep(10000); } catch (Exception e) { e.printStackTrace(); }}5.对本地验证码进行OCR识别
private String getCodeByOCR() { String result = null; File file = new File(本地图片地址); if (!file.exists()) { if (systemFalg != 1) { file.setWritable(true, false); } file.mkdirs(); } File imageFile = new File(本地图片地址 + "imgname.png"); if (imageFile.exists()) { ITesseract instance = new Tesseract(); instance.setDatapath(tessdata存放地址); try { String doOCR = instance.doOCR(imageFile); result = replaceBlank(doOCR); log.info("解析的验证码为:{}", result != null ? result : "为空!"); } catch (Exception e) { e.printStackTrace(); log.error("解析验证码异常!"); } } else { log.error("解析验证码的文件不存在!"); } return result;}关于"如何使用Selenium+Tesseract-OCR智能识别验证码爬取网页数据"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
验证
数据
图片
输入
浏览器
浏览
地址
错误
智能
元素
截图
模式
篇文章
订单
驱动
网页
动态
技术
更多
订单号
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
广东猪兼强互联网科技有限公司
国智互联网科技
科技赋能下的互联网金融
紫鲸互联网科技
极限挑战互联网科技
壹账通互联网科技
智慧科技互联网
壕鑫互联网络科技
互联网科技logo
互联网 视角下的科技创新
互联网科技论坛
科技类的互联网平台
阿里巴巴算科技企业还是互联网
武汉健翔互联网络科技有限公司
互联网方面的科技前沿
深圳无忧互联网科技
绵阳真晨互联网科技有限公司
科技互联网专业工作会议发言稿
互联网对科技影响
广东猫王互联网科技有限公司电话
互联网科技行业发展
涨乐互联网科技
为想互联网科技
艾特科技互联网
互联网科技论坛
国外互联网科技网站
小米互联网科技园设置
天津腾达互联网科技有限公司
允成互联网科技有限公司融资
怎样加入科技互联网