Вопрос: Почему я получаю сообщение об ошибке, хотя мне кажется, что веб-драйвер находится в PATH? Описание и контекст проблемы:
Я пытаюсь написать код, требующий использования менеджера веб-драйверов для Chrome. Я тестирую конфигурацию с помощью следующего кода (не моего собственного, он должен работать так, как указано в материалах курса).
import django, selenium, bs4, requests
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import socket
# There is a 'feature' in selenium which may cause the firewall to react unless you provide an explicit port for the driver
def free_port():
free_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
free_socket.bind(('localhost', 0))
free_socket.listen(5)
port = free_socket.getsockname()[1]
free_socket.close()
return port
options = Options()
options.headless = True
options.add_argument('--no-sandbox')
driver = webdriver.Chrome(port=free_port(), options=options)
driver.get('https://www.google.com')
print('Good so far')
Однако при запуске приведенного выше сценария в Spyder я получаю следующую ошибку.
runfile('/Users/USERNAME/Downloads/sanity.py', wdir='/Users/USERNAME/Downloads')
Traceback (most recent call last):
File "/Users/USERNAME/opt/anaconda3/lib/python3.8/site-packages/selenium/webdriver/common/service.py", line 72, in start
self.process = subprocess.Popen(cmd, env=self.env,
File "/Users/USERNAME/opt/anaconda3/lib/python3.8/subprocess.py", line 854, in __init__
self._execute_child(args, executable, preexec_fn, close_fds,
File "/Users/USERNAME/opt/anaconda3/lib/python3.8/subprocess.py", line 1702, in _execute_child
raise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2] No such file or directory: 'chromedriver'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/Users/USERNAME/Downloads/sanity.py", line 19, in
driver = webdriver.Chrome(port=free_port(), options=options)
File "/Users/USERNAME/opt/anaconda3/lib/python3.8/site-packages/selenium/webdriver/chrome/webdriver.py", line 73, in __init__
self.service.start()
File "/Users/USERNAME/opt/anaconda3/lib/python3.8/site-packages/selenium/webdriver/common/service.py", line 81, in start
raise WebDriverException(
WebDriverException: 'chromedriver' executable needs to be in PATH. Please see https://sites.google.com/a/chromium.org/chromedriver/home
При отображении PATH в терминале я вижу там папку /Users/USERNAME/opt/anaconda/pkgs, где расположены как веб-менеджер веб-драйверов, так и селен.
[b]Вопрос:[/b] Почему я получаю сообщение об ошибке, хотя мне кажется, что веб-драйвер находится в PATH? [b]Описание и контекст проблемы:[/b] Я пытаюсь написать код, требующий использования менеджера веб-драйверов для Chrome. Я тестирую конфигурацию с помощью следующего кода (не моего собственного, он должен работать так, как указано в материалах курса). [code]import django, selenium, bs4, requests from selenium import webdriver from selenium.webdriver.chrome.options import Options import socket
# There is a 'feature' in selenium which may cause the firewall to react unless you provide an explicit port for the driver def free_port(): free_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) free_socket.bind(('localhost', 0)) free_socket.listen(5) port = free_socket.getsockname()[1] free_socket.close() return port
options = Options() options.headless = True options.add_argument('--no-sandbox') driver = webdriver.Chrome(port=free_port(), options=options) driver.get('https://www.google.com') print('Good so far') [/code] Однако при запуске приведенного выше сценария в Spyder я получаю следующую ошибку. [code]runfile('/Users/USERNAME/Downloads/sanity.py', wdir='/Users/USERNAME/Downloads') Traceback (most recent call last):
File "/Users/USERNAME/opt/anaconda3/lib/python3.8/site-packages/selenium/webdriver/common/service.py", line 72, in start self.process = subprocess.Popen(cmd, env=self.env,
File "/Users/USERNAME/opt/anaconda3/lib/python3.8/subprocess.py", line 854, in __init__ self._execute_child(args, executable, preexec_fn, close_fds,
File "/Users/USERNAME/opt/anaconda3/lib/python3.8/subprocess.py", line 1702, in _execute_child raise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2] No such file or directory: 'chromedriver'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/Users/USERNAME/Downloads/sanity.py", line 19, in driver = webdriver.Chrome(port=free_port(), options=options)
File "/Users/USERNAME/opt/anaconda3/lib/python3.8/site-packages/selenium/webdriver/chrome/webdriver.py", line 73, in __init__ self.service.start()
File "/Users/USERNAME/opt/anaconda3/lib/python3.8/site-packages/selenium/webdriver/common/service.py", line 81, in start raise WebDriverException(
WebDriverException: 'chromedriver' executable needs to be in PATH. Please see https://sites.google.com/a/chromium.org/chromedriver/home [/code] При отображении PATH в терминале я вижу там папку /Users/USERNAME/opt/anaconda/pkgs, где расположены как веб-менеджер веб-драйверов, так и селен.