Как я могу сделать снимок экрана / изображение веб-сайта, используя Python?

В своем коде замените «root» своим именем и паролем вашего сервера на свой пароль сервера. Например, если у вас есть DB и ваши php-файлы на сервере http://www.example.com , то, очевидно, вам нужно будет войти на этот серверный сайт, используя ваше имя пользователя и пароль.

48
задан Breakthrough 15 July 2013 в 14:45
поделиться

4 ответа

На Mac есть webkit2png , а на Linux + KDE вы можете использовать khtml2png . Я пробовал первый, и он работает довольно хорошо, и слышал, что второй применяется.

Недавно я наткнулся на QtWebKit , который утверждает, что он кроссплатформенный (полагаю, Qt включил WebKit в свою библиотеку). Но я никогда не пробовал этого, поэтому не могу рассказать вам больше.

Ссылки QtWebKit показывают, как получить доступ из Python. Вы должны иметь возможность хотя бы использовать подпроцесс, чтобы делать то же самое с остальными.

12
ответ дан 7 November 2019 в 10:04
поделиться

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

import urllib2
import json
import base64
import sys
import requests
import os
import errno

#   The website's URL as an Input
site = sys.argv[1]
imagePath = sys.argv[2]

#   The Google API.  Remove "&strategy=mobile" for a desktop screenshot
api = "https://www.googleapis.com/pagespeedonline/v1/runPagespeed?screenshot=true&strategy=mobile&url=" + urllib2.quote(site)

#   Get the results from Google
try:
    site_data = json.load(urllib2.urlopen(api))
except urllib2.URLError:
    print "Unable to retreive data"
    sys.exit()

try:
    screenshot_encoded =  site_data['screenshot']['data']
except ValueError:
    print "Invalid JSON encountered."
    sys.exit()

#   Google has a weird way of encoding the Base64 data
screenshot_encoded = screenshot_encoded.replace("_", "/")
screenshot_encoded = screenshot_encoded.replace("-", "+")

#   Decode the Base64 data
screenshot_decoded = base64.b64decode(screenshot_encoded)

if not os.path.exists(os.path.dirname(impagepath)):
    try:
        os.makedirs(os.path.dirname(impagepath))
        except  OSError as exc:
            if exc.errno  != errno.EEXIST:
                raise

#   Save the file
with open(imagePath, 'w') as file_:
    file_.write(screenshot_decoded)

, К сожалению, следующее является недостатками. Если они не имеют значения, можно возобновить Google Page Speed API. Это работает хорошо.

  • максимальная ширина составляет 320 пкс
  • Согласно Google API Quota, существует предел 25 000 запросов в день
0
ответ дан 7 November 2019 в 10:04
поделиться

Я не могу комментировать ответ ars, но у меня действительно есть код Роланда Тапкена , работающий с использованием QtWebkit, и он работает довольно хорошо.

Просто хотел подтвердить, что то, что Роланд публикует в своем блоге, отлично работает в Ubuntu. В нашей производственной версии не использовалось ничего из того, что он написал, но мы с большим успехом используем привязки PyQt / QtWebKit.

5
ответ дан 7 November 2019 в 10:04
поделиться

Вы не упоминаете, в какой среде вы работаете, что имеет большое значение, потому что нет веб-браузера на чистом Python, способного отображать HTML.

Но если вы Я использую Mac, я использовал webkit2png с большим успехом. В противном случае, как указывали другие, существует множество вариантов.

0
ответ дан 7 November 2019 в 10:04
поделиться
Другие вопросы по тегам:

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