Исполняемый файл cx_freeze не будет хорошо работать с Geckodriver

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


person jesserowan    schedule 12.06.2020    source источник
comment
Кстати, у меня есть Geckodriver в пути в каталоге верхнего уровня. Я также безуспешно пытался включить его в каталог сборки cx_Freeze. То же самое с firefox exe   -  person jesserowan    schedule 12.06.2020


Ответы (1)


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

person jesserowan    schedule 12.06.2020