激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Selenium+Tesseract-OCR智能識別驗證碼爬取網頁數據的實例

Selenium+Tesseract-OCR智能識別驗證碼爬取網頁數據的實例

2022-01-20 01:02大數據智工廠 Java教程

本文主要介紹了Selenium+Tesseract-OCR智能識別驗證碼爬取網頁數據,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

1.項目需求描述

通過訂單號獲取某系統內訂單的詳細數據,不需要賬號密碼的登錄驗證,但有圖片驗證碼的動態識別,將獲取到的數據存到數據庫。

2.整體思路

  1.通過Selenium技術,無窗口模式打開瀏覽器

  2.在輸入框中動態輸入訂單號

  3.將圖片驗證碼截圖保存到本地

  4.通過Tesseract-OCR技術去本地識別驗證碼轉化為文字

  5.將獲取的驗證碼輸入輸入框

  6.點擊查詢獲取列表數據

3.功能實現

1.下載并安裝Google瀏覽器,安裝Google驅動chromedriver.exe,獲取安裝路徑,配置在項目中

2.使用Selenium進行瀏覽器操作

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
System.setProperty(瀏覽器驅動, 瀏覽器驅動安裝位置);
ChromeOptions options = new ChromeOptions();
options.addArguments("--headless");                            // 無窗口模式
options.addArguments("--disable-infobars");                    // 禁言消息條
options.addArguments("--disable-extensions");                  // 禁用插件
options.addArguments("--disable-gpu");                         // 禁用GPU
options.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<WebElement> tRCollection = driver.findElement(By.id(TABLE_ID)).findElements(By.tagName("tr"));
            for (int t = 1; t < tRCollection.size(); t++) {
                List<WebElement> 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.將圖片驗證碼截圖保存到本地(截屏法)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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.將圖片驗證碼保存到本地(鼠標法)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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識別

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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智能識別驗證碼爬取網頁數據的實例的文章就介紹到這了,更多相關Selenium+Tesseract-OCR智能識別驗證碼爬取 內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://www.cnblogs.com/zhaohadoopone/p/15338813.html

延伸 · 閱讀

精彩推薦
  • Java教程xml與Java對象的轉換詳解

    xml與Java對象的轉換詳解

    這篇文章主要介紹了xml與Java對象的轉換詳解的相關資料,需要的朋友可以參考下...

    Java教程網2942020-09-17
  • Java教程Java實現搶紅包功能

    Java實現搶紅包功能

    這篇文章主要為大家詳細介紹了Java實現搶紅包功能,采用多線程模擬多人同時搶紅包,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙...

    littleschemer13532021-05-16
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程Java8中Stream使用的一個注意事項

    Java8中Stream使用的一個注意事項

    最近在工作中發現了對于集合操作轉換的神器,java8新特性 stream,但在使用中遇到了一個非常重要的注意點,所以這篇文章主要給大家介紹了關于Java8中S...

    阿杜7482021-02-04
  • Java教程升級IDEA后Lombok不能使用的解決方法

    升級IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級,尋思已經有好久沒有升過級了。升級完畢重啟之后,突然發現好多錯誤,本文就來介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程20個非常實用的Java程序代碼片段

    20個非常實用的Java程序代碼片段

    這篇文章主要為大家分享了20個非常實用的Java程序片段,對java開發項目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
  • Java教程Java BufferWriter寫文件寫不進去或缺失數據的解決

    Java BufferWriter寫文件寫不進去或缺失數據的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進去或缺失數據的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關于小米推送Java代碼,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧...

    富貴穩中求8032021-07-12
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25
主站蜘蛛池模板: 中文字幕精品在线播放 | 免费一级欧美大片视频 | 中国产一级毛片 | 成年人在线视频免费 | 欧美一级做性受免费大片免费 | 成人免费久久 | 4480午夜| 欧美一级片在线 | 天天看天天摸天天操 | 日本欧美中文字幕 | 国内精品久久久久久久久久久久 | 福利免费观看 | 亚洲精中文字幕二区三区 | 男女羞羞视频在线免费观看 | 九九热在线视频观看 | 国产91大片 | 免费毛片在线 | 欧美精品色精品一区二区三区 | 国产精品一区二区在线 | 欧美一级黄色片免费观看 | 成人国产精品免费 | 中文字幕国产日韩 | 福利一区二区三区视频在线观看 | 国产精品久久久久久久久久久久午夜 | 三级xxxx | 一级毛片手机在线观看 | 国产午夜精品视频免费不卡69堂 | av电影免费在线看 | 逼片| 黄污污网站| 91热久久免费频精品黑人99 | 成人毛片免费在线 | 国产精品免费一区二区三区在线观看 | 国产在线精品一区二区三区不卡 | 亚洲成人精品一区二区 | 成年性羞羞视频免费观看无限 | 免费观看一级黄色片 | 免费a级片在线观看 | 快播av在线 | 久草免费资源视频 | 亚洲综合一区在线观看 |