сохранить изображение с селеном и Firefox - PullRequest
9 голосов
/ 03 мая 2009

Я пытаюсь сохранить изображение с веб-сайта, используя сервер селен и клиент Python. я знаю URL изображения, но не могу найти код для его сохранения, когда это сам документ или он встроен в текущий сеанс браузера.

Обходной путь, который я нашел до сих пор, - сохранить скриншот страницы (для этого есть 2 метода селена), но я хочу оригинальное изображение.

Я не возражаю возиться с щелкающими опциями меню и т. Д., Но не могу найти, как.

спасибо

Ответы [ 5 ]

5 голосов
/ 14 января 2011

Я нашел код, который помещает изображение в холст, а затем преобразует его в данные - которые затем могут быть, например, закодированы в base64. Я думал о том, чтобы вызвать это с помощью команды eval в selenium, однако в моем тестировании toDataURL выдает ошибку безопасности 1000. Похоже, что это очень близко к решению, если бы не эта ошибка.

var data, canvas, ctx;
var img = new Image();
img = document.getElementById("yourimageID");
canvas = document.createElement('canvas');
canvas.width = img.width;
canvas.height = img.height;
ctx = canvas.getContext("2d");
ctx.drawImage(img, 0, 0);  // everything works up to here
data = canvas.toDataURL();  // this fails ***
var base64Img = data.replace(/^data:image\/(png|jpg);base64,/, "");

Проводя некоторые исследования, я обнаружил ссылки на то, что нельзя использовать toDataURL, когда изображение находится в другом домене. Однако я даже попробовал этот код, сохранив страницу, удалив все, кроме самого изображения и этого сценария.

Например (index.html):

<html><head></head><body>
<img src="local/hard/disk/img.jpg" id="yourimageID">
<script>
// script from above
</script>
</body></html>

img.jpg и index.html хранятся локально, открывая страницу в Firefox локально, все еще получая ошибку безопасности 1000!

3 голосов
/ 06 мая 2009

Чтобы сделать это так, как вы хотите (чтобы фактически захватить содержимое, отправленное в браузер), вам нужно изменить прокси-код Selenium RC (см. ProxyHandler.java) и сохранить файлы локально на диске параллельно с отправкой. ответ обратно в браузер.

2 голосов
/ 23 апреля 2010

Я пытался выполнить ту же задачу, но изображения, которые я хотел получить, были размером с мой монитор (обои) - поэтому обходной путь при захвате скриншота мне не помог. Я нашел способ сделать это ...

У меня настроен селен, чтобы перейти на нужную мне страницу (которая вызывает все сессионные вкусности) Затем я использовал программу под названием «Макрос рабочей области» для циклического выполнения задач селена.

Хватай отсюда http://www.tethyssolutions.com/product.htm - у них есть пробная версия, которая, я думаю, работает для 30 прогонов или что-то в этом роде.

Итак, вот прогрессия:

  • Запустить Firefox
  • открыть селен и нагрузочный тестовый кейс
  • запустите его, но быстро сделайте паузу.
  • запись макроса, который нажимает «шаг» на селене, затем переходит в окно Firefox и нажимает файл-> сохранить страницу как, сохраняет, затем останавливает запись
  • запустить макрос х раз ...
  • прибыль ??

Приветствия

0 голосов
/ 03 мая 2009

Я не использовал селен, но если вы знаете URL-адрес изображения, почему бы просто не сделать:

from urllib import urlretrieve

urlretrieve(url, filename)

, который сохранит URL в имя файла. больше информации здесь

0 голосов
/ 03 мая 2009

Как насчет перехода к URL-адресу изображения, а затем сделать скриншот страницы? Firefox отображает изображение в полноэкранном режиме. Надеюсь, это поможет ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...