2013-05-02 13 views
8

Wykonam zrzut ekranu z tej strony: http://books.google.de/books?id=gikDAAAAMBAJ&pg=PA1&img=1&w=2500 lub zapisz obraz, który wygeneruje.Zrzut ekranu z witryny internetowej z linii poleceń lub pytonem

Ale nie mogę znaleźć sposobu. Z wget/curl pojawia się "błąd niedostępny", a także z innymi narzędziami, takimi jak webkit2png/wkhtmltoimage/wkhtmltopng.

Czy jest to czysty sposób to zrobić z python lub z linii poleceń?

Pozdrawiam!

+0

[? Wierzę, że ten odpowiedział w innym wątku] (http://stackoverflow.com/questions/69645/take-a-screenshot-via-a-python- script-linux) – user856358

+0

O ile wiem, nie pobierają zrzutu ekranu ze strony internetowej, tylko z otwartego okna. Ale moim zamiarem jest zrobić to bez otwierania adresu URL przez siebie. Istnieje około 1000 zdjęć do zapisania. Tylko okładki z niektórych książek. – danbruegge

Odpowiedz

6

Czasami potrzebne są dodatkowe nagłówki http, takie jak User-Agent, aby pobieranie działało. W Pythonie 2.7, można:

import urllib2 
request = urllib2.Request(
    r'http://books.google.de/books?id=gikDAAAAMBAJ&pg=PA1&img=1&w=2500', 
    headers={'User-Agent':'Mozilla/5.0 (X11; U; Linux i686) Gecko/20071127 firefox/2.0.0.11'}) 
page = urllib2.urlopen(request) 

with open('somefile.png','wb') as f: 
    f.write(page.read()) 

Albo można spojrzeć na params do dodawania nagłówków HTTP w wget lub dyni.

+0

Wielkie dzięki, wiem to, to musi być agent użytkownika. :) – danbruegge

+0

Jednak nie stworzy obrazu przechwyconej strony internetowej. Obraz zostanie zerwany. – Pant

+0

@SarvagyaPant Uruchomiłem ten skrypt i zweryfikowałem, że pobrany został niezłamany obraz. Zajęło mi to mniej niż minutę. Czy możesz zadać minimum pracy przed złożeniem bezpodstawnych roszczeń? – tdelaney

14

Możesz użyć ghost.py, jeśli chcesz. http://jeanphix.me/Ghost.py/

Oto przykład, jak z niego korzystać.

from ghost import Ghost 
ghost = Ghost(wait_timeout=4) 
ghost.open('http://www.google.com') 
ghost.capture_to('screen_shot.png') 

Ostatnia linia zapisuje obraz w bieżącym katalogu.

Nadzieja to pomaga

+4

Niezły. Wygląda naprawdę dobrze, ale nie chcę instalować Qt. :/ – danbruegge

5

miałem trudności z uzyskaniem Ghost zrzut ekranu konsekwentnie na bezgłowy Centosu VM. Selenium i PhantomJS pracował dla mnie:

from selenium import webdriver 
br = webdriver.PhantomJS() 
br.get('http://www.stackoverflow.com') 
br.save_screenshot('screenshot.png') 
br.quit 
+0

Otrzymuję ten błąd podczas uruchamiania tego: 'Traceback (ostatnie ostatnie połączenie): Plik" C: \ bunker \ Lib \ site-packages \ custom_selenium.py ", wiersz 2, w br = webdriver. PhantomJS() Plik "C: \ bunker \ Lib \ site-packages \ selenium \ webdriver \ phantomjs \ webdriver.py", wiersz 49, w __init__ service_args = service_args, log_path = service_log_path) TypeError: __init __() dostał nieoczekiwany argument słowa kluczowego 'log_path'' –

+0

hmm, nie jestem pewien, ale zastanawiam się, co się stanie, jeśli edytujesz webdriver.py __init__ i usuniesz argument log_path – billrichards