Чтение PDF из URL с использованием Selenium-WebDriver и PDF-Box - PullRequest
1 голос
/ 03 мая 2020

Я пытаюсь прочитать текст из PDF-файла с помощью Selenium-web driver и PDFbox API. Если возможно, я не хочу скачивать файл, а только читаю PDF из Интернета, получая только текст PDF в строку. Код, который я использую ниже, не может работать, хотя:

Я нашел примеры кода для загрузки PDF и сравнения его с использованием загруженного файла, но ни один функциональный пример, извлекающий текст PDF из URL.

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

import javax.swing.JDialog;
import javax.swing.JOptionPane;
import javax.swing.Timer;

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.text.PDFTextStripper;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

public class PDFextract {


        public static void main(String[] args) throws Exception {
            // TODO Auto-generated method stub
            System.setProperty("webdriver.chrome.driver", "C:\\chromedriver.exe");
            WebDriver driver=new ChromeDriver();
            driver.manage().window().maximize();
            driver.get("THE URL OF SITE I CANT SHARE"); //THE URL OF SITE I CAN'T SHARE
            System.out.println(driver.getTitle());          
            List<WebElement> list = driver.findElements(By.xpath("//a[@title='Click to open file']"));
            int rows = list.size();
            for (int i= 1; i <= rows; i++) {
            }
            List<WebElement> links = driver.findElements(By.xpath("//a[@title='Click to open file']"));
        String fLinks = "";
        for (WebElement link : links) {
             fLinks = fLink + link.getAttribute("href");
        }
        fLinks = fLinks.trim();
        System.out.println(fLinks); // till here the code works fine.. i get a valid url link

        // the code bellow doesn't work
        URL url=new URL(fLinks);
        HttpURLConnection connection=(HttpURLConnection)url.openConnection();
        InputStream is=connection.getInputStream();
        PDDocument pdd=PDDocument.load(is);
        PDFTextStripper stripper=new PDFTextStripper();
        String text=stripper.getText(pdd);
        pdd.close();
        is.close();
        System.out.println(text);

Я получаю ошибку:

Exception in thread "main" java.io.IOException: Server returned HTTP response code: 500 for URL: ***AS TOLD ABOVE, I CANT SHARE THE URL***
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
at 

sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(Unknown Source)
    at PDFextract.main(PDFextract.java:106)

Отредактировано 07.05.2020: @TilmanHausherr, я провел больше исследований, это помогло в Первая часть, как читать PDF по ссылке: Selenium Учебное пособие: чтение содержимого PDF с помощью Selenium WebDriver

Этот метод работает:

String pdfContent = readPDFContent(driver.getCurrentUrl());

    public String readPDFContent(String appUrl) throws Exception {
    URL url = new URL(appUrl);
    InputStream is = url.openStream();
    BufferedInputStream fileToParse = new BufferedInputStream(is);
    PDDocument document = null;
    String output = null;
    try {
        document = PDDocument.load(fileToParse);
        output = new PDFTextStripper().getText(document);
        System.out.println(output);
    } finally {
        if (document != null) {
            document.close();
        }
        fileToParse.close();
        is.close();
    }
    return output;
}

Кажется, моя проблема это сама ссылка, элемент HTML, это '', в моем случае также есть 'stream-URL':

<embed id="plugin" type="application/x-google-chrome-pdf" 

src="https://"SITE 
I CAN'T TELL"/file.do? _tr=4d51599fead209bc4ef42c6e5c4839c9bebc2fc46addb11a" 
stream-URL="chrome-extension://mhjfbmdgcfjojefgiehjai/6958a80-4342-43fc-
838a-1dbd07fa2fc1" headers="accept-ranges: bytes
content-disposition: inline;filename=&quot;online.pdf&quot;
content-length: 71488
content-security-policy: frame-ancestors 'self' https://*"SITE I CAN'T TELL" 
https://*"DOMAIN I CAN'T TELL".net
content-type: application/pdf

Найдено это: 1. Загрузить файл У которого stream-url есть расширение chrome в теге embed с использованием селена 2. Обработка содержимого тега Embed в селене python

Но я все еще этого не сделал удается прочитать PDF с PDFbox, потому что элемент его , и мне может понадобиться доступ к рассверлить-адрес.

...