Xin chào, tôi đã cố gắng tạo một công thức python để quét web bằng Selenium, nhưng đã gặp phải lỗi này
lỗi không thể nhận biết. Chrome không khởi động được. thoát bất thường. (lỗi không thể nhận biết. Tệp DevToolsActivePort không tồn tại) (Quá trình bắt đầu từ vị trí chrome. /managed_folders/TEST_3/a4dI41U2/chromedriver không còn chạy nữa, vì vậy ChromeDriver giả định rằng Chrome đã gặp sự cố. )
Tôi đã thêm chromedriver làm đầu vào cho mã và đây là các thư viện trong môi trường của tôi
selen
chromedriver-py
trình quản lý web
chromedriver-binary-auto
chromedriver-nhị phân
Đây là mã tôi đã và đang sử dụng
nhập dữ liệu
nhập gấu trúc dưới dạng pd, numpy dưới dạng np
từ dataiku nhập pandasutils dưới dạng pdu
từ Selenium nhập webdriver
từ selen. webdriver. trình duyệt Chrome. nhập tùy chọn Tùy chọn
## Sẽ đưa ra lỗi cần quyền
#từ webdriver_manager. nhập chrome ChromeDriverManager
#driver = trình điều khiển web. Chrome(Trình quản lý ChromeDriver(). Tải về())
# Đọc đầu vào công thức
chrome_driver = dataiku. Thư mục("a4dI41U2")
chrome_driver_info = chrome_driver. nhận thông tin()
driver_path = chrome_driver. get_path() + '/ chromedriver'
# Tính toán đầu ra công thức
chrome_options = Tùy chọn()
chrome_options. binary_location = driver_path
chrome_options. add_argument('--no-sandbox')
chrome_options. add_argument('--không đầu')
chrome_options. add_argument("--disable-dev-shm-usage")
chrome_options. add_argument("--disable-extensions")
trình điều khiển = webdriver. Chrome(executable_path=driver_path, chrome_options=chrome_options)
tài xế. từ bỏ()
Tôi nên làm gì để giải quyết lỗi?
Cảm ơn trước
Chúng tôi có thể chuyển các tùy chọn cho trình điều khiển Selenium Chrome bằng Python. Điều này có thể nhờ sự trợ giúp của lớp ChromeOptions và DesiredCapabilities. Đối với ChromeOptions, chúng ta phải tạo một đối tượng cho lớp đó
Sau đó, chúng tôi sẽ nhờ sự trợ giúp của phương thức add_argument và chuyển tùy chọn mà chúng tôi muốn gửi tới trình duyệt dưới dạng tham số cho phương thức. Cuối cùng, thông tin này phải được cung cấp cho trình điều khiển web
Thí dụ
Triển khai mã
from selenium import webdriver from selenium.webdriver.chrome.options import Options as ChromeOptions #object of ChromeOptions op = webdriver.ChromeOptions() #add option op.add_argument('--enable-extensions') #pass option to webdriver object driver = webdriver.Chrome(chrome_options=op)Chúng tôi cũng có thể thêm các khả năng với sự trợ giúp của lớp DesiredCapabilities
Triển khai mã
#object of DesiredCapabilities c = webdriver.DesiredCapabilities.Chrome.copy() #set capability to True c['acceptInsecureCerts'] = True #pass capability to webdriver object driver = webdriver.Chrome(desired_capabilities=c)Bằng cách này, chúng tôi có thể vượt qua các tùy chọn Chrome
Khả năng là các tùy chọn mà bạn có thể sử dụng để tùy chỉnh và định cấu hình phiên ChromeDriver. Trang này ghi lại tất cả các khả năng được ChromeDriver hỗ trợ và cách sử dụng chúng
API ngôn ngữ WebDriver cung cấp các cách để chuyển khả năng sang ChromeDriver. Cơ chế chính xác khác nhau tùy theo ngôn ngữ, nhưng hầu hết các ngôn ngữ đều sử dụng một hoặc cả hai cơ chế sau
Sử dụng lớp ChromeOptions. Điều này được hỗ trợ bởi Java, Python, v.v.
Sử dụng lớp DesiredCapabilities. Điều này được hỗ trợ bởi Python, Ruby, v.v. Mặc dù nó cũng có sẵn trong Java, nhưng việc sử dụng nó trong Java không được dùng nữa
Sử dụng lớp ChromeOptions
Bạn có thể tạo phiên bản ChromeOptions, phiên bản này có các phương pháp thuận tiện để cài đặt các chức năng dành riêng cho ChromeDriver. Sau đó, bạn có thể chuyển đối tượng ChromeOptions vào hàm tạo ChromeDriver
Tùy chọn ChromeOptions = ChromeOptions mới();
tùy chọn. addExtensions(Tệp mới("/đường dẫn/đến/phần mở rộng. crx"));
Trình điều khiển ChromeDriver = ChromeDriver mới (tùy chọn);
Kể từ Selenium phiên bản 3. 6. 0, lớp ChromeOptions trong Java cũng triển khai giao diện Khả năng, cho phép bạn chỉ định các khả năng WebDriver khác không dành riêng cho ChromeDriver
Tùy chọn ChromeOptions = ChromeOptions mới();
// Thêm khả năng proxy WebDriver
Proxy proxy = Proxy mới();
Ủy quyền. setHttpProxy("myhttpproxy. 3337");
tùy chọn. setCapability("proxy", proxy);
// Thêm chức năng dành riêng cho ChromeDriver
tùy chọn. addExtensions(Tệp mới("/đường dẫn/đến/phần mở rộng. crx"));
Trình điều khiển ChromeDriver = ChromeDriver mới (tùy chọn);
Sử dụng DesiredCapabilities
Để sử dụng DesiredCapabilities, bạn cần biết tên của khả năng và loại giá trị mà nó nhận. Xem thêm danh sách đầy đủ bên dưới
con trăn
mũ = webdriver. Khả năng mong muốn. TRÌNH DUYỆT CHROME. sao chép()
caps['acceptInsecureCerts'] = Đúng
trình điều khiển = webdriver. Chrome(desired_capabilities=caps)
hồng ngọc
mũ = Selen. Trình điều khiển web. Xa. khả năng. trình duyệt Chrome(
"Google. chromeOptions" => {"args" => [ "window-size=1000,800" ]})
trình điều khiển = Selenium. Trình điều khiển web. vì. chrome, mong muốn_capabilities. mũ lưỡi trai
Sử dụng hồ sơ tùy chỉnh (còn được gọi là thư mục dữ liệu người dùng)
Theo mặc định, ChromeDriver sẽ tạo một hồ sơ tạm thời mới cho mỗi phiên. Đôi khi, bạn có thể muốn đặt các tùy chọn đặc biệt hoặc chỉ sử dụng hoàn toàn một cấu hình tùy chỉnh. Nếu trước đây, bạn có thể sử dụng 'chrome. prefs' (được mô tả sau bên dưới) để chỉ định các tùy chọn sẽ được áp dụng sau khi Chrome khởi động. Nếu là cái sau, bạn có thể sử dụng công tắc dòng lệnh của Chrome user-data-dir để cho Chrome biết nên sử dụng cấu hình nào
Tùy chọn ChromeOptions = ChromeOptions mới();
tùy chọn. addArguments("user-data-dir=/path/to/your/custom/profile");
Bạn có thể tạo hồ sơ tùy chỉnh của riêng mình chỉ bằng cách chạy Chrome (trên dòng lệnh hoặc thông qua ChromeDriver) với công tắc user-data-dir được đặt thành một số thư mục mới. Nếu đường dẫn không tồn tại, Chrome sẽ tạo một hồ sơ mới ở vị trí đã chỉ định. Sau đó, bạn có thể sửa đổi cài đặt cấu hình theo ý muốn và ChromeDriver có thể sử dụng cấu hình này trong tương lai. mở chrome. //phiên bản trong trình duyệt để xem cấu hình Chrome đang sử dụng
Bắt đầu tối đa hóa Chrome
Tùy chọn ChromeOptions = ChromeOptions mới();
tùy chọn. addArguments("bắt đầu tối đa hóa");
Sử dụng tệp thực thi của Chrome ở vị trí không chuẩn
Tùy chọn ChromeOptions = ChromeOptions mới();
tùy chọn. setBinary("/path/to/other/chrome/binary");
Chặn cửa sổ pop-up
Theo mặc định, ChromeDriver định cấu hình Chrome để cho phép các cửa sổ bật lên. Nếu bạn muốn chặn cửa sổ bật lên (tôi. e. , khôi phục hoạt động bình thường của Chrome khi không được ChromeDriver kiểm soát), hãy làm như sau
Tùy chọn ChromeOptions = ChromeOptions mới();
tùy chọn. setExperimentalOption("loại trừ Công tắc",
Mảng. asList("vô hiệu hóa chặn cửa sổ bật lên"));
Đặt thư mục tải xuống
Đoạn mã sau có thể được sử dụng để định cấu hình Chrome tải tệp xuống một thư mục cụ thể. Tuy nhiên, có một số lưu ý cần lưu ý
Chrome không cho phép sử dụng một số thư mục nhất định để tải xuống. Đặc biệt, bạn không thể sử dụng thư mục máy tính để bàn làm thư mục tải xuống. Trên Linux, bạn cũng không thể sử dụng thư mục chính để tải xuống. Vì danh sách chính xác các thư mục bị cấm có thể thay đổi, nên bạn nên sử dụng một thư mục không có ý nghĩa đặc biệt đối với hệ thống
ChromeDriver không tự động đợi quá trình tải xuống hoàn tất. Nếu bạn gọi tài xế. thoát () quá sớm, Chrome có thể kết thúc trước khi quá trình tải xuống hoàn tất
Đường dẫn tương đối không phải lúc nào cũng hoạt động. Để có kết quả tốt nhất, hãy sử dụng đường dẫn đầy đủ thay thế
Trên Windows, Sử dụng "\" làm dấu phân cách đường dẫn. Sử dụng "/" không đáng tin cậy trên Windows
Tùy chọn ChromeOptions = ChromeOptions mới();
Mapprefs = HashMap mới();
prefs. đặt ("tải xuống. default_directory", "/directory/path");
tùy chọn. setExperimentalOption("prefs", prefs);
Vui lòng xem tài liệu về Selenium và tiêu chuẩn W3C WebDriver để biết các khả năng tiêu chuẩn được ChromeDriver chấp nhận. Ở đây chúng tôi chỉ liệt kê các khả năng dành riêng cho Chrome
Hầu hết các khả năng dành riêng cho Chrome được hiển thị thông qua đối tượng ChromeOptions. Trong một số ngôn ngữ, điều này được triển khai bởi lớp ChromeOptions. Trong các ngôn ngữ khác, chúng được lưu trữ dưới goog. từ điển chromeOptions trong khả năng mong muốn