Вместо этого я использовал spec-файл. Это довольно интересно. Посмотрим, будет ли это снова работать.

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

Я пробовал несколько постов, включая этотодинНо, к сожалению, это не дало желаемых результатов. В лучшем случае я мог запустить его на своем компьютере, когда chrome exe находился в той же папке, что было бесполезно.

Код 1:

Main.py

from selenium import webdriver
driver = webdriver.Chrome()

Что я получаю при запуске на другом компьютере:

Ошибка 1:

Не удается найти Chrome Path

   C:\Users\Aperture Science\Desktop\1>123.exe
    Traceback (most recent call last):
      File "site-packages\selenium\webdriver\common\service.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-packages\selenium\webdriver\chrome\webdriver.py", line 68, in __init__
      File "site-packages\selenium\webdriver\common\service.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 в заданном пути, связанный Chrome не читается. Таким образом, упакованный хром не работает, как хотелось бы.

 babygame0ver12 дек. 2017 г., 19:13
то же самое, что я сейчас выполняю, так что вы можете сделать так: прочитайте диск chrome в двоичном виде с помощью обработчика "wb" и сохраните его в переменной, затем передайте это значение программе и дайте ему сначала создать исполняемый файл chromedriver, записав двоичные данные в "chrome.exe", а затем вы можете импортировать их в свою программу.
 user904569812 дек. 2017 г., 19:04
@FlorentB. Я получил отдельную ошибку, которую я отправил. Я также должен поместить chromedriver в папку рядом с исполняемым файлом, поскольку он не хочет обнаруживать упакованный Chrome. Я не совсем уверен, как вы обойдете бинарный файл Chrome для текущей папки.
 Florent B.12 дек. 2017 г., 19:02
ссылка из вашего поста есть ответ, но почему-то ваш код его игнорирует. Почему вы ожидаете, что ваш пример сработает, учитывая, что на целевой машине, очевидно, отсутствует драйвер наPATH переменная окружения и учитывая, что вы не предоставляете путь кwebdriver.Chrome() ?
 DebanjanB07 дек. 2017 г., 10:45
Так каков твой вопрос? Где ты застрял? Видя какую-либо ошибку? Обновите вопрос с трассировкой стека ошибок, пожалуйста.
 user904569812 дек. 2017 г., 19:16
@ babygame0ver Можете ли вы показать пример того, как это достигается?

Ответы на вопрос(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()
 user904569812 дек. 2017 г., 20:40
Это приводит к: Невозможно найти «C: \ drivers \ chromedriver.exe» при добавлении двоичных файлов и файлов данных. Работает ли это для пакетов chrome внутри pyinstaller?
 user904569812 дек. 2017 г., 20:44
Вместо этого я использовал spec-файл. Это довольно интересно. Посмотрим, будет ли это снова работать.
 Florent B.12 дек. 2017 г., 20:42
Измените путь к каталогу chromedriver.exe на вашем компьютере.

Ваш ответ на вопрос