Правильный способ загрузки изображений с использованием селена - PullRequest
0 голосов
/ 11 мая 2019

Я прочитал несколько статей, в которых упоминалось, как получить изображение по selenium. Например:

    from selenium import webdriver
    import requests
    driver=webdriver.Firefox()
    driver.get("http/https://your website")
    img=driver.find_element_by_xpath("xpath leading to your element")#locating element
    src=img.get_attribute('src')#fetch the location of image
    img=requests.get(src)#fetch image
    with open('image.jpg','wb') as writer:#open for writing in binary mode
        writer.write(img.content)#write the image

Но есть ли у этих методов риск увеличения пропускной способности?

Есть ли способ, как я щелкаю правой кнопкой мыши по изображению и save as на локальном ПК?

Я пытался использовать javascript для этого:

var canvas = document.createElement('canvas');
var context = canvas.getContext('2d');
var img = document.getElementById('someImageId');
context.drawImage(img, 0, 0 );
var theData = context.getImageData(0, 0, img.width, img.height);

и встретить cross-origin проблему

Uncaught DOMException: Failed to execute 'getImageData' on 'CanvasRenderingContext2D': The canvas has been tainted by cross-origin data.
    at <anonymous>:5:23

Это обходной путь - сделать еще один запрос, как то, что я не хочу в первой строке.

Есть предложения?

1 Ответ

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

Чтобы избежать увеличения площади сети, вы можете рассмотреть следующий подход:

  1. Сделайте скриншот всей страницы, используя, например, get_screenshot_as_png функцию
  2. Получить требуемый элемент location и size
  3. Извлечение "интересной" части страницы путем вырезания чего-либо еще, кроме необходимых координат элемента
  4. Сохранить полученный файл

Пример кода, в котором логотип с сайта https://experitest.com/ сохраняется в logo.png файле:

from selenium import webdriver
from PIL import Image
from io import BytesIO

options = webdriver.ChromeOptions()
options.add_argument("--kiosk")

driver = webdriver.Chrome(chrome_options=options)
driver.get('chrome://settings/')
driver.execute_script('chrome.settingsPrivate.setDefaultZoom(1.0);')
driver.get("https://experitest.com/")
element = driver.find_element_by_xpath("//a[@class='navbar-brand']/img")
location = element.location
size = element.size
png = driver.get_screenshot_as_png()
im = Image.open(BytesIO(png))
left = location['x']
top = location['y']
right = location['x'] + size['width']
bottom = location['y'] + size['height']
im = im.crop((left, top, right, bottom))
im.save('logo.png')
driver.quit()

Предположения:

  • У вас установлена ​​ Подушка библиотека установлена ​​(это должно быть так же просто, как команда pip install pillow)
  • Ваша ОС Уровень шкалы DPI установлен на 100%
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...