Можете ли вы установить размер экрана и использовать драйвер pyautogui/selenium chrome без монитора?

Кто-нибудь знает, как заставить pyautogui или python в целом распознавать заданный размер экрана и принимать данные дисплея, даже если дисплей не подключен?

У меня есть задача, в которой используется pyautogui и драйвер selenium chrome, для которых требуется дисплей или они терпят неудачу.

Он работает на сервере, поэтому для запуска программы требуется, чтобы мой ноутбук подключался к удаленному рабочему столу на сервере, что позволяет ему иметь дисплей, который позволяет запускать страницу с chromedriver, и для работы компонентов щелчка pyautogui / поиска по экрану.

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

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

Все мои серверы - это окна, поэтому XVFB не кажется вариантом, основанным на Xvfb в Windows


person AlbinoRhino    schedule 30.12.2020    source источник


Ответы (3)


Вы должны эмулировать драйвер дисплея. Бежать:

xvfb-run --server-args="-screen 0 1024x768x24" python my_script.py

чтобы запустить ваш скрипт, а не просто python my_script.py.

person Frederik Bode    schedule 04.01.2021
comment
Я добавил к вопросу, чтобы уточнить, что решение должно работать на серверах Windows. - person AlbinoRhino; 04.01.2021
comment
Я также должен уточнить, что я НЕ ТАК знаком с запуском из командной строки, и то, что я делаю, должно быть чем-то, что мои подчиненные могут открыть в python и запустить в мое отсутствие. - person AlbinoRhino; 05.01.2021

Ну, я использую что-то подобное на регулярной основе, я использую сервер Windows для запуска моего автоматизированного скрипта Python, который использует веб-драйвер selenium. Итак, сначала ваш ответ: вам нужно использовать код для размера экрана в сценарии, и вы можете запустить этот сценарий с помощью планировщика задач Windows, поэтому вам не нужно прикасаться к своему ноутбуку или рабочему столу для запуска удаленного рабочего стола. вы можете использовать параметры хрома, если вы используете хром в качестве безголового браузера.

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

код:

import chromedriver_autoinstaller
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from time import sleep
from selenium.webdriver.chrome.options import Options
chromedriver_autoinstaller.install()
#maximize the chrome
chrome_options = Options()
chrome_options.add_argument("--headless")
chrome_options.add_argument("--window-size=1920x1080")
driver = webdriver.Chrome(chrome_options=chrome_options)
driver.get('website address')

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

https://towardsdatascience.com/automate-your-python-scripts-with-task-scheduler-661d0a40b279

Примечание. Если вам просто нужно установить размер экрана, ваш ответ начинается здесь #maximize the chrome

person kmpatel100    schedule 11.01.2021

Я знаю, что вопрос возник давно... Я только что узнал об этом, используя PyAutoGUI на удаленных машинах или безголовых машинах здесь https://github.com/asweigart/pyautogui/issues/133

Можете посмотреть на обходной путь этого парня: http://fredtantini.free.fr/blog/index.php?article58/automatiser-des-actions-avec-selenium-pyautogui-et-xvfb

Спасибо

person random_guy    schedule 05.08.2021
comment
Ответы только по ссылкам не приветствуются. Ссылки могут меняться со временем, делая ответ бессмысленным. Пожалуйста, обобщите связанную информацию, чтобы помочь будущим читателям. - person DaveL17; 06.08.2021