ซีลีเนียมโดยใช้ Python - โปรแกรมปฏิบัติการ Geckodriver จำเป็นต้องอยู่ใน PATH


435

ฉันยังใหม่กับการเขียนโปรแกรมและเริ่มต้นเมื่อPythonประมาณ 2 เดือนที่แล้วและกำลังไปที่Automate the Boring Stuffของ Sweigart ด้วยข้อความPython ฉันใช้ IDLE แล้วติดตั้งโมดูลซีลีเนียมและเบราว์เซอร์ Firefox แล้ว เมื่อใดก็ตามที่ฉันพยายามเรียกใช้ฟังก์ชั่น webdriver ฉันจะได้รับสิ่งนี้:

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

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. 

ฉันคิดว่าฉันต้องกำหนดเส้นทางให้geckodriverแต่ไม่แน่ใจว่าจะทำอย่างไรเพื่อให้ทุกคนสามารถบอกฉันว่าฉันจะทำอย่างไร


2
โปรดดูคำตอบของฉันในคำถามที่คล้ายกันที่นี่
Andrew

ฉันกำลังวาง geckodriver.exe ในไดเรกทอรี Python / Python35 ดังนั้นจึงมีเส้นทางเดียวกันและฉันพบปัญหามากขึ้น
tadm123

80
บน Mac:brew install geckodriver
Nostalg.io

1
ฉันพบว่าการใช้งานผ่านเบราว์เซอร์ Chrome นั้นเร็วกว่า Firefox เล็กน้อยคุณจะต้องดาวน์โหลดสิ่งchromedriverนี้
tadm123

หมายเหตุ: มีTestcafeที่เพิ่งเปิดแหล่งที่มา มันไม่จำเป็นต้องมีปลั๊กอินของเบราว์เซอร์ แต่ก็มีอยู่ในตัว ฉันต้องการใช้ซีลีเนียม แต่ดูเหมือนว่าเป็นทางเลือกที่น่าสนใจ
Ehvince

คำตอบ:


355

selenium.common.exceptions.WebDriverException: ข้อความ: ปฏิบัติการ 'geckodriver' จะต้องอยู่ใน PATH

ก่อนอื่นคุณจะต้องดาวน์โหลดตุ๊กแกปฏิบัติการล่าสุดจากที่นี่เพื่อเรียกใช้ firefox ล่าสุดโดยใช้ซีลีเนียม

จริงซีลีเนียมผูกลูกค้าพยายามที่จะค้นหาที่ปฏิบัติการได้จากระบบgeckodriver PATHคุณจะต้องเพิ่มไดเรกทอรีที่มีไฟล์เรียกทำงานลงในพา ธ ของระบบ

  • บนระบบ Unix คุณสามารถทำสิ่งต่อไปนี้เพื่อผนวกเข้ากับพา ธ การค้นหาของระบบของคุณหากคุณใช้เปลือกที่เข้ากันได้กับ bash:

    export PATH=$PATH:/path/to/directory/of/executable/downloaded/in/previous/step
  • ใน Windows คุณจะต้องปรับปรุงตัวแปรระบบเส้นทางที่จะเพิ่มเส้นทางไดเรกทอรีแบบเต็มไปยัง geckodriver ปฏิบัติการ ด้วยตนเองหรือบรรทัดคำสั่ง(ไม่ลืมที่จะเริ่มระบบของคุณหลังจากที่เพิ่ม geckodriver ปฏิบัติการเข้าไปในเส้นทางของระบบที่จะมีผลบังคับใช้) หลักการเหมือนกับ Unix

ตอนนี้คุณสามารถเรียกใช้รหัสของคุณเช่นเดียวกับที่คุณทำดังนี้: -

from selenium import webdriver

browser = webdriver.Firefox()

selenium.common.exceptions.WebDriverException: ข้อความ: ตำแหน่งไบนารีของเบราว์เซอร์ที่คาดไว้ แต่ไม่สามารถค้นหาไบนารีในตำแหน่งเริ่มต้นไม่มีความสามารถในการ 'moz: firefoxOptions.binary' และไม่มีการตั้งค่าสถานะไบนารีบนบรรทัดคำสั่ง

ข้อยกเว้นระบุอย่างชัดเจนว่าคุณได้ติดตั้ง Firefox ในตำแหน่งอื่นขณะที่ซีลีเนียมพยายามค้นหา Firefox และเริ่มต้นจากตำแหน่งเริ่มต้น แต่ไม่พบ คุณต้องระบุตำแหน่งไบนารีที่ติดตั้ง 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)

8
ขอบคุณ แต่ผมตั้งค่าของฉันgeckodriver.exeในC:\Python\Python35\seleniumไดเรกทอรีและฉันกำหนดเส้นทางเช่นคุณอธิบาย แต่มันให้ฉันข้อผิดพลาดดังต่อไปนี้
tadm123

4
ขอบคุณ @Saurabh Gaur ตอนนี้ทำงานได้แล้ว ฉันเพิ่มเส้นทางของ Firefox ไปยังตัวแปรระบบด้วยตนเองและมันก็ใช้ได้ ใช้เวลาเล็กน้อยในการเปิดตัว แต่ฉันเดาว่าเป็นเรื่องปกติ ขอบคุณ!
tadm123

3
ฉันได้รับข้อผิดพลาด "WebDriverException: ข้อความ: ไม่สามารถเริ่มเบราว์เซอร์: ปฏิเสธสิทธิ์" ในตอนแรกเมื่อฉันเริ่มระบุเส้นทางไบนารีของ Firefox แต่การรีสตาร์ทคอมพิวเตอร์ (Windows 10) แก้ปัญหาได้ - ในกรณีที่มีคนอื่นตีปัญหาเดียวกันกับฉัน
NoSuchElephantException

3
ไบนารีคืออะไร นั่นแปลว่าปฏิบัติการได้หรือไม่?
ผู้ใช้

12
นอกเหนือจากคำตอบนี้ฉันต้องการขยายการตั้งค่าPATHในสภาพแวดล้อม unix คุณสามารถตั้งค่าเป็นรหัสได้เนื่องจากคุณไม่ต้องการใช้ระบบอย่างกว้าง ๆ : os.environ["PATH"] += os.pathsep + 'path/to/dir/containing/geckodriver/' หรือเพียงแค่เก็บไบนารี geckodriver ไว้ในไดเรกทอรีที่มีอยู่แล้วในเส้นทางของคุณ:mv geckodriver /usr/local/bin
dsalaj

161

วิธีนี้แก้ไขได้สำหรับฉัน

from selenium import webdriver
driver = webdriver.Firefox(executable_path=r'your\path\geckodriver.exe')
driver.get('http://inventwithpython.com')

หากคุณได้รับอนุญาตผิดลองลบ [r '] ออกจากเส้นทางเพียงแค่ "excecutable_path =' เส้นทาง \ to \ your'diretory '"
Darius

@adityarawat คุณใช้ระบบปฏิบัติการอะไรอยู่
Nesa

แต่ตอนนี้ฉันได้รับ OSError แทนการอนุญาตที่ผิด ฉันจัดการคัดลอก geckodriver ไปยัง / usr / local / bin แต่ตอนนี้ข้อผิดพลาดใหม่นี้กำลังฆ่าฉัน
aditya rawat

@ adityarawat คุณสามารถดาวน์โหลด geckodriver อย่างอิสระจากที่นี่: github.com/mozilla/geckodriver/releasesสารสกัดด้วย tar และทำให้มันทำงานได้ด้วย chmod + x คุณไม่จำเป็นต้องอยู่ใน / usr / local / bin คุณเพียงแค่มี เพื่อระบุเส้นทางของคุณไปยัง
Nesa

เพื่อความชัดเจนฉันได้ดาวน์โหลดไฟล์ arm7hf.tar และแตกไฟล์แล้วและเพิ่มลงในพา ธ โดยใช้คำสั่ง export PATH=$PATH:geckodriver(แยกในเดสก์ท็อป) แต่มันก็ไม่ได้ช่วยอะไร ฉันยังได้รับ OSError [errno 8]
aditya rawat

121

ขั้นตอนนี้ได้รับการแก้ไขสำหรับฉันบน Ubuntu firefox 50

  1. ดาวน์โหลดgeckodriver

  2. คัดลอก geckodriver ใน / usr / local / bin

คุณไม่จำเป็นต้องเพิ่ม

firefox_capabilities = DesiredCapabilities.FIREFOX
firefox_capabilities['marionette'] = True
firefox_capabilities['binary'] = '/usr/bin/firefox'
browser = webdriver.Firefox(capabilities=firefox_capabilities)

ในรหัสของคุณคุณไม่สามารถเพิ่มตัวแปรความสามารถได้
Andrea Perdicchia

คุณจะรู้วิธีตั้งค่าไดเรกทอรีดาวน์โหลดสำหรับ Firefox หรือไม่ ฉันเพิ่มคำถามต่อไปนี้การตั้งค่าการตั้งค่า Firefox ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชมมาก
d84_n1nj4

ใน Debian หรือ Ubuntu คุณต้องใช้คำสั่ง apt เพื่อติดตั้ง Firefox สำหรับ Windows ฉันไม่มีความคิดขอโทษ
Andrea Perdicchia

ขอบคุณ หลังจากใช้คำตอบนี้ฉันใช้วิธีนี้ต่อไปในการจัดการปัญหาการติดตาม: stackoverflow.com/questions/43713445/…
HackNone

ขอบคุณ Pycharm ไม่พบ geckodriver แม้ว่าจะอยู่ในบ้านและในโฟลเดอร์โครงการเอง แต่หลังจากย้ายไปที่ / usr / local / bin มันทำงานได้อย่างสมบูรณ์
Ronald Das

32

คำตอบโดย @saurabh แก้ปัญหา แต่ไม่ได้อธิบายว่าทำไมAutomate the Boring Stuff with Pythonไม่ได้รวมขั้นตอนเหล่านั้นไว้

สิ่งนี้เกิดจากหนังสือที่ใช้ซีลีเนียม 2.x และไดรเวอร์ Firefox สำหรับซีรี่ย์นั้นไม่ต้องการไดรเวอร์ตุ๊กแก อินเตอร์เฟซ Gecko ในการขับเคลื่อนเบราว์เซอร์ไม่สามารถใช้ได้เมื่อมีการพัฒนาซีลีเนียม

รุ่นล่าสุดในซีรีส์ซีลีเนียม 2.x คือ 2.53.6 (ดูเช่นคำตอบนี้สำหรับมุมมองที่ง่ายของรุ่น)

หน้า 2.53.6 รุ่นไม่ได้พูดถึงตุ๊กแกที่ทั้งหมด แต่เนื่องจากเวอร์ชัน 3.0.2 เอกสารระบุอย่างชัดเจนว่าคุณต้องติดตั้งไดรเวอร์ตุ๊กแก

หากหลังจากการอัปเกรด (หรือติดตั้งในระบบใหม่) ซอฟต์แวร์ของคุณที่ทำงานได้ดีก่อน (หรือบนระบบเก่าของคุณ) ไม่ทำงานอีกต่อไปและคุณรีบเร่งแล้วให้ตรึงซีลีเนียมเวอร์ชันในเวอร์ชวลเรนโดยทำ

pip install selenium==2.53.6

แต่แน่นอนว่าทางออกระยะยาวสำหรับการพัฒนาคือการติดตั้ง virtualenv ใหม่ด้วยซีลีเนียมรุ่นล่าสุดติดตั้งไดรเวอร์ตุ๊กแกและทดสอบว่าทุกอย่างยังคงทำงานได้อย่างที่คาดไว้ แต่การชนรุ่นหลักอาจแนะนำการเปลี่ยนแปลง API อื่น ๆ ที่ไม่ครอบคลุมในหนังสือของคุณดังนั้นคุณอาจต้องการติดกับซีลีเนียมที่เก่ากว่าจนกว่าคุณจะมั่นใจพอที่จะสามารถแก้ไขความแตกต่างระหว่างซีลีเนียม 2 และซีลีเนียม 3 API ด้วยตัวคุณเอง


2
ฉันหวังว่านี่คือคำตอบที่ดีที่สุด
sudo-nim

1
สิ่งนี้ช่วยฉันขอบคุณ
Thanks

24

ใน macOS ที่ติดตั้งHomebrewแล้วคุณสามารถเรียกใช้คำสั่ง Terminal ได้

$ brew install geckodriver

เนื่องจาก homebrew ได้ขยายเวลาไปแล้วจึงPATHไม่จำเป็นต้องแก้ไขสคริปต์เริ่มต้นใด ๆ


@roskakori ฉันทำสิ่งนี้และได้รับการติดตั้งเรียบร้อยแล้ว แต่ฉันยังคงได้รับข้อผิดพลาดเดียวกัน
JKC

ขอบคุณสำหรับสิ่งนี้ ใช้ Firefox 72.0.2 & Selenium 3.141.0
Sam

17

วิธีตั้งค่า geckodriver สำหรับ Selenium Python:

จำเป็นต้องตั้งค่าเส้นทาง geckodriver ด้วย FirefoxDriver ดังนี้โค้ดด้านล่าง:

self.driver = webdriver.Firefox(executable_path = 'D:\Selenium_RiponAlWasim\geckodriver-v0.18.0-win64\geckodriver.exe')

ดาวน์โหลด geckodriver สำหรับระบบปฏิบัติการที่เหมาะสมของคุณ (จากhttps://github.com/mozilla/geckodriver/releases ) -> แตกไฟล์ในโฟลเดอร์ที่คุณเลือก -> กำหนดเส้นทางให้ถูกต้องตามที่กล่าวไว้ข้างต้น

ฉันใช้ Python 3.6.2 และ Selenium WebDriver 3.4.3 ใน Windows 10

อีกวิธีในการตั้งค่า geckodriver:

i) เพียงวาง geckodriver.exe ใต้ / Python / Scripts / (ในกรณีของฉันโฟลเดอร์คือ: C: \ Python36 \ Scripts)
ii) ตอนนี้เขียนโค้ดง่าย ๆ ดังนี้:

self.driver = webdriver.Firefox()

17

หากคุณใช้Anacondaสิ่งที่คุณต้องทำคือเปิดใช้งานสภาพแวดล้อมเสมือนจริงของคุณแล้วติดตั้งgeckodriverโดยใช้คำสั่งต่อไปนี้:

    conda install -c conda-forge geckodriver

ใช่มันติดตั้ง geckodriver แต่ข้อผิดพลาด pycharm ยังคงเหมือนเดิม
ดูแลเว็บ

สวัสดีฉันลองหลายสิ่งหลายอย่างและนั่นเป็นเพียงสิ่งเดียวที่ใช้ได้ผลกับฉัน :-) ขอบคุณ
tezzaaa

12

Ubuntu 18.04+ และตุ๊กแกรุ่นใหม่ล่าสุด

สิ่งนี้ควรทำงานกับ * พันธุ์อื่น ๆ เช่นกัน

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/

สำหรับการอัปเดต mac เป็น:

geckodriver-$GV-macos.tar.gz

12

ฉันเห็นการสนทนายังคงพูดคุยเกี่ยวกับวิธีเก่าแก่ของการตั้งค่า geckodriver โดยการดาวน์โหลดไบนารี่และกำหนดเส้นทางด้วยตนเอง

สิ่งนี้สามารถทำได้โดยอัตโนมัติโดยใช้webdriver-manager

pip install webdriver-manager

ตอนนี้โค้ดด้านบนในคำถามจะทำงานได้โดยง่ายด้วยการเปลี่ยนแปลงด้านล่าง

from selenium import webdriver
from webdriver_manager.firefox import GeckoDriverManager

driver = webdriver.Firefox(executable_path=GeckoDriverManager().install())

2
สิ่งนี้ใช้ได้สำหรับฉัน ขอบคุณ!
igorkf

Safari หรือ Internet Explorer มีตัวจัดการไดรเวอร์ที่คล้ายคลึงกันหรือไม่
Mischief_Monkey

11

วิธีที่ง่ายที่สุดสำหรับ windows!
ดาวน์โหลดรุ่นล่าสุดของgeckodriverจากที่นี่ เพิ่มไฟล์geckodriver.exeไปยังไดเรกทอรีหลาม (หรือไดเรกทอรีอื่น ๆ ที่มีอยู่แล้วPATH) สิ่งนี้ควรแก้ปัญหา (ทดสอบบน Windows 10)


ไม่ใช่หน้าต่างที่แย่ที่สุด ขอบคุณสำหรับการแก้ปัญหาอย่างรวดเร็ว
AJ_

นี่คือทางออกที่ง่ายที่สุด !! ไม่จำเป็นต้องรีสตาร์ทคอมพิวเตอร์ของคุณ!
olenscki

8

ขั้นตอนสำหรับ MAC:

ทางออกที่ง่ายคือการดาวน์โหลด GeckoDriver และเพิ่มเข้าไปในระบบของคุณ คุณสามารถใช้หนึ่งในสองวิธีต่อไปนี้:

วิธีสั้น:

1) ดาวน์โหลดและเปิดเครื่องรูดGeckodriver

2) พูดถึงเส้นทางในขณะที่เริ่มไดรเวอร์:

driver = webdriver.Firefox(executable_path='/your/path/to/geckodriver')

วิธียาว:

1) ดาวน์โหลดและเปิดเครื่องรูดGeckodriver

2) .bash_profileเปิด หากคุณไม่ได้สร้างมันขึ้นมา touch ~/.bash_profileแต่คุณสามารถทำได้โดยใช้คำสั่ง: จากนั้นเปิดโดยใช้:open ~/.bash_profile

3) พิจารณาไฟล์ GeckoDriver อยู่ในโฟลเดอร์ดาวน์โหลดของคุณคุณสามารถเพิ่มบรรทัดต่อไปนี้ใน.bash_profileไฟล์:

PATH="/Users/<your-name>/Downloads/geckodriver:$PATH"
export PATH

จากนี้คุณจะผนวกเส้นทางไปยัง GeckoDriver กับ System PATH ของคุณ สิ่งนี้บอกระบบที่ GeckoDriver ตั้งอยู่เมื่อเรียกใช้งานสคริปต์ซีลีเนียมของคุณ

4) บันทึก.bash_profileและบังคับให้ดำเนินการ สิ่งนี้จะโหลดค่าทันทีโดยไม่ต้องรีบูต เมื่อต้องการทำสิ่งนี้คุณสามารถเรียกใช้คำสั่งต่อไปนี้:

source ~/.bash_profile

5) แค่นั้นแหละ คุณเสร็จแล้ว! คุณสามารถรันสคริปต์ Python ได้ทันที


1
ฉันสามารถดาวน์โหลดgeckodriverด้วย Homebrew: brew install geckodriverจากนั้นเริ่ม Firefox ผ่าน:driver = webdriver.Firefox(executable_path="/usr/local/bin/geckodriver")
Winterflags

7

การป้อนข้อมูลเพิ่มเติม / ชี้แจงเพิ่มเติมสำหรับผู้อ่านในอนาคตของหัวข้อนี้:

ความพอเพียงต่อไปนี้เป็นความละเอียดสำหรับ Windows 7, Python 3.6, selenium 3.11:

บันทึกของ @ dsalaj ในเธรดนี้ก่อนหน้านี้สำหรับ Unix นั้นใช้ได้กับ Windows เช่นกัน; การซ่อมแซมด้วย PATH env ตัวแปรที่ระดับ Windows และสามารถเริ่มการทำงานของระบบ Windows ใหม่ได้

(1) ดาวน์โหลด geckodriver (ตามที่อธิบายไว้ในหัวข้อนี้ก่อนหน้านี้) และวาง (unzipped) 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) อาจใช้เวลาประมาณ 10 วินาทีสำหรับโค้ดด้านบนเพื่อเปิดเบราว์เซอร์ Firefox สำหรับ URL ที่ระบุ
(2) คอนโซล python จะแสดงข้อผิดพลาดต่อไปนี้หากไม่มีเซิร์ฟเวอร์ที่ทำงานอยู่ใน url ที่ระบุหรือให้บริการหน้าเว็บที่มีชื่อที่มีสตริง 'Django': selenium.common.exceptions.WebDriverException: ข้อความ: หน้าข้อผิดพลาดถึง: เกี่ยวกับ : neterror E = connectionFailure & U = http% 3A // localhost% 3A8000 / & c = UTF-8 & F = D = ปกติและ Firefox% 20can% E2% 80% 9


ขอบคุณฉันลองใช้วิธีแก้ไขปัญหาอื่น ๆ ทั้งหมด แต่มีเพียงคุณเท่านั้นที่ทำงานบน Windows ของฉัน!
pso

4

ฉันค้นพบว่าคุณสามารถใช้ตุ๊กแกตัวล่าสุดได้โดยไม่ต้องใส่ไว้ในเส้นทางของระบบ ขณะนี้ฉันกำลังใช้

https://github.com/mozilla/geckodriver/releases/download/v0.12.0/geckodriver-v0.12.0-win64.zip

Firefox 50.1.0

Python 3.5.2

ซีลีเนียม 3.0.2

Windows 10

ฉันใช้ VirtualEnv (ซึ่งฉันจัดการโดยใช้ PyCharm ฉันคิดว่ามันใช้ Pip เพื่อติดตั้งทุกอย่าง)

ในรหัสต่อไปนี้ฉันสามารถใช้พา ธ เฉพาะสำหรับ geckodriver โดยใช้ executable_path พารามิเตอร์ (ฉันค้นพบสิ่งนี้โดยดูใน Lib \ site-packages \ selenium \ webdriver \ firefox \ webdriver.py) หมายเหตุฉันสงสัยว่าลำดับของพารามิเตอร์ที่ขัดแย้งกันเมื่อเรียก webdriver นั้นมีความสำคัญซึ่งเป็นสาเหตุที่ executable_path อยู่ในรหัสของฉัน (บรรทัดสุดท้ายที่ 2 ออกไปทางขวาสุด)

คุณอาจสังเกตเห็นว่าฉันใช้โปรไฟล์ firefox แบบกำหนดเองเพื่อแก้ไขปัญหา sec_error_unknown_issuer ที่คุณจะพบหากเว็บไซต์ที่คุณกำลังทดสอบมีใบรับรองที่ไม่น่าเชื่อถือ ดูวิธีปิดการเตือนการเชื่อมต่อที่ไม่น่าเชื่อถือของ Firefox โดยใช้ Selenium

หลังจากการตรวจสอบพบว่าไดรเวอร์ Marionette ไม่สมบูรณ์และยังอยู่ในระหว่างดำเนินการและไม่มีการตั้งค่าความสามารถหรือตัวเลือกโปรไฟล์จำนวนมากสำหรับการยกเลิกหรือการตั้งค่าหนังสือรับรองจะทำงาน ดังนั้นจึงเป็นการง่ายกว่าที่จะใช้โปรไฟล์ที่กำหนดเอง

อย่างไรก็ตามนี่คือรหัสเกี่ยวกับวิธีที่ฉันได้ตุ๊กแกทำงานโดยไม่ต้องอยู่ในเส้นทาง:

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')

ฉันได้ SyntaxError: (ข้อผิดพลาด unicode) ตัวแปลงสัญญาณ 'unicodeescape' ไม่สามารถถอดรหัสไบต์ได้ ... และฉันต้องเปลี่ยนเส้นทางตุ๊กแกเป็น epath = r'C: \ Users \ step_ \ Documents \ mtg_buyer \ geckodrivers \ geckodrivers \ geckodriver.exe ' อาจเป็นเพราะฉันใช้ Windows 10 เป็นภาษาจีน?
Endle_Zhenbo

3

ฉันใช้ Windows 10 และสิ่งนี้ใช้ได้กับฉัน:

  1. ดาวน์โหลด geckodriver จากที่นี่ที่นี่ดาวน์โหลดรุ่นที่เหมาะสมสำหรับคอมพิวเตอร์ที่คุณใช้งานอยู่
  2. แตกไฟล์ที่คุณเพิ่งดาวน์โหลดและตัด / คัดลอกไฟล์ ".exe" ที่มีอยู่
  3. นำทางไปยัง C: {โฟลเดอร์รูทของคุณ} ของฉันคือ C: \ Python27 วางไฟล์ geckodriver.exe ในโฟลเดอร์นี้
  4. รีสตาร์ทสภาพแวดล้อมการพัฒนาของคุณ
  5. ลองเรียกใช้รหัสอีกครั้งรหัสนี้ควรใช้งานได้แล้ว

ขอบคุณที่กล่าวถึงว่าคุณต้องรีสตาร์ทสภาพแวดล้อมการพัฒนา
Deep

3

ลองติดตั้ง 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')

2

มันค่อนข้างเศร้าจริง ๆ ที่ไม่มีหนังสือใด ๆ ที่ตีพิมพ์ใน Selenium / Python และความคิดเห็นส่วนใหญ่เกี่ยวกับปัญหานี้ผ่านทาง Google ไม่ได้อธิบายอย่างชัดเจนถึงเหตุผลในการตั้งค่าบน Mac (ทุกอย่างคือ Windows !!!!) youtubes รับทั้งหมดที่ "หลังจาก" คุณมีการตั้งค่าเส้นทาง (ในใจของฉันทางออกถูก!) ดังนั้นสำหรับผู้ใช้ Mac ที่ยอดเยี่ยมให้ใช้สิ่งต่อไปนี้เพื่อแก้ไขไฟล์ bash path ของคุณ:

> $ touch ~ / .bash_profile; เปิด ~ / .bash_profile

จากนั้นเพิ่มเส้นทางบางอย่างเช่นนี้ .... * # การตั้งค่าเส้นทางสำหรับ geckodriver PATH =“ / usr / bin / geckodriver: $ {PATH}” เส้นทางการส่งออก

การตั้งค่า PATH สำหรับซีลีเนียม firefox

PATH =“ ~ / Users / yourNamePATH / VEnvPythonInterpreter / lib / python2.7 / site-packages / ซีลีเนียม / webdriver / firefox /: $ {PATH}” PATH ส่งออก

การตั้งค่า PATH สำหรับการเรียกใช้งานบนไดรเวอร์ firefox

PATH =“ / Users / yournamePATH / VEnvPythonInterpreter / lib / python2.7 / site-packages / selenium / webdriver / common / service.py: $ {PATH}” ส่งออก PATH *

สิ่งนี้ใช้ได้สำหรับฉัน ความกังวลของฉันคือชุมชนซีลีเนียม Windows จะเริ่มเล่นเกมจริงเมื่อใดและรวมผู้ใช้ Mac ของเราเข้าเป็นสมาชิกสโมสรที่หยิ่งยโส


2

ซีลีเนียมตอบคำถามนี้ใน DESCRIPTION.rst

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.

โดยทั่วไปเพียงดาวน์โหลด geckodriver แกะและย้ายปฏิบัติการไปยังโฟลเดอร์ / usr / bin ของคุณ


คำพูดนี้มีทิศทางที่ทำงานบน linux mint 18
Elliot Robert

2

สำหรับผู้ใช้ windows

ใช้รหัสเดิมตามที่:

from selenium import webdriver
browser = webdriver.Firefox()
driver.get("https://www.google.com")

จากนั้นดาวน์โหลดไดรเวอร์จาก: mozilla / geckodriver

วางไว้ในเส้นทางคงที่ (ถาวร) .. เป็นตัวอย่างฉันใส่ไว้ใน:

C: \ Python35

จากนั้นไปที่ตัวแปรสภาพแวดล้อมของระบบในตารางของ "ตัวแปรระบบ" มองหาตัวแปร Path และเพิ่ม:

; C: \ Python35 \ geckodriver

geckodriver, ไม่ geckodriver.exe


geckodriver ไม่ใช่ geckodriver.exe
Saurabh Chandra Patel

1

ใน Raspberry Pi ฉันต้องสร้างจากไดรเวอร์ ARM และตั้งค่า geckodriver และ log path ใน:

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"):

1

หากคุณใช้สภาพแวดล้อมเสมือนจริงและ win10 (อาจเป็นระบบอื่น ๆ ) คุณเพียงแค่ใส่ geckodriver.exe ในโฟลเดอร์ต่อไปนี้ในไดเรกทอรีสภาพแวดล้อมเสมือนของคุณ:

... \ my_virtual_env_directory \ Scripts \ geckodriver.exe


1
from webdriverdownloader import GeckoDriverDownloader # vs ChromeDriverDownloader vs OperaChromiumDriverDownloader
gdd = GeckoDriverDownloader()
gdd.download_and_install()
#gdd.download_and_install("v0.19.0")

นี่จะพาคุณไปยัง gekodriver.exe ของคุณบน windows

from selenium import webdriver
driver = webdriver.Firefox(executable_path=r'C:\\Users\\username\\\bin\\geckodriver.exe')
driver.get('https://www.amazon.com/')

0

Mac 10.12.1 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

0

ฉันใช้ Windows 10 และ Anaconda2 ฉันลองตั้งค่าตัวแปรพา ธ ของระบบ แต่ไม่ได้ผล จากนั้นฉันก็เพิ่มไฟล์ geckodriver.exe ไปยังโฟลเดอร์ Anaconda2 / Scripts และทุกอย่างใช้งานได้ดีในขณะนี้ สำหรับฉันเส้นทางคือ: -

C: \ Users \ Bhavya \ Anaconda2 \ Scripts


0

หากคุณต้องการเพิ่มเส้นทางไดรเวอร์ใน windows 10:

  1. คลิกขวาที่ไอคอน "พีซีนี้" และเลือก "คุณสมบัติ" ป้อนคำอธิบายรูปภาพที่นี่

  2. คลิกที่ "การตั้งค่าระบบขั้นสูง"

  3. คลิกที่“ ตัวแปรสภาพแวดล้อม” ที่ด้านล่างของหน้าจอ
  4. ในส่วน“ ตัวแปรผู้ใช้” ไฮไลต์“ เส้นทาง” และคลิก“ แก้ไข”
  5. เพิ่มเส้นทางไปยังตัวแปรของคุณโดยคลิกที่ "ใหม่" และพิมพ์ในเส้นทางสำหรับไดรเวอร์ที่คุณกำลังเพิ่มและกดปุ่ม Enter
  6. เมื่อคุณเข้าสู่เส้นทางให้คลิก“ ตกลง”
  7. คลิก“ ตกลง” ต่อไปจนกว่าคุณจะปิดหน้าจอทั้งหมด


0
  1. ตรวจสอบให้แน่ใจว่าคุณมีไดรเวอร์รุ่นที่ถูกต้อง (geckodriver), x86 หรือ 64
  2. ตรวจสอบให้แน่ใจว่าคุณกำลังตรวจสอบสภาพแวดล้อมที่เหมาะสมตัวอย่างเช่นงานกำลังทำงานอยู่ใน Docker ในขณะที่ environmnet ถูกตรวจสอบคือโฮสต์ OS

0

สำหรับฉันมันก็เพียงพอแล้วที่จะติดตั้ง geckodriver ในสภาพแวดล้อมเดียวกัน:

$ brew install geckodriver

และรหัสไม่เปลี่ยนแปลง:

from selenium import webdriver
browser = webdriver.Firefox()

0

เพื่อเพิ่ม 5 เซนต์ของฉันก็เป็นไปได้ที่จะทำecho PATH(Linux) และเพียงแค่ย้ายตุ๊กแกไปยังโฟลเดอร์ที่คุณต้องการ หากโฟลเดอร์ระบบ (ไม่ใช่สภาพแวดล้อมเสมือน) เป็นเป้าหมายไดรเวอร์จะสามารถเข้าถึงได้ทั่วโลก

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.