Перейти к содержимому

Фотография

Selenium python не снимает скриншоты элементов


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 6

#1 krohotin

krohotin

    Новый участник

  • Members
  • Pip
  • 9 сообщений
  • ФИО:Андрей Игоревич


Отправлено 17 ноября 2015 - 08:14

Простейший код:

 

from selenium import webdriver
p = webdriver.Firefox()
p.get("http://localhost:8000")
h = p.find_elements_by_css_selector("html body ul li a")[1]
h.screenshot("file.png")

 

(http://localhost:8000 - маленький локальный сервер на Питоне, в 4 строчки, чисто для тренировки и тестирования наработок всяких )

Все успешно проходит до h.screenshot("file.png"), дальше вываливается ошибка:

 

Traceback (most recent call last):
  File "C:/Users/KKShilov/PycharmProjects/test2/_helpmetods.py", line 46, in <module>
    h.screenshot("file.png")
  File "C:\Python34\lib\site-packages\selenium\webdriver\remote\webelement.py", line 404, in screenshot
    png = self.screenshot_as_png
  File "C:\Python34\lib\site-packages\selenium\webdriver\remote\webelement.py", line 391, in screenshot_as_png
    return base64.b64decode(self.screenshot_as_base64.encode('ascii'))
  File "C:\Python34\lib\site-packages\selenium\webdriver\remote\webelement.py", line 381, in screenshot_as_base64
    return self._execute(Command.ELEMENT_SCREENSHOT)['value']
  File "C:\Python34\lib\site-packages\selenium\webdriver\remote\webelement.py", line 453, in _execute
    return self._parent.execute(command, params)
  File "C:\Python34\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 201, in execute
    self.error_handler.check_response(response)
  File "C:\Python34\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 102, in check_response
    value = json.loads(value_json)
  File "C:\Python34\lib\json\__init__.py", line 318, in loads
    return _default_decoder.decode(s)
  File "C:\Python34\lib\json\decoder.py", line 343, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "C:\Python34\lib\json\decoder.py", line 361, in raw_decode
    raise ValueError(errmsg("Expecting value", s, err.value)) from None
ValueError: Expecting value: line 1 column 1 (char 0)

 

В чем может быть причина и как это исправить/заставить работать?


  • 0

#2 BabyRoot

BabyRoot

    Специалист

  • Members
  • PipPipPipPipPip
  • 833 сообщений


Отправлено 17 ноября 2015 - 08:38

Элемент точно находится?

Походу, для метода screenshot нужен ещё параметр, почитайте документацию.


  • 0

#3 Lzk

Lzk

    Специалист

  • Members
  • PipPipPipPipPip
  • 504 сообщений
  • ФИО:Олег
  • Город:Мск

Отправлено 17 ноября 2015 - 08:43

p.get_screenshot_as_file("file.png")

или ты хочешь именно скриншот элемента сделать ?


  • 0

#4 Saga

Saga

    Новый участник

  • Members
  • Pip
  • 37 сообщений
  • ФИО:Maryna Kolesnik
  • Город:Киев


Отправлено 17 ноября 2015 - 16:05

Как вариант, сделать скриншот всей страницы, потом найти расположение элемента на ней, вырезать нужную область и сохранить.  Понадобится библиотека PIL.

from selenium import webdriver
from PIL import Image


driver = webdriver.Firefox()
url = 'http://stackoverflow.com/'
filename = 'element_screenshot.png'

driver.get(url)
element = driver.find_element_by_id('hlogo')

location = element.location
size = element.size
driver.save_screenshot(filename)

_image = Image.open(filename)
left = location['x']
top = location['y']
right = location['x'] + size['width']
bottom = location['y'] + size['height']

image = _image.crop((left, top, right, bottom))
image.save(filename)

driver.quit()
 

  • 0

#5 krohotin

krohotin

    Новый участник

  • Members
  • Pip
  • 9 сообщений
  • ФИО:Андрей Игоревич


Отправлено 17 ноября 2015 - 16:33

Именно скриншот элемента. Раз у объекта WebElement-а есть метод снятия скриншота (даже 3 - в base64, в png и в просто в файл), логично предположить что должен делаться снимок именно элемента.

Способ через скриншот страницы и вырезать PIL-ом нужный кусок рассматривал и реализовывал, но хотелось бы  также разобраться в оригинальном, так сказать исходном способе


  • 0

#6 pugovi4ka

pugovi4ka

    Новый участник

  • Members
  • Pip
  • 8 сообщений

Отправлено 17 ноября 2015 - 19:50

Для  Firefox driver еще не реализована возможность делать скриншот элемента, пруф https://github.com/S...nium/issues/912.


  • 0

#7 krohotin

krohotin

    Новый участник

  • Members
  • Pip
  • 9 сообщений
  • ФИО:Андрей Игоревич


Отправлено 17 ноября 2015 - 21:13

Пичалька((( Значит таки буду PIL-ом делать


  • 0


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных