Am'm noi de programare și a început cu "Pitonul" aproximativ 2 luni în urmă și am de gând peste Sweigart's a Automatiza Lucruri Plictisitoare cu Python text. Am'm folosind INACTIV și instalat deja seleniu module și browser-ul Firefox. Ori de câte ori am încercat pentru a rula webdriver funcție, am primit asta:
from selenium import webdriver
browser = webdriver.Firefox()
Excepție :-
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
During handling of the above exception, another exception occurred:
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.
Cred că am nevoie pentru a seta calea pentru geckodriver`, dar nu sunt sigur cum, deci, poate cineva spune-mi cum aș putea face asta?
seleniu.comune.excepții.WebDriverException: Mesaj: 'geckodriver' executabil trebuie să fie în CALE.
De fapt Seleniu client legături încearcă să localizeze geckodriver
executabile din sistem "CALE". Va trebui să adăugați directorul care conține executabile pentru sistemul calea.
export PATH=$PATH:/path/to/director/de/executabil/descarcat/în/anterior/pas
Acum, puteți rula codul fel ca're face ca mai jos :-
from selenium import webdriver
browser = webdriver.Firefox()
seleniu.comune.excepții.WebDriverException: Mesaj: Temperatura browser-ul binar locație, dar în imposibilitatea de a găsi binar în locația implicită, nu 'moz:firefoxOptions.binar' capacitatea de oferit, și nu binar pavilion amplasat pe linia de comandă
Excepție clar ai instalat firefox o altă locație, în timp ce Seleniul este încercarea de a găsi firefox și lansarea de default location dar n't găsi. Aveți nevoie pentru a oferi în mod explicit firefox instalat binar locație pentru lansarea firefox ca mai jos :-
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)
acest pașii REZOLVATE pentru mine pe ubuntu firefox 50.
Download geckodriver
Copia geckodriver în /usr/local/bin
NU aveți nevoie pentru a adăuga
firefox_capabilities = DesiredCapabilities.FIREFOX
firefox_capabilities['marionette'] = True
firefox_capabilities['binary'] = '/usr/bin/firefox'
browser = webdriver.Firefox(capabilities=firefox_capabilities)
Răspunsul de @saurabh rezolvă problema, dar nu't explica de ce a Automatiza Lucruri Plictisitoare cu Python nu - 't să includă aceste măsuri.
Acest lucru este cauzat ca la carte pe baza de seleniu 2.x și Firefox driver pentru care seria nu are nevoie de gecko driver. Gecko interfață pentru a conduce browser-ul nu a fost disponibil atunci când seleniu a fost în curs de dezvoltare.
De ultima versiune în seleniu 2.seria x este 2.53.6 (a se vedea e.g răspunde, pentru o vizualizare mai ușor de versiuni).
De 2.53.6 versiune pagina nu't mai vorbim gecko, la toate. Dar de la versiunea 3.0.2 documentația în mod explicit trebuie să instalați gecko driver.
Dacă după un upgrade (sau să instalați pe un sistem nou), software-ul care a lucrat bine înainte de (sau pe vechiul sistem) nu't mai funcționează și sunteți într-o grabă, pin seleniu versiunea în virtualenv de a face
pip install selenium==2.53.6
dar, desigur, soluția pe termen lung pentru dezvoltare este de a seta un nou virtualenv cu cea mai recentă versiune de seleniu, instalați gecko șofer și a testa dacă totul funcționează cum era de așteptat. Dar versiune majoră cucui s-ar putea introduce și alte modificări API care nu sunt acoperite de cartea ta, așa că poate doriți să rămânem cu mai vechi, seleniu, până când sunt suficient de încrezători că puteți rezolva orice discrepanțe între selenium2 și selenium3 API-te.
Pentru a configura geckodriver pentru Seleniu Python:
Trebuie să setați geckodriver calea cu FirefoxDriver fel de cod de mai jos:
self.driver = webdriver.Firefox(executable_path = 'D:\Selenium_RiponAlWasim\geckodriver-v0.18.0-win64\geckodriver.exe')
Descărcați geckodriver potrivit pentru sistemul de OPERARE (de la https://github.com/mozilla/geckodriver/releases) -> Extrage-l într-un dosar de alegerea ta -> Setați calea corect așa cum am menționat mai sus
Am'm folosind Python 3.6.2 și Selenium WebDriver 3.4.3 în Windows 10.
Un alt mod de a configura geckodriver:
i) să lipiți pur și Simplu geckodriver.exe sub /Python/Scripts/ (In cazul meu dosarul a fost: C:\Python36\Scripts)
ii) Acum scrie cod simplu ca mai jos:
self.driver = webdriver.Firefox()
Soluția simplă este de a descărca GeckoDriver și adăugați-l la sistemul de CALE. Puteți utiliza oricare dintre cele două abordări:
Descărcați și dezarhivați Geckodriver.
Menționează calea în timp ce inițierea driver:
driver = webdriver.Firefox(executable_path='/your/path/to/geckodriver')
Descărcați și dezarhivați Geckodriver.
a Deschide.bash_profile. Dacă te-ai't creat-o încă, puteți face acest lucru folosind comanda: "atinge"~/.bash_profile
. Apoi deschideți-l cu ajutorul: deschide ~/.bash_profile
având în Vedere GeckoDriver fișier este prezent în folderul Descărcări, puteți să adăugați următoarea linie(s) la .bash_profile
fișier:
PATH="/Users/<your-name>/Downloads/geckodriver:$PATH"
export PATH
De acest lucru sunt anexate calea GeckoDriver pentru Sistemul dvs. CALE. Acest lucru spune de sistem în cazul în care GeckoDriver este situat la executarea ta script-uri de Seleniu.
source ~/.bash_profile
Acest lucru ar trebui să funcționeze, de asemenea, pentru alte *nix soiuri, precum și.
export GV=v0.26.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/
Pentru mac update la:
geckodriver-$GV-macos.tar.gz
Cel mai simplu mod pentru windows! Descărcați ultima versiune de geckodriver` de aici. Adaugă geckodriver.exe file de piton director (sau orice alt director, care deja în "CALE"). Acest lucru ar trebui să rezolve problema (Testat pe Windows 10)
Unele suplimentare de intrare/clarificare pentru viitor cititorii acestui thread:
Următoarele este de ajuns ca o rezoluție pentru Windows 7, Python 3.6, seleniu 3.11:
@dsalaj's notă în acest thread mai devreme pentru Unix se aplică la Windows la fel de bine; tinkering cu CALEA env. variabilă la nivelul Ferestrelor și a reporni sistemul de operare Windows pot fi evitate.
(1) Descărcați geckodriver (așa cum este descris în acest thread mai devreme) și locul (dezarhivat) geckdriver.exe la X:\Folder\of\your\choice
(2) cod Python eșantion:
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
Note: (1) poate dura aproximativ 10 secunde pentru codul de mai sus pentru a deschide browser-ul Firefox pentru url-ul specificat. (2) În consola python ar arăta următorul mesaj de eroare dacă nu's nici un server care rulează deja la url-ul specificat sau care deservesc o pagină cu titlul conțin șirul 'Django': seleniu.comune.excepții.WebDriverException: Mesaj: Ajuns la pagina de eroare: about:neterror?e=connectionFailure&u=http%3A//localhost%3A8000/&c=UTF-8&f=regular&d=Firefox%20can%E2%80%9
Am'am descoperit de fapt puteți utiliza cea mai recentă geckodriver cu punerea în sistemul calea. În prezent, am'm, folosind
https://github.com/mozilla/geckodriver/releases/download/v0.12.0/geckodriver-v0.12.0-win64.zip
Firefox 50.1.0
Python 3.5.2
Seleniu 3.0.2
Windows 10
Am'm execută o VirtualEnv (pe care am gestiona folosind PyCharm, presupun ca foloseste Pip pentru a instala totul)
În codul de mai jos pot folosi o cale specifică pentru geckodriver folosind executable_path paramater (I discoverd asta de a avea o privire în Lib\site-packages\selenium\webdriver\firefox\webdriver.py ). Notă am o bănuială că ordinea de parametrul argumente atunci când de asteptare webdriver este important, motiv pentru care executable_path este trecută în codul meu (2 ultima linie de pe la extrema dreapta)
Puteți observa, de asemenea, eu folosesc un custom firefox Profil pentru a obține în jurul valorii de sec_error_unknown_issuer problemă care va rula în cazul în care site-ul tine're de testare are un certificat. vezi https://stackoverflow.com/questions/16879566/how-to-disable-firefoxs-untrusted-connection-warning-using-selenium
După investigații s-a constatat că Marionete driver este incompletă și încă în curs de desfășurare, și nici o cantitate de stabilire a diferitelor capacități sau opțiuni de profil pentru demiterea sau setarea certifcates fost de gând să lucreze. Așa a fost mai ușor pentru a utiliza un profil personalizat.
Oricum aici's codului cu privire la modul în care am primit geckodriver să lucreze fără a fi în cale:
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')
Am'm folosind Windows 10 și aceasta a lucrat pentru mine:
Seleniu răspunde la această întrebare în DESCRIEREA lor.prima
Drivers
=======
Selenium requires a driver to interface with the chosen browser. Firefox,
for example, requires `geckodriver <https://github.com/mozilla/geckodriver/releases>`_, which needs to be installed before the below examples can be run. Make sure it's in your `PATH`, e. g., place it in `/usr/bin` or `/usr/local/bin`.
Failure to observe this step will give you an error `selenium.common.exceptions.WebDriverException: Message: 'geckodriver' executable needs to be in PATH.
Practic, trebuie doar să descărcați geckodriver, despachetați-l și pentru a muta executabil la /usr/bin folder
L's într-adevăr destul de trist că niciuna dintre cărțile publicate pe Seleniu/Python și cele mai multe comentarii pe această temă, prin intermediul Google nu explica în mod clar pathing logica pentru a stabili acest lucru pe Mac (totul este Windows!!!!). Youtubes toate preluare, la "dupa" te'am pathing setup (în mintea mea, ieftină cale de ieșire!). Deci, pentru tine minunat utilizatorii de Mac, utilizați următoarele opțiuni pentru a edita bash calea fișiere:
>$atingeți ~/.bash_profile; deschide ~/.bash_profile
Apoi se adaugă o cale ceva de genul asta.... *# CALE setare pentru geckodriver PATH="/usr/bin/geckodriver:${PATH}" CALEA de export
PATH="~/Users/yourNamePATH/VEnvPythonInterpreter/lib/python2.7/site-packages/selenium/webdriver/firefox/:${PATH}" CALEA de export
PATH="/Users/yournamePATH/VEnvPythonInterpreter/lib/python2.7/site-packages/selenium/webdriver/common/service.py:${PATH}" CALEA de export*
Aceasta a lucrat pentru mine. Preocuparea mea este când va Seleniu Windows comunitate începe să joci jocul real și includ noi utilizatorii de Mac în arogant membru al clubului.
Pentru utilizatorii de windows
utilizați codul original ca's:
from selenium import webdriver
browser = webdriver.Firefox()
driver.get("https://www.google.com")
apoi, descărcați driverul de: mozilla/geckodriver
Puneți-l într-o cale fix (permanent).. ca un exemplu, am pus-o în:
C:\Python35
Apoi du-te la variabilele de mediu ale sistemului, în grila de "variabile de Sistem" uita-te pentru Calea variabilă și se adaugă:
;C:\Python35\geckodriver
geckodriver, nu geckodriver.exe.
Vizita Gecko Driver a se obține url-ul pentru gecko driver de la secțiunea Descărcări.
Clona acest repo https://github.com/jackton1/script_install.git
cd script_install
Rula
./installer --gecko-driver https://github.com/mozilla/geckodriver/releases/download/v0.18.0/geckodriver-v0.25.0-linux64.tar.gz
Pe Raspberry Pi am avut de a crea de la BRAȚUL șoferului și a stabilit geckodriver și log calea în:
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"):
Am văzut discuții încă vorbesc despre vechiul mod de a înființa geckodriver prin descărcarea binare și configurarea manual calea.
Acest lucru poate fi realizat în mod automat folosind webdriver-manager
pip install webdriver-manager
Acum codul de mai sus în cauză va lucra, pur și simplu, cu partea de jos a schimba,
from selenium import webdriver
from webdriver_manager.firefox import GeckoDriverManager
driver = webdriver.Firefox(executable_path=GeckoDriverManager().install())
Dacă doriți să adăugați căi de driver pe windows 10:
Click dreapta pe "Acest PC" pictogramă și selectați "Proprietăți"
Faceți clic pe "Setări Avansate de Sistem"
Faceți clic pe "Variabile de Mediu" în partea de jos a ecranului
În "Variabilele de Utilizator în secțiunea" highlight "Calea" și faceți clic pe "Edit"
Adaugă căi pentru variabilele făcând clic pe "Nou" și tastarea în cale pentru șofer ești adăugarea și a lovi enter.
Odată ce ați terminat de introdus în calea, faceți clic pe "OK"
Să păstreze făcând clic pe "OK" până când ați închis toate ecranele