Как я могу реализовать преобразователь содержания в Firefox для всех элементов страницы?

Python - Скриншот элемента:

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

location

Веб-элемент имеет свою собственную позицию на странице и, как правило, он измеряется в пикселях x и y и известен как (x, y) координаты элемента. И объект местоположения содержит два значения.

  1. location ['x'] - возвращает координату x для элемента
  2. location ['y'] - возвращает координату y для элемента

размер

Подобно местоположению, каждый WebElement имеет ширину и высоту; Доступен как размер объекта.

  1. size ['width'] - возвращает 'width' элемента
  2. size ['height'] - возвращает 'height' элемента

Using (x, y) координаты и ширина, значения высоты мы можем обрезать изображение и сохранить его в файле.

from selenium import webdriver
from PIL import Image

driver = webdriver.Firefox(executable_path='[Browser Driver Path]')
driver.get('https://www.google.co.in')

element = driver.find_element_by_xpath("//div[@id='hplogo']")

location = element.location
size = element.size

driver.save_screenshot("/data/image.png")

x = location['x']
y = location['y']
width = location['x']+size['width']
height = location['y']+size['height']

im = Image.open('/data/WorkArea/image.png')
im = im.crop((int(x), int(y), int(width), int(height)))
im.save('/data/image.png')

Примечание: Взято из http://allselenium.info/capture-screenshot-element-using-python-selenium-webdriver/

6
задан Gerald 3 July 2009 в 12:20
поделиться

1 ответ

Думаю, я нашел то, что мне нужно. Я наткнулся на эту ссылку, которая используется для отслеживания HTTP-вызовов: http://blues.ath.cx/firekeeper/resources/http_tracer.html

По какой-то причине, похоже, есть некоторые проблемы с реализацией JavaScript, и я не гуру JavaScript, чтобы понять это, но я реализовал его на C ++, и первоначальные результаты предполагают, что я смогу изменить его для своих нужд.

В основном мы заменяем службу nsIHttpProtocolHandler нашим собственная реализация, которая хранит ссылку на исходную реализацию. Когда к службе поступает вызов, мы просто передаем его сохраненной исходной реализации. Затем мы предоставляем нашу собственную реализацию nsIHttpChannel и nsIStreamListener, которые мы также используем в качестве прокси.

Мы снова передаем большинство вызовов исходным обработчикам через прокси. Но в OnDataAvailable вместо передачи данных в базовый nsIStreamListener мы сохраняем их с помощью nsIStorageStream. Затем в OnStopRequest, после того как мы получили все данные, мы можем распаковать их и затем вызвать OnDataAvailable в исходном обработчике, а затем OnStopRequest.

Пока он работал над некоторыми небольшими простыми тестами, но я буду чтобы пройти через несколько более строгих тестов ... Мне также нужно выяснить, могу ли я сделать то же самое с HTTPS.

Самая большая проблема, которую я вижу на данный момент, заключается в том, что он полагается на некоторые незамороженные интерфейсы, такие как nsIHttpChannelInternal. Хотя, насколько я могу судить, ничего не поделаешь, и мои требования к совместимости версий довольно малы, так что я могу жить с этим, если придется.

А пока,

3
ответ дан 17 December 2019 в 18:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: