Невозможно получить правильный снимок экрана, когда сценарий Python запланирован с помощью планировщика задач Windows
Я получил скрипт Python, который делает полный снимок экрана веб-страницы. Когда сценарий выполняется вручную, он работает отлично, и желаемый снимок экрана получается в качестве вывода. Но когда я запланировал это в планировщике задач Windows (Windows 10-64 бит), скриншот, который я получаю, отличается.
При выполнении сценария вручную, изначально сценарий настраивает драйвер Chrome. Затем он развернет окно, передаст URL веб-страницы и сделает снимок экрана на всю страницу.
Но когда сценарий запланирован в планировщике задач, после настройки драйвера chrome метод self.driver.fullscreen_window() не вызывается и окно не развернуто (я думаю, что это может быть причиной. Я не уверен. ведущий снимок экрана, чтобы быть несовершенным. Мне не удалось найти правильное решение для этого. Будет очень полезно, если кто-то сможет решить эту проблему. Заранее спасибо.
import sys
import time
from PIL import Image
from selenium import webdriver
class screencaptureUtils():
def __init__(self,config,logger):
self.config = config
self.logger = logger
def driver_setup(self):
try:
self.driver = webdriver.Chrome(self.config.chromedriverpath)
self.driver.fullscreen_window()
except Exception as e:
self.logger.exception(str(e))
def tearDown(self):
self.driver.quit()
def fullpage_screenshot_capture(self, driver, file):
try:
total_width = driver.execute_script("return document.body.offsetWidth")
total_height = driver.execute_script("return document.body.parentNode.scrollHeight")
viewport_width = driver.execute_script("return document.body.clientWidth")
viewport_height = driver.execute_script("return window.innerHeight")
rectangles = []
i = 0
while i < total_height:
ii = 0
top_height = i + viewport_height
if top_height > total_height:
top_height = total_height
while ii < total_width:
top_width = ii + viewport_width
if top_width > total_width:
top_width = total_width
rectangles.append((ii, i, top_width,top_height))
ii = ii + viewport_width
i = i + viewport_height
stitched_image = Image.new('RGB', (total_width, total_height))
previous = None
part = 0
for rectangle in rectangles:
if not previous is None:
driver.execute_script("window.scrollTo({0}, {1})".format(rectangle[0], rectangle[1]))
time.sleep(0.2)
file_name = "part_{0}.png".format(part)
driver.get_screenshot_as_file(file_name)
screenshot = Image.open(file_name)
if rectangle[1] + viewport_height > total_height:
offset = (rectangle[0], total_height - viewport_height)
else:
offset = (rectangle[0], rectangle[1])
stitched_image.paste(screenshot, offset)
del screenshot
os.remove(file_name)
part = part + 1
previous = rectangle
stitched_image.save(file)
return True
except Exception as e:
self.logger.exception(str(e))
def fullpage_screenshot_setup(self,webpageurl, imagePath):
try:
self.driver.get(webpageurl)
el=self.driver.find_element_by_tag_name('body')
self.logger.debug("Enabling Screenshot")
el.screenshot(imagePath)
self.fullpage_screenshot_capture(self.driver,imagePath)
self.driver.quit()
except Exception as e:
self.logger.exception(str(e))
def take_screenShot(self,webURL,filePath):
self.driver_setup()
self.fullpage_screenshot_setup(webURL,filePath)