Forum: PC-Programmierung Python/chromedriver: Screenshot-Größe vs. Fenstergröße


von Walter T. (nicolas)


Lesenswert?

Hallo zusammen,

mein Ziel ist es, einen Screenshot einer gerenderten HTML-Seite 
geskriptet zu erstellen. Momentan probiere ich es mit Python und 
Selenium mit dem Chrome- oder Firefox. Das Erstellen des Screenshots 
funktioniert grob, allerdings ist der Screenshot immer deutlich kleiner 
als die Fenstergröße. Ein (variabler) Rand wird immer abgezogen.

Leider finde ich keinen Parameter, der den Rand beschreibt. Wer hat 
Erfahrunng mit einem der beiden Renderer und kann einen Tipp geben?

So sieht es bislang aus:
1
from PIL import Image
2
import os
3
from selenium import webdriver
4
5
6
htmlfile = htmlfile = r"https://www.mikrocontroller.net/forum/all"
7
8
tempfile = r"./screenshot_temp.png"
9
10
11
width = 800
12
height = 600
13
margin_left = 0
14
margin_right = 0
15
margin_top = 0
16
margin_bottom = 0
17
18
19
# spaeter testen, was besser funktioniert:
20
#driver = webdriver.Firefox() 
21
driver = webdriver.Chrome('chromedriver')
22
23
24
driver.set_window_size(width+margin_left+margin_right, margin_top+height+margin_bottom)
25
driver.get(htmlfile)
26
27
screenshot = driver.save_screenshot(tempfile)
28
#driver.quit() # Zu Testzwecken Fenster nicht schließen
29
30
31
image = Image.open(tempfile).convert('RGBA')
32
image.show()
33
print(image.width, 'x', image.height)
34
# >>> 784 x 468

Viele Grüße

W.T.

von imonbln (Gast)


Lesenswert?

Dein Problem klingt jetzt nicht so Exotisch für mich. Wenn ich google 
mit der query "selenium full page screenshot python" bekomme ich zum 
Beispiel diesen Code angezeigt 
https://gist.github.com/fabth/13e4a2e7cfbfde671b8fa81bbe9359fb löst der 
dein Problem? Auch Wenn es Python2 ist und ich persönlich Python3 
vorziehe. Sollte das vielleicht eine Basis sein mit der du dein Problem 
angehen kannst.

von Walter T. (nicolas)


Lesenswert?

Danke für die Antwort. Der funktionierende Link lautet:

https://gist.github.com/fabtho/13e4a2e7cfbfde671b8fa81bbe9359fb

Hier wird Javascript in den Browser injiziert, um die Höhe zu 
identifizieren. Vielleicht ist das ein sinnvoller Ansatz. Probiere ich 
mal aus.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.