Как получить доступ к исполняемому двоичному файлу chromdriver из сетевого расположения, не сохраняя его на каждом хосте, используя Selenium в ОС Windows - PullRequest
0 голосов
/ 21 января 2020

Я разработал автоматизацию селена, используя python для получения некоторых данных. Когда я запускаю файл counter.py, он работает нормально и может получить то, что хотел. Продолжить упаковку моего файла с помощью pyinstaller и снова проверить, что он отлично работает на той же машине.

Проблема здесь в том, что когда я беру этот exe и запускаю на другом компьютере, он не запускается и мгновенно закрывает cmd, смог для захвата ошибки с отладкой True, как указано ниже, заявив, что chromedriver.exe не найден.

Я пытаюсь создать точно такой же каталог на второй машине, как указано в executetable_path = и работал нормально после размещения моего chromedriver.exe. У меня есть вопрос, каким образом я могу упаковать их без необходимости использовать chromedriver.exe на другом компьютере.

counter.py

....
options = Options()
options.add_argument("--headless")
browser = webdriver.Chrome(executable_path=r"C:\Users\jasme\Desktop\project1\chromedriver.exe", options=options)
url = "https://en.wikipedia.org/wiki/Wiki"
browser.get(url)
....

counter.spe c

a = Analysis(['counter.py'],
             pathex=['C:\\Users\\jasme\\Desktop\\project1'],
             binaries=[('C:\\Users\\jasme\\Desktop\\project1\\chromedriver.exe','\\selenium\\webdriver')],
             datas=[],
             hiddenimports=[],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)
exe = EXE(pyz,
          a.scripts,
          a.binaries,
          a.zipfiles,
          a.datas,
          [],
          name='counter',
          debug=True,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          upx_exclude=[],
          runtime_tmpdir=None,
          console=True )

Ошибка

[20396] LOADER: callfunction returned... 
[20396] LOADER: extracted pyimod03_importers 
[20396] LOADER: callfunction returned... 
[20396] LOADER: Installing PYZ archive with Python modules. 
[20396] LOADER: PYZ archive: PYZ-00.pyz 
[20396] LOADER: Running pyibootOl_bootstrap.py 
[20396] LOADER: Running counter.py 
Traceback (most recent call last): 
    File "site-packages\selenium\webdriver\common\service.py", line 76, in start 
    File "subprocess.py", line 800, in _init_ 
    File "subprocess.py", line 1207, 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 "counter.py", line 35, in <module>     
    File "site-packages\selenium\webdriver\chrome\webdriver.py", line 73, in _init_ 
    File "site-packages\selenium\webdriver\common\service.py", line 83, in start 
selenium.common.exceptions.WebDriverException: Message: 'chromedriver.exe' executable needs to be in PATH. 
Please see https://sites.google.com/a/chromium.org/chromedriver/home 

[20396] Failed to execute script counter 
[20396] LOADER: OK. 
[20396] LOADER: Cleaning up Python interpreter. 
[2264] LOADER: Back to parent (RC: -1) 2 

PS: извините, если название сбивает с толку, может быть, кто-то может изменить его.

Ответы [ 2 ]

0 голосов
/ 22 января 2020

Это сообщение об ошибке ...

selenium.common.exceptions.WebDriverException: Message: 'chromedriver.exe' executable needs to be in PATH. 

... означает, что ChromeDriver не смог инициировать / порождать новый Контекст просмотра т.е. Chrome Браузер сеанс, поскольку он не был найден в указанном пути.


Предполагается, что вы работаете в системе, Нет , вы не можете получить доступ к двоичному файлу WebDriver , хранящемуся в сети, во время выполнения ваших тестов. Даже если вы продолжите упаковку исполняемого двоичного файла с помощью pyinstaller и выполните его в других системах, он не будет работать.

Если вы попытаетесь получить доступ к двоичному файлу WebDriver , хранящемуся в сетевом расположении, для выполнения В ваших тестах вы увидите ошибку:

  • ChromeDriver:

    [SEVERE]: CreatePlatformSocket() returned an error: An invalid argument was supplied.
    
  • GeckoDriver:

    An invalid argument was supplied.
    

Ссылка

Несколько подробных обсуждений можно найти в:

0 голосов
/ 21 января 2020

вам не нужно создавать ту же директорию, что вы можете сделать, либо поместите chromedriver.exe в папку и скопируйте полный путь

или

, просто поместите хромедривер .exe в той же папке, что и counter.py

и добавьте это к коду.

это должно работать.

 browser = webdriver.Chrome(executable_path="chromedriver.exe", options=options)
...