Python - Скриншот элемента:
Это довольно старый вопрос, и на него есть несколько ответов. Однако кажется, что снимок экрана определенного веб-элемента, использующего Python, здесь отсутствует.
location
Веб-элемент имеет свою собственную позицию на странице и, как правило, он измеряется в пикселях x и y и известен как (x, y) координаты элемента. И объект местоположения содержит два значения.
размер
Подобно местоположению, каждый WebElement имеет ширину и высоту; Доступен как размер объекта.
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/
Думаю, я нашел то, что мне нужно. Я наткнулся на эту ссылку, которая используется для отслеживания HTTP-вызовов: http://blues.ath.cx/firekeeper/resources/http_tracer.html
По какой-то причине, похоже, есть некоторые проблемы с реализацией JavaScript, и я не гуру JavaScript, чтобы понять это, но я реализовал его на C ++, и первоначальные результаты предполагают, что я смогу изменить его для своих нужд.
В основном мы заменяем службу nsIHttpProtocolHandler нашим собственная реализация, которая хранит ссылку на исходную реализацию. Когда к службе поступает вызов, мы просто передаем его сохраненной исходной реализации. Затем мы предоставляем нашу собственную реализацию nsIHttpChannel и nsIStreamListener, которые мы также используем в качестве прокси.
Мы снова передаем большинство вызовов исходным обработчикам через прокси. Но в OnDataAvailable вместо передачи данных в базовый nsIStreamListener мы сохраняем их с помощью nsIStorageStream. Затем в OnStopRequest, после того как мы получили все данные, мы можем распаковать их и затем вызвать OnDataAvailable в исходном обработчике, а затем OnStopRequest.
Пока он работал над некоторыми небольшими простыми тестами, но я буду чтобы пройти через несколько более строгих тестов ... Мне также нужно выяснить, могу ли я сделать то же самое с HTTPS.
Самая большая проблема, которую я вижу на данный момент, заключается в том, что он полагается на некоторые незамороженные интерфейсы, такие как nsIHttpChannelInternal. Хотя, насколько я могу судить, ничего не поделаешь, и мои требования к совместимости версий довольно малы, так что я могу жить с этим, если придется.
А пока,