Python을 사용하는 Selenium - Geckodriver 실행 파일이 PATH에 있어야 합니다.
저는 프로그래밍에 초심하고 Python을 시작한 지 두 달 정도 되었고, Swigart의 Automate the Boring Stuff with Python 텍스트를 검토하고 있습니다.IDLE을 사용하고 있으며 Selenium 모듈과 Firefox 브라우저를 이미 설치했습니다.
웹 드라이버 기능을 실행하려고 할 때마다 다음과 같은 메시지가 나타납니다.
from selenium import webdriver
browser = webdriver.Firefox()
예외:
Exception ignored in: <bound method Service.__del__ of <selenium.webdriver.firefox.service.Service object at 0x00000249C0DA1080>>
Traceback (most recent call last):
File "C:\Python\Python35\lib\site-packages\selenium\webdriver\common\service.py", line 163, in __del__
self.stop()
File "C:\Python\Python35\lib\site-packages\selenium\webdriver\common\service.py", line 135, in stop
if self.process is None:
AttributeError: 'Service' object has no attribute 'process'
Exception ignored in: <bound method Service.__del__ of <selenium.webdriver.firefox.service.Service object at 0x00000249C0E08128>>
Traceback (most recent call last):
File "C:\Python\Python35\lib\site-packages\selenium\webdriver\common\service.py", line 163, in __del__
self.stop()
File "C:\Python\Python35\lib\site-packages\selenium\webdriver\common\service.py", line 135, in stop
if self.process is None:
AttributeError: 'Service' object has no attribute 'process'
Traceback (most recent call last):
File "C:\Python\Python35\lib\site-packages\selenium\webdriver\common\service.py", line 64, in start
stdout=self.log_file, stderr=self.log_file)
File "C:\Python\Python35\lib\subprocess.py", line 947, in __init__
restore_signals, start_new_session)
File "C:\Python\Python35\lib\subprocess.py", line 1224, in _execute_child
startupinfo)
FileNotFoundError: [WinError 2] The system cannot find the file specified
위의 예외 처리 중 다른 예외가 발생했습니다.
Traceback (most recent call last):
File "<pyshell#11>", line 1, in <module>
browser = webdriver.Firefox()
File "C:\Python\Python35\lib\site-packages\selenium\webdriver\firefox\webdriver.py", line 135, in __init__
self.service.start()
File "C:\Python\Python35\lib\site-packages\selenium\webdriver\common\service.py", line 71, in start
os.path.basename(self.path), self.start_error_message)
selenium.common.exceptions.WebDriverException: Message: 'geckodriver' executable needs to be in PATH.
'경로'의 해야 할 것 .geckodriver
어떻게 해야 할지 모르겠는데 어떻게 하면 좋을까요?
셀렌.공통.예외입니다.WebDriverException:메시지: 'geckodriver' 실행 파일이 PATH에 있어야 합니다.
우선 Selenium을 사용하여 최신 Firefox를 실행하려면 여기서 최신 실행 파일 geckodriver를 다운로드해야 합니다.
은 Selenium의 위치를 .geckodriver
으로부터의 파일PATH
실행 파일을 포함한 디렉토리를 시스템 경로에 추가해야 합니다.
Unix 시스템에서 Bash 호환 셸을 사용하는 경우 다음을 수행하여 시스템 검색 경로에 추가할 수 있습니다.
export PATH=$PATH:/path/to/directory/of/executable/downloaded/in/previous/step
Windows 에서는 Path 시스템 변수를 업데이트하여 실행 가능한 gkodriver 또는 명령줄에 전체 디렉토리 경로를 추가해야 합니다.** (시스템 PATH에 실행 가능한 gkodriver를 추가한 후 시스템을 재시작해야 합니다.)**이 원리는 Unix와 동일합니다.
다음과 같이 코드를 실행할 수 있습니다.
from selenium import webdriver
browser = webdriver.Firefox()
셀렌.공통.예외입니다.WebDriverException:메시지:브라우저 바이너리 위치가 필요하지만 기본 위치에서 바이너리를 찾을 수 없습니다. 'moz:firefoxOptions.binary' 기능이 제공되지 않았으며 명령줄에 바이너리 플래그가 설정되지 않았습니다.
예외는 Selenium이 Firefox를 찾아 기본 위치에서 시작하려고 할 때 Firefox를 다른 위치에 설치했지만 찾을 수 없었다고 명시합니다.파이어폭스를 기동하려면 , 파이어폭스가 인스톨 되어 있는 바이너리 로케이션을 다음과 같이 명시적으로 지정할 필요가 있습니다.
from selenium import webdriver
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
binary = FirefoxBinary('path/to/installed firefox binary')
browser = webdriver.Firefox(firefox_binary=binary)
https://github.com/mozilla/geckodriver/releases
Windows 의 경우:
GitHub에서 파일을 다운로드하여 압축을 풀고 Python 파일에 붙여넣습니다.그것은 나에게 효과가 있었다.
https://github.com/mozilla/geckodriver/releases
나에게 있어서, 나의 패스는
C:\Users\MYUSERNAME\AppData\Local\Programs\Python\Python39
이걸로 해결됐어요.
from selenium import webdriver
driver = webdriver.Firefox(executable_path=r'your\path\geckodriver.exe')
driver.get('http://inventwithpython.com')
Ubuntu와 Firefox 50에서는 이 단계를 통해 해결되었습니다.
geckodriver 다운로드
를 geckodriver 폴더에 합니다.
/usr/local/bin
추가할 필요가 없습니다.
firefox_capabilities = DesiredCapabilities.FIREFOX
firefox_capabilities['marionette'] = True
firefox_capabilities['binary'] = '/usr/bin/firefox'
browser = webdriver.Firefox(capabilities=firefox_capabilities)
논의에서는 바이너리를 다운로드하여 수동으로 경로를 설정하는 오래된 방법에 대해 여전히 언급하고 있는 것을 알 수 있습니다.
이것은 webdriver-manager를 사용하여 자동으로 실행할 수 있습니다.
pip install webdriver-manager
질문의 위의 코드는 아래의 변경으로 간단하게 동작합니다.
from selenium import webdriver
from webdriver_manager.firefox import GeckoDriverManager
driver = webdriver.Firefox(executable_path=GeckoDriverManager().install())
Homebrew가 이미 설치된 MacOS에서는 터미널 명령을 실행할 수 있습니다.
brew install geckodriver
왜냐하면 홈브루는 이미 확장했고PATH
기동 스크립트를 변경할 필요가 없습니다.
saurabh의 답변은 이 문제를 해결하지만, 파이썬을 사용한 Automatic the Boring Stuff에 이러한 단계가 포함되지 않은 이유는 설명되지 않습니다.
이는 Selenium 2.x에 기반한 책으로 해당 시리즈의 Firefox 드라이버에는 Gecko 드라이버가 필요하지 않기 때문입니다.Selenium이 개발되고 있을 때는 브라우저를 구동하는 Gecko 인터페이스를 사용할 수 없었습니다.
Selenium 2.x 시리즈의 최신 버전은 2.53.6입니다(버전을 보다 쉽게 보려면 다음 답변 참조).
2.53.6 버전 페이지에는 Gecko에 대한 언급이 전혀 없습니다.그러나 버전 3.0.2 이후 문서에는 Gecko 드라이버를 설치해야 한다고 명시되어 있습니다.
업그레이드(또는 새로운 시스템에 설치) 후 이전(또는 이전 시스템)에서 정상적으로 동작하던 소프트웨어가 더 이상 작동하지 않고 급할 경우 다음을 수행하여 가상환경에 Selenium 버전을 고정합니다.
pip install selenium==2.53.6
물론 개발을 위한 장기적인 해결책은 최신 버전의 셀레늄을 사용하여 새로운 가상 환경을 설정하고, Gecko 드라이버를 설치하고, 모든 것이 예상대로 작동하는지 테스트하는 것입니다.
그러나 메이저 버전 범프는 당신의 책에서 다루지 않는 다른 API 변경을 도입할 수 있기 때문에 당신이 Selenium 2와 Selenium 3 API 사이의 불일치를 스스로 해결할 수 있을 만큼 충분히 자신 있게 될 때까지 오래된 Selenium을 계속 사용하는 것이 좋을지도 모릅니다.
Selenium Python용으로 geckodriver를 설정하려면:
파이어폭스 드라이버로 geckodriver 경로를 다음과 같이 설정해야 합니다.
self.driver = webdriver.Firefox(executable_path = 'D:\Selenium_RiponAlWasim\geckodriver-v0.18.0-win64\geckodriver.exe')
적합한 OS에 맞는 geckodriver 다운로드(https://github.com/mozilla/geckodriver/releases)에서 → 선택한 폴더에 압축을 풉니다 → 위에서 설명한 대로 경로를 올바르게 설정합니다.
Windows 10에서 Python 3.6.2와 Selenium WebDriver 3.4.3을 사용하고 있습니다.
geckodriver를 설정하는 또 다른 방법:
를 /i) geckodriver 아래에 만 하면 .exe를 /Python/Scripts/ 아래에 붙여넣기만 하면 됩니다(내 경우 폴더는 다음과 같습니다).C:\Python36\Scripts
)
간단한 를 다음과:ii) 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 맞다.
self.driver = webdriver.Firefox()
Anaconda를 사용하는 경우 다음 명령을 사용하여 가상 환경을 활성화하고 geckodriver를 설치하면 됩니다.
conda install -c conda-forge geckodriver
Ubuntu 18.04+와 geckodriver의 최신 릴리즈
이것은, 다른 Unix 타입의 제품에도 유효합니다.
export GV=v0.30.0
wget "https://github.com/mozilla/geckodriver/releases/download/$GV/geckodriver-$GV-linux64.tar.gz"
tar xvzf geckodriver-$GV-linux64.tar.gz
chmod +x geckodriver
sudo cp geckodriver /usr/local/bin/
Mac 업데이트 대상:
geckodriver-$GV-macos.tar.gz
Windows에서 가장 쉬운 방법!
geckodriver
여기서부터요.geckodriver.exe 파일을 Python 디렉토리(또는 이미 있는 다른 디렉토리)에 추가합니다.PATH
Windows 10 の ((((((((((((( 。
geckodriver
는 디폴트로는 인스톨 되어 있지 않습니다.
geckodriver
출력:
Command 'geckodriver' not found, but it can be installed with:
sudo apt install firefox-geckodriver
이 만 아니라 실행 파일에도 합니다.PATH
.
sudo apt install firefox-geckodriver
그 문제는 한 번의 절차로 해결된다.당신과 똑같은 오류가 있어서 설치하자마자 사라졌어요.한번 시도해 보세요.
which geckodriver
출력:
/usr/bin/geckodriver
geckodriver
출력:
1337 geckodriver INFO Listening on 127.0.0.1:4444
^C
Mac의 순서
간단한 해결책은 GeckoDriver를 다운로드하여 시스템 PATH에 추가하는 것입니다.다음 두 가지 방법 중 하나를 사용할 수 있습니다.
간단한 방법
Geckodriver를 다운로드하여 압축을 풉니다.
드라이버를 기동하는 동안, 패스에 대해 설명합니다.
driver = webdriver.Firefox(executable_path='/your/path/to/geckodriver')
긴 방법
Geckodriver를 다운로드하여 압축을 풉니다.
.
.bash_profile
하지 않은 에는 명령어를할 수touch ~/.bash_profile
이렇게open ~/.bash_profile
것을 을 GeckoDriver에 할 수
.bash_profile
삭제:PATH="/Users/<your-name>/Downloads/geckodriver:$PATH" export PATH
이것에 의해, GeckoDriver 에의 패스를 시스템 PATH 에 추가합니다.이것은 Selenium 스크립트를 실행할 때 GeckoDriver의 위치를 시스템에 알려줍니다.
.bash_profile
실행하도록 강요합니다.이것에 의해, 재기동할 필요 없이 값이 곧바로 값이 로드됩니다.이를 위해 다음 명령을 실행할 수 있습니다.
source ~/.bash_profile
- 바로 그겁니다.끝!이제 Python 스크립트를 실행할 수 있습니다.
추가 입력/해명:
Windows 7, Python 3.6 및 Selenium 3.11의 해상도는 다음과 같습니다.
dsalaj는 UNIX에 대한 또 다른 답변에 대한 메모를 Windows에도 적용할 수 있습니다.Windows 수준에서 PATH 환경변수를 조작하여 Windows 시스템을 재시작하지 않아도 됩니다.
(1) geckodriver(이 스레드에서 설명한 바와 같이)를 다운로드하여 (압축 해제된) geckdriver.exe를 X:\Folder\of\your choice에 배치합니다.
(2) Python 코드 샘플:
import os;
os.environ["PATH"] += os.pathsep + r'X:\Folder\of\your\choice';
from selenium import webdriver;
browser = webdriver.Firefox();
browser.get('http://localhost:8000')
assert 'Django' in browser.title
주의:
(1) 상기 코드가 지정된 URL에 대해 Firefox 브라우저를 여는 데 약 10초가 걸릴 수 있습니다.
(2) Python 콘솔은 지정된 URL에서 실행 중인 서버가 없거나 문자열 'Django'가 포함된 제목으로 페이지를 제공하는 경우 다음과 같은 오류를 표시합니다.
셀렌.공통.예외입니다.WebDriverException:메시지:에러 페이지에 도달했습니다:neterror?e=connectionFailure&u=debug%3A//localhost%3A8000/&c=UTF-8&f=regular&d=Debug%20can%E2%80%9
Ubuntu 16.04(Xenial Xerus) 이후 버전에서는 다음을 수행할 수 있습니다.
Firefox™의 :
sudo apt-get install firefox-geckodriver
Chrome chrome chrome :
sudo apt-get install chromium-chromedriver
시스템 경로에 넣지 않고도 최신 geckodriver를 사용할 수 있다는 것을 알게 되었습니다.현재 사용하고 있습니다.
https://github.com/mozilla/geckodriver/releases/download/v0.12.0/geckodriver-v0.12.0-win64.zip
파이어폭스 50.1.0
파이썬 3.5.2
셀레늄 3.0.2
윈도 10
VirtualEnv(PyCharm을 사용하여 관리하고 있으며 Pip을 사용하여 모든 것을 설치할 수 있습니다)를 실행하고 있습니다.
다음 코드에서는 executable_path 파라미터를 사용하여 geckodriver의 특정 경로를 사용할 수 있습니다(Lib\site-packages\selenium\webdriver\firefox\webdriver.py를 검색하여 이를 발견했습니다).웹 드라이버를 호출할 때 파라미터 인수의 순서가 중요하기 때문에 executable_path가 코드의 마지막 행(오른쪽 끝 행에서 두 번째 행)인 것이 의심됩니다.
또한 테스트 중인 사이트에 신뢰할 수 없는 인증서가 있는 경우 발생하는 sec_error_unknown_issuer 문제를 피하기 위해 커스텀 Firefox 프로파일을 사용합니다.Selenium을 사용하여 Firefox의 신뢰할 수 없는 연결 경고를 비활성화하는 방법을 참조하십시오.
조사 결과, Marionette 드라이버는 불완전하고 아직 진행 중인 것으로 판명되었습니다.증명서를 파기하거나 설정하기 위한 다양한 기능이나 프로파일 옵션을 아무리 설정해도 동작하지 않습니다.커스텀 프로파일을 사용하기 쉬웠습니다.
어쨌든, 여기 제가 길 위에 있지 않고 어떻게 Geckodriver를 작동시킬 수 있는지에 대한 코드가 있습니다.
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
firefox_capabilities = DesiredCapabilities.FIREFOX
firefox_capabilities['marionette'] = True
#you probably don't need the next 3 lines they don't seem to work anyway
firefox_capabilities['handleAlerts'] = True
firefox_capabilities['acceptSslCerts'] = True
firefox_capabilities['acceptInsecureCerts'] = True
# In the next line I'm using a specific Firefox profile because
# I wanted to get around the sec_error_unknown_issuer problems with the new Firefox and Marionette driver
# I create a Firefox profile where I had already made an exception for the site I'm testing
# see https://support.mozilla.org/en-US/kb/profile-manager-create-and-remove-firefox-profiles#w_starting-the-profile-manager
ffProfilePath = 'D:\Work\PyTestFramework\FirefoxSeleniumProfile'
profile = webdriver.FirefoxProfile(profile_directory=ffProfilePath)
geckoPath = 'D:\Work\PyTestFramework\geckodriver.exe'
browser = webdriver.Firefox(firefox_profile=profile, capabilities=firefox_capabilities, executable_path=geckoPath)
browser.get('http://stackoverflow.com')
Linux를 사용하는 경우 간단한 명령을 사용하여 이 문제를 해결할 수 있습니다.
먼저 (https://github.com/mozilla/geckodriver/releases)를 다운로드하여 ZIP 파일을 추출합니다.
추출된 폴더 열기
서 """는 "").
geckodriver
을 사용하다이제 터미널에서 다음 간단한 명령을 실행하여 geckodriver를 올바른 폴더에 복사합니다.
sudo cp geckodriver /usr/local/bin
Selenium/Python에 대해 출판된 책과 Google을 통한 이 문제에 대한 대부분의 코멘트가 Mac에서 이것을 설정하기 위한 패팅 논리를 명확하게 설명하지 않는 것은 매우 슬픈 일이다(모든 것은 Windows!).YouTube 동영상은 모두 패칭 설정이 되어 있습니다(내 생각에는 저렴한 방법!).따라서 훌륭한 Mac 사용자를 위해 다음을 사용하여 Bash 경로 파일을 편집하십시오.
touch ~/.bash_profile; open ~/.bash_profile*
그런 다음 다음과 같은 경로를 추가합니다.
# Setting PATH for geckodriver
PATH=“/usr/bin/geckodriver:${PATH}”
export PATH
# Setting PATH for Selenium Firefox
PATH=“~/Users/yourNamePATH/VEnvPythonInterpreter/lib/python2.7/site-packages/selenium/webdriver/firefox/:${PATH}”
export PATH
# Setting PATH for executable on Firefox driver
PATH=“/Users/yournamePATH/VEnvPythonInterpreter/lib/python2.7/site-packages/selenium/webdriver/common/service.py:${PATH}”
export PATH*
이건 나한테 효과가 있었어.
컨테이너형 Firefox 설치를 검토합니다.
docker pull selenium/standalone-firefox
docker run --rm -d -p 5555:4444 --shm-size=2g selenium/standalone-firefox
「 」를 합니다.webdriver.Remote
:
driver = webdriver.Remote('http://localhost:5555/wd/hub', DesiredCapabilities.FIREFOX)
driver.set_window_size(1280, 1024)
driver.get('https://toolbox.googleapps.com/apps/browserinfo/')
driver.save_screenshot('info.png')
이 오류를 방지하는 새로운 방법은 Conda 환경을 사용하는 것입니다.
conda install -c conda-forge geckodriver
패스에 아무것도 추가하거나 코드를 편집할 필요가 없습니다.
Windows 10 을 사용하고 있습니다만, 다음과 같이 조작할 수 있습니다.
- 여기서 geckodriver를 다운로드하세요.사용 중인 컴퓨터에 적합한 버전을 다운로드합니다.
- 방금 다운로드한 파일의 압축을 풀고 .exe 파일을 잘라냅니다.
- C:{your python root folder}로 이동합니다.나는 C:\Python27.geckodriver.exe 파일을 이 폴더에 붙여넣습니다.
- 개발 환경을 재시작합니다.
- 코드를 다시 실행해 보십시오.이제 작동해야 합니다.
from webdriverdownloader import GeckoDriverDownloader # vs ChromeDriverDownloader vs OperaChromiumDriverDownloader
gdd = GeckoDriverDownloader()
gdd.download_and_install()
#gdd.download_and_install("v0.19.0")
그러면 Windows에서 gekodriver.exe로의 경로가 나타납니다.
from selenium import webdriver
driver = webdriver.Firefox(executable_path=r'C:\\Users\\username\\\bin\\geckodriver.exe')
driver.get('https://www.amazon.com/')
Selenium은 DESCRIPTION.rst 파일에서 다음 질문에 답합니다.
★★★★★
=======Selenium은 선택한 브라우저와 인터페이스하기 위해 드라이버가 필요합니다.들어 Firefox에는 Firefox가 필요합니다.
geckodriver <https://github.com/mozilla/geckodriver/releases>
하기 전에 다음 예를 실행하기 전에 설치해야 합니다.들어있도록 하세요.PATH
(예: 설치 장소)/usr/bin
또는/usr/local/bin
.
이 절차를 따르지 않으면 selenium.common 오류가 발생합니다.예외입니다.WebDriverException:메시지: 'geckodriver' 실행 파일이 PATH에 있어야 합니다.
기본적으로 geckodriver를 다운로드하여 압축을 풀고 실행 파일을 /usr/bin 폴더로 이동합니다.
Windows 사용자용
원래 코드를 그대로 사용합니다.
from selenium import webdriver
browser = webdriver.Firefox()
driver.get("https://www.google.com")
그런 다음 드라이버를 다운로드하십시오.mozilla/geckodriver
고정 경로(영구적)에 배치...예를 들어 다음과 같이 입력합니다.
C:\Python35
다음으로 시스템의 환경변수로 이동합니다."System variables(시스템 변수)" 그리드에서 Path 변수를 찾고 다음을 추가합니다.
C:\Python35\gekodriver
geckodriver.exe가 아닌 geckodriver입니다.
가상 환경과 Windows 10(다른 시스템도 마찬가지일 수 있음)을 사용하는 경우 geckodriver만 설치하면 됩니다.가상 환경 디렉토리의 다음 폴더에 exe를 입력합니다.
...\my_virtual_env_directory\Scripts\gekodriver.실행
MacBook 사용자의 경우:
순서 1:
이 링크를 열고 Homebrew 경로를 복사하여 터미널에 붙여넣고 설치합니다.
순서 2:
brew install geckodriver
순서 3:
pip install webdriver-manager
MacOS v10.12.1(Sierra) 및 Python 2.7.10에서는 다음과 같이 사용할 수 있습니다.
def download(url):
firefox_capabilities = DesiredCapabilities.FIREFOX
firefox_capabilities['marionette'] = True
browser = webdriver.Firefox(capabilities=firefox_capabilities,
executable_path=r'/Users/Do01/Documents/crawler-env/geckodriver')
browser.get(url)
return browser.page_source
Rasberry Pi에서는 ARM 드라이버에서 생성하고 파일 웹 드라이버에서 geckodriver와 로그 경로를 설정해야 했습니다.py:
sudo nano /usr/local/lib/python2.7/dist-packages/selenium/webdriver/firefox/webdriver.py
def __init__(self, firefox_profile=None, firefox_binary=None,
timeout=30, capabilities=None, proxy=None,
executable_path="/PATH/gecko/geckodriver",
firefox_options=None,
log_path="/PATH/geckodriver.log"):
설치만으로 충분했습니다.geckodriver
같은 환경에서:
brew install geckodriver
코드는 변경되지 않았습니다.
from selenium import webdriver
browser = webdriver.Firefox()
Gecko Driver에 접속하여 다운로드 섹션에서 Gecko 드라이버의 URL을 가져옵니다.
이 저장소를 복제합니다.https://github.com/jackton1/script_install.git
cd script_install
달려.
./installer --gecko-driver https://github.com/mozilla/geckodriver/releases/download/v0.18.0/geckodriver-v0.25.0-linux64.tar.gz
Windows 10과 Anaconda 2를 사용하고 있습니다.시스템 경로 변수를 설정하려고 했지만 잘 되지 않았습니다.그리고 Anaconda 2/Scripts 폴더에 geckodriver.exe 파일을 추가하기만 하면 모든 것이 정상적으로 작동합니다.
나에게 길은 다음과 같았다.
C:\Users\Bhavya\Anaconda2\Scripts
언급URL : https://stackoverflow.com/questions/40208051/selenium-using-python-geckodriver-executable-needs-to-be-in-path
'programing' 카테고리의 다른 글
HTML 파일은 소스만 보는 것이 아니라 GitHub에서 직접 실행할 수 있습니까? (0) | 2022.09.14 |
---|---|
MySql 오류: 1364 필드 'display_name'에 기본값이 없습니다. (0) | 2022.09.13 |
왼쪽 와일드카드 문의 Marriadb 인덱스 (0) | 2022.09.13 |
데이터베이스/SQL: 경도/위도 데이터 저장 방법 (0) | 2022.09.13 |
Selenium Webdriver 2 Python에서 현재 URL을 얻으려면 어떻게 해야 하나요? (0) | 2022.09.13 |