Я изучал селен, чтобы делать скриншоты веб-сайта и обнаруживать любые изменения, сравнивая определенные разделы скриншотов, а не сравнивая полные скриншоты, так как я хочу игнорировать рекламу и динамические части.
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. *