Thông báo lỗi: Cần có sẵn tệp thực thi của '' chromedriver '


171

Tôi đang sử dụng selenium với python và đã tải xuống chromedriver cho máy tính windows của tôi từ trang web này: http : // chromedriver.st Storage.googleapis.com/index.html?path=2.15/

Sau khi tải xuống tệp zip, tôi giải nén tệp zip vào thư mục tải xuống của mình. Sau đó, tôi đặt đường dẫn đến tệp nhị phân thực thi (C: \ Users \ michael \ Tải xuống \ chromedriver_win32) vào "Đường dẫn" biến môi trường.

Tuy nhiên, khi tôi chạy đoạn mã sau:

  from selenium import webdriver

  driver = webdriver.Chrome()

... Tôi tiếp tục nhận được thông báo lỗi sau:

WebDriverException: Message: 'chromedriver' executable needs to be available in the path. Please look at     http://docs.seleniumhq.org/download/#thirdPartyDrivers and read up at http://code.google.com/p/selenium/wiki/ChromeDriver

Nhưng - như đã giải thích ở trên - thực thi là (!) Trong đường dẫn ... chuyện gì đang xảy ra ở đây?


19
Hãy thử sao chép chromedriver.exetrong cùng thư mục với tập lệnh Python của bạn.
Malik Brahimi

4
Cài đặt qua Chocolatey sẽ thêm nó vào đường dẫn , choco install chromedriver.
WhatIsHeDaging

Đối với người dùng gặp phải sự cố này trong pycharm, khởi động lại sẽ giải quyết nó
Charles Chow

Tôi đồng ý với câu trả lời của ImNt. Mặc dù tôi muốn thêm rằng với những ai đang sử dụng virtualenv, bạn nên chạy python trong tệp venv của mình với tư cách Quản trị viên, sử dụng định dạng ví dụ sau: driver = webdo.Chrom (r'C: / Users / michael / Tải xuống / chromedriver_win32 /chromedriver.exe ')
Pineda

@MalikBrahimi Tôi đã tìm kiếm giải pháp này ở mọi nơi và không ai trong số họ thực sự làm việc cho đến khi tôi tìm thấy nhận xét của bạn. Cảm ơn rất nhiều
user2720864

Câu trả lời:


177

Bạn có thể kiểm tra xem nó có thực sự ở trong PATH hay không, nếu bạn mở một cmd và nhập chromedriver(giả sử thực thi chromedriver của bạn vẫn được đặt tên như thế này) và nhấn Enter. Nếu Starting ChromeDriver 2.15.322448xuất hiện, PATH được đặt một cách thích hợp và có một cái gì đó khác đi.

Ngoài ra, bạn có thể sử dụng đường dẫn trực tiếp đến chromedriver như thế này:

 driver = webdriver.Chrome('/path/to/chromedriver') 

Vì vậy, trong trường hợp cụ thể của bạn:

 driver = webdriver.Chrome("C:/Users/michael/Downloads/chromedriver_win32/chromedriver.exe")

3
Cảm ơn bạn đã trả lời: "Bắt đầu ChromeDriver 2.15.322448" đã xuất hiện. "Chỉ cho phép kết nối địa phương." cũng xuất hiện. ... Nhưng tôi đoán điều này là ổn? .... Một điều tôi đã tự hỏi là: Trên trang web chỉ có phiên bản chromedriver 32 bit có sẵn .... nhưng điều này sẽ hoạt động tốt với các cửa sổ 64 bit của tôi, phải không?
ổn định_proceed

@steady_proceed Vâng, nó ổn. Và điều này sẽ hoạt động với Windows 64 bit; Tôi đang sử dụng nó cho mình. Tôi nghi ngờ có lẽ phiên bản selen có thể gây ra vấn đề? Cái nào bạn đã cài đặt? Bạn đã cài đặt nó bằng cách sử dụng pip?
lmNt

Bạn đã thử sử dụng đường dẫn trực tiếp đến trình điều khiển khi gọi webdo như tôi đã đề cập trong câu trả lời chưa? Có phải nó đã thất bại với cùng một lỗi?
lmNt

4
Khi thêm các trình điều khiển web vào PATH của bạn, bất kể HĐH, chỉ bao gồm thư mục nơi lưu trữ web của bạn, không phải tệp thực thi. Ví dụ: PATH = $ PATH: / path / to / webdo / thư mục, không phải PATH = $ PATH: / path / to / webdo / chromedriver. Ngoài ra, sử dụng PATH dễ mang theo hơn nhiều so với việc chuyển vị trí vào cuộc gọi web của bạn.Chrom (), vì chúng tôi luôn có thể giả sử PATH được đặt chính xác ở bất cứ nơi nào mã của bạn được chạy, nhưng chúng tôi không thể giả định cấu trúc tệp của chúng được thiết lập giống hệt .
Aphid

2
đã cố sử dụng cùng một giải pháp nhưng gặp lỗi này: WebDriverException: Thông báo: 'chromedriver.exe' có thể thực thi có quyền sai. Vui lòng xem trang web.google.com/a/chromium.org/chromedriver/home
Yogesh

149

Tôi thấy các cuộc thảo luận vẫn nói về cách thiết lập chromedriver cũ bằng cách tải xuống tệp nhị phân và định cấu hình đường dẫn theo cách thủ công.

Điều này có thể được thực hiện tự động bằng cách sử dụng trình quản lý web

pip install webdriver-manager

Bây giờ mã ở trên trong câu hỏi sẽ hoạt động đơn giản với thay đổi bên dưới,

from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager

driver = webdriver.Chrome(ChromeDriverManager().install())

Điều tương tự có thể được sử dụng để đặt Firefox, Edge và tức là nhị phân.


@Navarasu với tất cả sự tôn trọng tại sao mọi người sẽ theo dõi điều gì đó từ 3.6 khi hiện tại là 3.7. Lần tới sẽ thật tuyệt khi nói rõ ràng rằng nó là dành cho 3.6 .... Cảm ơn
Azy Sır

5
điều này thật tuyệt vời vì nó cũng được cập nhật
Leslie Alldridge

1
Điểm hay của giải pháp này là nó có tính linh hoạt cao hơn các giải pháp khác dựa trên thiết lập đường dẫn cụ thể, điều mà tôi thấy không thực tế về mặt sử dụng tập lệnh trên nhiều máy.
IBRAHIM

14

Tình huống tương tự với phiên bản cộng đồng pycharm, vì vậy, đối với cmd, bạn phải khởi động lại ide của mình để tải lại các biến đường dẫn. Khởi động lại ide của bạn và nó sẽ ổn thôi.


2
Cảm ơn. Tôi đã có cùng một vấn đề trong Visual Studios. Chỉ cần khởi động lại IDE và nó đã hoạt động :) Cảm ơn
DollarAkshay

Làm việc cho tôi là tốt.
GIỎ HÀNG

13

Trên Linux (Ubuntu hoặc Debian):

sudo apt install chromium-chromedriver

Trên macOS cài đặt https://brew.sh/ rồi làm

brew cask install chromedriver

Sau đó, sử dụng: driver = webdo.Chrom ('/ usr / lib / chromium-browser / chromedriver') .. mà không thay đổi $ PATH
giả kim

@alchemy bạn có chắc bạn cần phải làm điều đó? Khi tôi nhớ nó, driver = webdriver.Chrome()làm việc tốt cho tôi.
Boris

Xin chào Boris, vâng, không chắc tại sao .. ngay cả sau khi thêm vào PATH, nó vẫn không hoạt động nếu không có điều đó. Tôi chắc chắn thiết lập đường dẫn chính xác sẽ tốt hơn, nhưng tôi chỉ cần thực hiện một việc với Chromedriver một cách nhanh chóng
giả kim

9

Chúng ta phải thêm chuỗi đường dẫn, bắt đầu bằng chữ cái rtrước chuỗi, cho chuỗi thô. Tôi đã thử nghiệm theo cách này, và nó hoạt động.

driver = webdriver.Chrome(r"C:/Users/michael/Downloads/chromedriver_win32/chromedriver.exe")

3

Một số đầu vào / làm rõ bổ sung cho các độc giả tương lai của chủ đề này, để tránh mày mò với env PATH. biến ở cấp độ Windows và khởi động lại hệ thống Windows: (bản sao câu trả lời của tôi từ https://stackoverflow.com/a/49851498/9083077 như áp dụng cho Chrome):

(1) Tải xuống chromedriver (như được mô tả trong chủ đề này trước đó) và đặt chromedriver.exe (giải nén) tại X: \ Folder \ of \ your \ sự lựa chọn

(2) Mẫu mã Python:

import os;
os.environ["PATH"] += os.pathsep + r'X:\Folder\of\your\choice';

from selenium import webdriver;
browser = webdriver.Chrome();
browser.get('http://localhost:8000')
assert 'Django' in browser.title

Lưu ý: (1) Có thể mất khoảng 5 giây cho mã mẫu (trong câu trả lời được tham chiếu) để mở trình duyệt Firefox cho url được chỉ định. (2) Bảng điều khiển python sẽ hiển thị lỗi sau nếu không có máy chủ nào đang chạy ở url được chỉ định hoặc đang phục vụ một trang có tiêu đề chứa chuỗi 'Django': khẳng định 'Django' trong browser.title AssertsError


3

Dành cho Linux và OSX

Bước 1: Tải xuống chromedriver

# You can find more recent/older versions at http://chromedriver.storage.googleapis.com/
# Also make sure to pick the right driver, based on your Operating System
wget http://chromedriver.storage.googleapis.com/81.0.4044.69/chromedriver_mac64.zip

Bước 2: Thêm chromedriver vào /usr/local/bin

unzip chromedriver_mac64.zip
cp chromedriver /usr/local/bin

Bây giờ bạn có thể chạy

from selenium import webdriver

browser = webdriver.Chrome()
browser.get('http://localhost:8000')

không có vấn đề gì


Đã được tuyên bố rõ ràng rằng anh ta đang sử dụng Windows, đây là cho Linux.
misantroop

1
@misantroop Tôi đã cập nhật câu trả lời của mình để làm rõ điều này.
Giorgos Myrianthous

2

Khi bạn giải nén chromedriver, vui lòng chỉ định một vị trí chính xác để bạn có thể theo dõi nó sau này. Dưới đây, bạn đang nhận được chromedriver phù hợp cho hệ điều hành của mình và sau đó giải nén nó đến một vị trí chính xác, có thể được cung cấp làm đối số sau này trong mã của bạn.

wget http://chromedriver.storage.googleapis.com/2.10/chromedriver_linux64.zip unzip chromedriver_linux64.zip -d /home/virtualenv/python2.7.9/


3
Hoặc để /usr/local/bin/cài đặt trên toàn cầu.
Jeppe

2

Nếu bạn đang làm việc với RID khung robot. Sau đó, bạn có thể tải xuống Chromedriver.exetừ trang web chính thức của nó và giữ tệp .exe này trong C:\Python27\Scriptsthư mục. Bây giờ đề cập đến đường dẫn này như là biến môi trường của bạn, vd. C:\Python27\Scripts\chromedriver.exe.

Khởi động lại máy tính của bạn và chạy lại trường hợp thử nghiệm. Bạn sẽ không gặp vấn đề này một lần nữa.


2

Theo hướng dẫn , bạn cần bao gồm đường dẫn đến ChromeDriver khi khởi tạo webdo.Chrom ví dụ:

driver = webdriver.Chrome('/path/to/chromedriver')

Nếu bạn cuộn các hướng dẫn đó sang phải, sẽ có một bình luận cho biết "Đối số tùy chọn, nếu không được chỉ định sẽ tìm đường dẫn." Nhưng ít nhất một số phiên bản của webdo dường như kiểm tra bất kỳ chromedriver nào họ tìm thấy trong đường dẫn và nếu nó không 'hài lòng' với nó (phiên bản sai, v.v.) thì nó sẽ không sử dụng nó (trừ khi buộc phải thử bằng cách đặt tham số này). Nó sẽ tiếp tục tìm đường dẫn cho phiên bản tốt hơn, sau đó phàn nàn nếu không thể tìm thấy phiên bản. ("Không tìm thấy chromedriver phù hợp" sẽ là một thông điệp tốt hơn so với "không tìm thấy chromedriver".)
Silas S. Brown

2

Trước khi bạn thêm chromedriver vào đường dẫn của mình, hãy đảm bảo đó là phiên bản giống với trình duyệt của bạn.

Nếu không, bạn sẽ cần phải khớp các phiên bản: cập nhật / hạ cấp chrome của bạn và nâng cấp / hạ cấp webdo của bạn.

Tôi khuyên bạn nên cập nhật phiên bản chrome của mình càng nhiều càng tốt và phù hợp với webdo.

Để cập nhật chrome:

  • Trên góc trên bên phải, nhấp vào ba dấu chấm.
  • bấm help->About Google Chrome
  • cập nhật phiên bản và khởi động lại chrome

Sau đó tải xuống phiên bản tương thích từ đây: http://chromedriver.chromium.org/doads .

Lưu ý: Chromedriver mới nhất không phải lúc nào cũng khớp với phiên bản chrome mới nhất!

Bây giờ bạn có thể thêm nó vào PATH:

  1. tạo một thư mục mới ở đâu đó trong máy tính của bạn, nơi bạn sẽ đặt trình điều khiển web của mình. Tôi đã tạo một thư mục có tên webdriverstrongC:\Program Files

  2. sao chép đường dẫn thư mục. Trong trường hợp của tôi, nó làC:\Program Files\webdrivers

  3. nhấp chuột phải vào this PC-> properties:

nhập mô tả hình ảnh ở đây

  1. Nhấp chuột phải Advanced System settings
  2. Nhấp chuột Environment Variables
  3. Trong System variables, nhấp vào pathvà nhấpedit
  4. nhấp chuột new
  5. dán đường dẫn bạn đã sao chép trước đó
  6. nhấn OK trên tất cả các cửa sổ

Đó là nó! Tôi đã sử dụng pycharm và tôi phải mở lại nó. Có lẽ nó giống với các IDE hoặc thiết bị đầu cuối khác.


1

Có thể thử khởi động lại máy tính nếu nó không hoạt động sau khi bạn khá chắc chắn rằng PATH được đặt chính xác.

Trong trường hợp của tôi trên windows 7, tôi luôn gặp lỗi trên WebDriverException: Message: for chromedriver, gecodriver, IEDriverServer. Tôi khá chắc chắn rằng tôi có con đường chính xác. Khởi động lại máy tính, mọi công việc


0

Trong trường hợp của tôi, lỗi này biến mất khi tôi đã sao chép tệp chromedriver vào thư mục c: \ Windows. Đó là vì thư mục windows nằm trong đường dẫn mà kịch bản python kiểm tra tính khả dụng của chromedriver.


0

Nếu bạn đang sử dụng trình thông dịch từ xa, bạn cũng phải kiểm tra xem PATH thực thi của nó có được xác định không. Trong trường hợp của tôi, việc chuyển đổi từ trình thông dịch Docker từ xa sang trình thông dịch cục bộ đã giải quyết vấn đề.


0

Tôi gặp phải vấn đề tương tự như của bạn. Tôi đang sử dụng PyCharm để viết chương trình và tôi nghĩ vấn đề nằm ở thiết lập môi trường trong PyCharm chứ không phải HĐH. Tôi đã giải quyết vấn đề bằng cách đi đến cấu hình tập lệnh và sau đó chỉnh sửa PATH trong các biến môi trường theo cách thủ công. Hy vọng bạn tìm thấy điều này hữu ích!


một tùy chọn khác là di chuyển trực tiếp chromedriver của bạn đến / usr / local / bin, sau đó bạn không bận tâm đến việc thêm một đường dẫn
sia1998 16/07/19

0

Thêm webdo (chromedriver.exe hoặc geckodriver.exe) tại đây C: \ Windows . Điều này làm việc trong trường hợp của tôi


0

Cách tốt nhất có thể là lấy thư mục hiện tại và nối địa chỉ còn lại vào đó. Giống như mã này (Word trên windows. Trên linux, bạn có thể sử dụng dòng gì đó pwd): webdriveraddress = str(os.popen("cd").read().replace("\n", ''))+'\path\to\webdriver'


0

Khi tôi tải xuống chromedriver.exe, tôi chỉ cần di chuyển nó trong thư mục PATH C: \ Windows \ System32 \ chromedriver.exe và có cùng một vấn đề.

Đối với tôi giải pháp là chỉ cần thay đổi thư mục trong PATH, vì vậy tôi mới chuyển nó vào thư mục bin Cộng đồng Pycharm cũng trong PATH. Ví dụ:

  • C: \ Windows \ System32 \ chromedriver.exe -> Đã cho tôi ngoại lệ
  • C: \ Tệp chương trình \ JetBrains \ PyCharm Community Edition 2019.1.3 \ bin \ chromedriver.exe -> hoạt động tốt

0

Có vấn đề này với Mac Mojave chạy khung thử nghiệm Robot và Chrome 77. Điều này đã giải quyết vấn đề. Kudos @Navarasu đã chỉ cho tôi đi đúng hướng.

$ pip install webdriver-manager --user # install webdriver-manager lib for python
$ python # open python prompt

Tiếp theo, trong dấu nhắc python:

from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
driver = webdriver.Chrome(ChromeDriverManager().install())

# ctrl+d to exit

Điều này dẫn đến lỗi sau:

Checking for mac64 chromedriver:xx.x.xxxx.xx in cache
There is no cached driver. Downloading new one...
Trying to download new driver from http://chromedriver.storage.googleapis.com/xx.x.xxxx.xx/chromedriver_mac64.zip
...
TypeError: makedirs() got an unexpected keyword argument 'exist_ok'
  • Bây giờ tôi đã nhận được liên kết tải xuống mới nhất
    • Tải xuống và giải nén chromedriver đến nơi bạn muốn
    • Ví dụ: ~/chromedriver/chromedriver

Mở ~/.bash_profilebằng trình chỉnh sửa và thêm:

export PATH="$HOME/chromedriver:$PATH"

Mở cửa sổ terminal mới, ta-da


0

Tôi gặp vấn đề này trên WebSearch 3.8.0 (Chrome 73.0.3683.103 và ChromeDriver 73.0.3683.68). Vấn đề biến mất sau khi tôi làm

pip install -U selenium

để nâng cấp Webdo lên 3.14.1.


0

Cách tốt nhất cho chắc chắn là ở đây:

Tải xuống và giải nén chromedriver và đặt 'chromedriver.exe' trong C: \ Python27 \ ScScript và sau đó bạn không cần phải cung cấp đường dẫn trình điều khiển, chỉ cần

driver= webdriver.Chrome()

Bạn đã hoàn thành không cần thêm đường dẫn hay bất cứ điều gì


0

Kiểm tra đường dẫn của trình điều khiển chrome của bạn, nó có thể không nhận được từ đó. Đơn giản chỉ cần sao chép dán vị trí trình điều khiển vào mã.


-3

(đối với người dùng Mac) Tôi có cùng một vấn đề nhưng tôi đã giải quyết bằng cách đơn giản này: Bạn phải đặt chromedriver.exe trong cùng một thư mục vào tập lệnh thực thi của bạn và hơn trong pyhton hãy viết hướng dẫn này:

nhập khẩu os

os.envir ["PATH"] + = os.pathsep + r'X: / your / thư mục / script / '


2
Giải pháp bạn đang đề xuất hoàn toàn giống với một trong những người dùng khác. Hãy chú ý đến câu trả lời khác trước khi đăng.
Nikita Kniazev

Không phải @walid_data nói điều này để chỉ ra nó có thể là vấn đề chỉ có ở cửa sổ sao?
benc
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.