селен, приводящий к различным скриншотам - PullRequest
0 голосов
/ 09 октября 2019

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

MyСтратегия заключается в том, чтобы сначала сделать полные снимки экрана, а затем выбрать определенный раздел, указав координаты пикселей.

По какой-то причине, даже если изображения должны быть одинаковыми, кажется, что произошли небольшие изменения, из-за чего я полагаю, что пакет с селеном каким-то образом делает снимки экрана между циклами во время работы.

Обратите внимание, что у меня есть time.sleep(30), чтобы дождаться полной загрузки сайта, прежде чем делать снимок экрана. Считаете ли вы, что если загрузка веб-сайта займет больше времени, чем указано для загрузки, это может привести к другому скриншоту, что приведет к ложной тревоге?

Ниже приведен мой код.

from PIL import Image
import screenshot_capture as sc
from crop_test import crop
import time
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import numpy as np
from gmaillogin_test import sendemail

i =1
sc.screenshot_capture(i,'website address')
image_name = 'screen_shot_temp' + str(i) +'.png'
crop(image_name, (354, 170, 1517, 735),  'cropped_temp' + str(i) +'.png')
#crop(image_name, (240, 358, 1153, 1100), 'cropped' + str(i) +'.png')
snippedimage_name = 'cropped_temp' + str(i) +'.png'
snippedimage = mpimg.imread(snippedimage_name)

while True:
    print(i)
    i += 1
    snippedpreimage = snippedimage
    #time.sleep(600)
    sc.screenshot_capture(i,'website address')  
    image_name = 'screen_shot_temp' + str(i) +'.png'

    crop(image_name, (354, 170, 1517, 735),  'cropped_temp' + str(i) +'.png')
    snippedimage_name = 'cropped_temp' + str(i) +'.png'
    snippedimage = mpimg.imread(snippedimage_name)

    if np.any(snippedpreimage != snippedimage):
        print('something changed')
        sendemail()

Ниже приведена функция 'screenshot_capture. *

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time

def screenshot_capture(itnum,address):
    driver = webdriver.Chrome()
    driver.get(address)
    #pause 30 second to let page load
    time.sleep(30)
    #get scroll Height
    height = driver.execute_script("return Math.max( document.body.scrollHeight, document.body.offsetHeight, document.documentElement.clientHeight, document.documentElement.scrollHeight, document.documentElement.offsetHeight )")
    print(height)
    #close browser
    driver.close()

    #Open another headless browser with height extracted above
    chrome_options = Options()
    chrome_options.add_argument("--headless")
    chrome_options.add_argument(f"--window-size=1920,{height}")
    chrome_options.add_argument("--hide-scrollbars")
    driver = webdriver.Chrome(options=chrome_options)

    driver.get(address)
    #pause 30 second to let page loads
    time.sleep(30)
    #save screenshot
    imagetitle = 'screen_shot_temp' + str(itnum) +'.png'
    driver.save_screenshot(imagetitle)
    driver.close()

Ниже приведена функция' crop. '

* 1017. *
...