Я работаю над настольным приложением с графическим интерфейсом, чтобы предоставить пользователям контроль над веб-скребком. У меня есть два исполняемых файла: один запускает парсер Selenium (Py27), а другой запускает графический интерфейс, который запускает и останавливает парсер с помощью subprocess.Popen
(Python 38). К сожалению, сейчас я не могу использовать одну и ту же версию Python в обоих приложениях. Хотя мы, похоже, не сталкиваемся с проблемами среды из-за несоответствия версии Python.
Я на Windows, использую Selenium 3.141, Geckodriver 0.26, cx_Freeze 5 и Firefox 77.
Я могу запускать оба исполняемых файла вручную без проблем, но когда я пытаюсь запустить исполняемый файл скребка через исполняемый файл с графическим интерфейсом, он попадает в бесконечный цикл создания каталога tmp с User.js внутри, открытия командной строки geckodriver и затем закрыть и начать заново. В конечном итоге он постоянно генерирует все больше и больше этих tmp-каталогов, пока я не убью окно графического интерфейса. Трассировка говорит мне о нескольких вещах: Geckodriver сталкивается с ошибкой прав доступа, и у приложения возникают проблемы с установлением домашнего каталога.
Я протестировал запуск процесса очистки с помощью Popen, так что проблема не в этом.
Когда я запускаю его вручную и сбрасываю параметры Firefox, и сравниваю его с параметрами Firefox, когда я запускаю его через графический интерфейс, есть некоторая разница. Это из профиля FF при ручном (успешном) запуске:
'userPrefs': 'c:\\users\\atadmin\\appdata\\local\\temp\\tmpqctvna\\user.js',
'profile_dir': 'c:\\users\\atadmin\\appdata\\local\\temp\\tmpqctvna',
'extensionsDir': 'c:\\users\\atadmin\\appdata\\local\\temp\\tmpqctvna\\extensions',
а это профиль неудачного запуска графического интерфейса:
'userPrefs': 'c:\\users\\atadmin\\documents\\aeleads-master\\aeleads-portal-testing\\build\\exe.win-amd64-3.8\\tmpu9ktpl\\user.js',
'profile_dir': 'c:\\users\\atadmin\\documents\\aeleads-master\\aeleads-portal-testing\\build\\exe.win-amd64-3.8\\tmpu9ktpl',
'extensionsDir': 'c:\\users\\atadmin\\documents\\aeleads-master\\aeleads-portal-testing\\build\\exe.win-amd64-3.8\\tmpu9ktpl\\extensions',
И вот последняя трассировка:
Can't determine home directory
utils.tss_logging: Logging initailizing with None/None
Error: Traceback (most recent call last):
File "li_scraper.py", line 63, in run_scraper
File "C:\Users\atadmin\Documents\aeleads-master\aeleads-portal-testing\scrape\scraper.py", line 394, in collection
self.login()
File "C:\Users\atadmin\Documents\aeleads-master\aeleads-portal-testing\scrape\scraper.py", line 85, in login
driver = self._get_driver(use_proxy=self.use_proxy)
File "C:\Users\atadmin\Documents\aeleads-master\aeleads-portal-testing\scrape\scraper.py", line 622, in _get_driver
use_proxy=use_proxy, reserve_proxy=False)
File "C:\Users\atadmin\Documents\aeleads-master\aeleads-portal-testing\lib\webdrivers.py", line 164, in open_webdriver
capabilities=capabilities, log_path="C:\\Users\\atadmin\\Documents\\aeleads-master\\geckodriver.log")
File "C:\Python27\Py27\lib\site-packages\selenium\webdriver\firefox\webdriver.py", line 174, in __init__
keep_alive=True)
File "C:\Python27\Py27\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 157, in __init__
self.start_session(capabilities, browser_profile)
File "C:\Python27\Py27\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 252, in start_session
response = self.execute(Command.NEW_SESSION, parameters)
File "C:\Python27\Py27\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "C:\Python27\Py27\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
WebDriverException: Message: permission denied
Похоже, что cx_Freeze создает свою собственную среду сборки, что может привести к потере пользователя из-за ошибки прав доступа. Я довольно новичок в Python.