Projet

Général

Profil

Development #22137 » selenium_scroll.py

Paul Marillonnet, 02 août 2018 12:02

 
1
from selenium import webdriver
2
from PIL import Image
3
from io import BytesIO
4

    
5
window_size_x = 1280
6
window_size_y = 960
7
safety_margin_x = 200
8
safety_margin_y = 200
9
step_x = window_size_x - safety_margin_x
10
step_y = window_size_y - safety_margin_y
11

    
12
driver = webdriver.Chrome()
13
driver.set_window_size(window_size_x, window_size_y)
14

    
15
driver.get('http://selenium-python.readthedocs.io/getting-started.html')
16
element = driver.find_element_by_id('getting-started')
17

    
18
location = element.location
19
size = element.size
20
left = location['x']
21
top = location['y']
22
right = location['x'] + size['width']
23
bottom = location['y'] + size['height']
24

    
25
cursor_x = 0
26
cursor_y = 0
27

    
28
right_scrolls = int(right) / step_x + 1
29
down_scrolls = int(bottom) / step_y + 1
30

    
31
image = Image.new('RGB', (right_scrolls * step_x, down_scrolls * step_y))
32

    
33
for x in range(right_scrolls):
34
    driver.execute_script("window.scrollTo({}, 0)".format(step_x*x))
35
    for y in range(down_scrolls):
36
        driver.execute_script("window.scrollTo(0, {})".format(step_y*y))
37
        png = driver.get_screenshot_as_png()
38
        tmp_im = Image.open(BytesIO(png))
39
        image.paste(tmp_im, (x * step_x, y * step_y))
40
        tmp_im.close()
41
driver.quit()
42

    
43
image = image.crop((left, top, right, bottom))
44
image.save('screenshot.png')