используя класс роботов, как сохранить изображение? - PullRequest
0 голосов
/ 11 мая 2019

Я пытаюсь использовать класс робота для сохранения изображения ... но он не работает должным образом.

    WebDriver driver = new FirefoxDriver();
    driver.manage().window().maximize();
    driver.get("http://agiletesters.com.br");
     Robot rb =new Robot();
     rb.mouseMove(270, 160);
     rb.mousePress(InputEvent.BUTTON3_DOWN_MASK);
     rb.mouseRelease(InputEvent.BUTTON3_DOWN_MASK);

     rb.keyPress(KeyEvent.VK_DOWN);
     Thread.sleep(11000);
     rb.keyRelease(KeyEvent.VK_DOWN);
     rb.keyPress(KeyEvent.VK_ENTER);
     rb.keyRelease(KeyEvent.VK_ENTER);

при этом щелчке правой кнопкой мыши работает, но не выбрана опция «Сохранить изображение как ...».

Я пробовал это, но изображение загрузки не показывает: -

try {
         driver = new FirefoxDriver();
         driver.get("http://agiletesters.com.br");
         System.setProperty("http.agent", "Firefox");
         WebElement logo = driver.findElement(By.xpath("//*[@id=\"header-menu\"]/div/div[1]/a/img"));
         String logoSRC = logo.getAttribute("src");

         URL imageURL = new URL(logoSRC);
         BufferedImage saveImage = ImageIO.read(imageURL.openStream());

         ImageIO.write(saveImage, "png", new File("logo-forum.png"));

         } catch (Exception e) {
            e.printStackTrace();
         } finally {
            driver.close();
         }

1 Ответ

0 голосов
/ 12 мая 2019

Я ожидаю, что ваш BufferedImage saveImage = ImageIO.read(imageURL.openStream()); не работает из-за отсутствия Заголовок cookie

Правильный способ загрузки файла:

  1. Получение текущего набора файлов cookie из экземпляра браузера Firefox с использованием функции driver.managet().getCookies()
  2. Используйте базовую библиотеку OKHTTP, чтобы выполнить запрос GET для логотипа и сохранить файл.

Пример кода:

OkHttpClient client = new OkHttpClient().newBuilder().build();

Request request = new Request.Builder().url(logoSRC).addHeader("Cookie", cookies.toString()).build();
Response response = client.newCall(request).execute();

File downloadedLogo = new File("logo-forum.png");
BufferedSink sink = Okio.buffer(Okio.sink(downloadedLogo));
sink.writeAll(Objects.requireNonNull(response.body()).source());
sink.close();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...