Попытка загрузить изображение с tumblr с помощью java selenium

Я пытаюсь загрузить изображения из tumblr, используя java selenium. Я извлек URL-адрес изображения из src и попытался загрузить изображения с URL-адреса. Но изображения сохранились не то, что я ожидал. Они в неподдерживаемых форматах и ​​меньше по размеру. Как я могу это исправить? Пожалуйста помоги.

Это мой код:

public static void main(String[] args) throws InterruptedException, AWTException, IOException {

    WebDriver driver = new ChromeDriver();
    driver.manage().window().maximize();
    driver.get("https://artist-childe-hassam.tumblr.com/");
    Thread.sleep(5000); 
    Robot robot = new Robot();
    robot.keyPress(KeyEvent.VK_END);
    robot.keyRelease(KeyEvent.VK_END);

    List<WebElement> list = driver.findElements(By.xpath("//img[@alt]"));
    int count;
    count = 1;
    for (WebElement element : list) {

        String srcs = element.getAttribute("src");
        String attribute = element.getAttribute("alt");
        System.out.println("title: " + attribute);
        System.out.println(" ");
        System.out.println("link " + srcs);
    
        URL url = new URL(srcs);
        InputStream in = new BufferedInputStream(url.openStream());
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        byte[] buf = new byte[1024];
        int n = 0;
        while (-1!=(n=in.read(buf)))
        {
           out.write(buf, 0, n);
        }
        out.close();
        in.close();
        byte[] response = out.toByteArray();
        
        FileOutputStream fos = new FileOutputStream("path"+count+".jpg");
        count++;
        fos.write(response);
        fos.close();
        }

    }
    

}
Основы программирования на Java
Основы программирования на Java
Java - это высокоуровневый объектно-ориентированный язык программирования, основанный на классах.
Концепции JavaScript, которые вы должны знать как JS программист!
Концепции JavaScript, которые вы должны знать как JS программист!
JavaScript (Js) - это язык программирования, объединяющий HTML и CSS с одной из основных технологий Всемирной паутины. Более 97% веб-сайтов используют...
0
0
18
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

У меня нет идеи о BufferedInputStream для загрузки изображения с URL-адреса. Вместо этого я использовал curl для загрузки с URL-адреса. Я изменил ваш код, и он отлично работает для меня.

public static void main(String[] args) throws InterruptedException, AWTException, IOException {
        WebDriverManager.chromedriver().setup();
        WebDriver driver = new ChromeDriver();
        driver.manage().window().maximize();
        driver.get("https://artist-childe-hassam.tumblr.com/");
        Thread.sleep(5000);
        Robot robot = new Robot();
        robot.keyPress(KeyEvent.VK_END);
        robot.keyRelease(KeyEvent.VK_END);

        List<WebElement> list = driver.findElements(By.xpath("//img[@alt]"));
        int count;
        count = 1;
        for (WebElement element : list) {
            String srcs = element.getAttribute("src");
            String attribute = element.getAttribute("alt");
            System.out.println("title: " + attribute);
            System.out.println(" ");
            System.out.println("link " + srcs);

            downloadFromUrl(srcs,"Path" + count+".jpg",Duration.ofSeconds(20));
            count++;
        }

    }

    public static boolean downloadFromUrl(String url, String fileNameWithPath, Duration timeoutDuration) {
        try {
            if(timeoutDuration == null) {
                timeoutDuration = Duration.ofMinutes(5);
            }
            String curlStr = "curl " + url + " --output " + fileNameWithPath;
            Process process = Runtime.getRuntime().exec(curlStr);
            long totalSeconds = 0;
            System.out.println("Downloading file to " + fileNameWithPath + " ...");
            while(process.isAlive()) {
                Thread.sleep(1000);
                totalSeconds++;
                if(totalSeconds > timeoutDuration.getSeconds()) {
                    throw new Exception("Unable to download file even after 5 mins of wait");
                }
            }
            System.out.println(fileNameWithPath + " got downloaded in seconds - " + totalSeconds);
            return true;
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return false;
    }

Мои загруженные изображения: enter image description here

Другие вопросы по теме