Запуск pyinstaller другого ПК с Chromedriver
Я пытаюсь добавить Chromedriver в исполняемый файл в pyinstaller. Хотя это возможно, кажется, что я получаю следующее сообщение об ошибке при попытке запустить это на другом компьютере.
Я попробовал несколько постов, включая этот Один , но, к сожалению, это не дало желаемых результатов. В лучшем случае я мог запустить его на своем собственном компьютере, когда Chrome exe был в той же папке, которая была бесполезна.Код 1:
Main.py
from selenium import webdriver
driver = webdriver.Chrome()
Что я получаю при работе на другом компьютере:
Ошибка 1:
Не удается найти путь к Хрому
C:UsersAperture ScienceDesktop1>123.exe
Traceback (most recent call last):
File "site-packagesseleniumwebdrivercommonservice.py", line 74, in start
File "subprocess.py", line 709, in __init__
File "subprocess.py", line 997, in _execute_child
FileNotFoundError: [WinError 2] The system cannot find the file specified
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "main.py", line 42, in <module>
File "main.py", line 33, in main
File "site-packagesseleniumwebdriverchromewebdriver.py", line 68, in __init__
File "site-packagesseleniumwebdrivercommonservice.py", line 81, in start
selenium.common.exceptions.WebDriverException: Message: 'chromedriver' executable needs to be in PATH. Please see https://sites.google.com/a/chromium.org/chromedriver/home
[2228] Failed to execute script main
Как я могу обойти это?
Что я получаю от ссылки при условии:
Код 2:
from selenium import webdriver
import os, sys, inspect
current_folder = os.path.realpath(os.path.abspath(os.path.split(inspect.getfile(inspect.currentframe() ))[0]))
chromedriver = os.path.join(current_folder,"chromedriver.exe")
driver = webdriver.Chrome(executable_path = chromedriver)
driver.get("http://www.imdb.com/")
Требуется Chrome exe в set path, в комплекте chrome не читается. Поэтому упакованный хром не работает так, как хотелось бы.
1 ответ:
Используйте
--add-binary
для связывания драйвера в приложении:pyinstaller -F --add-binary "C:\drivers\chromedriver.exe";"." script.py
И используйте
sys._MEIPASS
для получения папки, из которой извлекается драйвер:import sys, os, time from selenium import webdriver if __name__ == "__main__": if getattr(sys, 'frozen', False): # executed as a bundled exe, the driver is in the extracted folder chromedriver_path = os.path.join(sys._MEIPASS, "chromedriver.exe") driver = webdriver.Chrome(chromedriver_path) else: # executed as a simple script, the driver should be in `PATH` driver = webdriver.Chrome() driver.get("https://stackoverflow.com") time.sleep(5) driver.quit()