Trăn Selenium Firefox không đầu

Đây là phần 2 trong quá trình khám phá selen của tôi khi cố gắng tìm nạp các câu chuyện từ NY Times [[với tư cách là người đăng ký]

Khi chúng tôi rời đi, tôi đang học kiến ​​thức cơ bản về Selenium để lấy các câu chuyện [với tư cách là người đăng ký] từ New York Times. Tìm nạp các câu chuyện đang hoạt động bình thường và tất cả những gì còn lại là đưa nó vào một tập lệnh tự động, sau đó chuyển nó đến một máy chủ nơi nó có thể chạy tự động mà không cần bật máy tính để bàn của tôi

Thật không may, điều đó hóa ra lại là phần khó khăn nhất của vấn đề

Cài đặt Selenium và Firefox mà không cần máy tính để bàn

Vấn đề là bạn cần chạy một trình duyệt hoàn chỉnh [tôi đang sử dụng Firefox] trên web hoặc máy chủ tệp không cài đặt X hoặc máy tính để bàn

Nếu bạn chỉ apt install python3-selenium firefox-esr [hoặc tương đương cho bản phân phối của bạn; firefox-esr là Bản phát hành hỗ trợ mở rộng, gói Firefox duy nhất trong kho Debian tiêu chuẩn. nó ổn định hơn một chút so với Firefox tiên tiến và thay đổi ít thường xuyên hơn] và cho phép cài đặt 156 gói kết quả. Nhưng tôi muốn giữ cho các máy chủ gọn gàng nhất có thể, chỉ cài đặt những gói tôi thực sự cần

Nó giúp khá nhiều để tắt các gói được đề xuất và đề xuất. apt install --no-install-recommends --no-install-suggests python3-selenium đưa số lượng gói mới được cài đặt xuống còn 31

Hoặc bạn có thể tải Firefox từ mozilla. org [bản phát hành ESR là]. Tất nhiên, bạn vẫn sẽ cần những phần phụ thuộc khác, bao gồm X11 [mặc dù bạn sẽ không chạy máy chủ X] cùng với các thư viện như GTK;

Bạn cũng sẽ cần geckodriver, thứ mà Firefox cần để chạy không đầu. Ubuntu có gói firefox-geckodriver, nhưng Debian thì không -- mặc dù cài đặt Selenium trên Debian gợi ý cài đặt firefoxdriver, hóa ra nó không tồn tại. Nếu máy chủ của bạn không có gói geckodriver, bạn có thể lấy nó từ github của Mozilla. github. com/mozilla/geckodriver/bản phát hành. Thật kỳ lạ là nó chỉ có sẵn từ github, không có ở đâu trên mozilla. org, với điều kiện là Mozilla thường thậm chí không sử dụng git [họ sử dụng Mercurial làm hệ thống kiểm soát phiên bản của họ], nhưng bạn đã làm được

Các tarball từ liên kết github đó trích xuất thành một tệp thực thi duy nhất. Tôi đã chuyển tệp thực thi đó vào thư mục mà tôi đã cài đặt Firefox, ~/firefox-esr, để tôi có thể thêm thư mục đó vào PATH của mình. Selenium cho phép bạn chỉ định đường dẫn đến tệp thực thi của geckodriver, nhưng sau đó geckodriver sẽ không thể tìm thấy Firefox trừ khi nó ở đâu đó trong PATH của bạn. Dễ dàng nhất để đảm bảo cả hai đều đi đúng hướng

Thiết lập môi trường X ảo

Như đã đề cập trước đó, bạn sẽ cần cài đặt máy chủ X mặc dù bạn sẽ không chạy nó một cách tương tác, cùng với một số thư viện khác như GTK

Đối với Firefox-ESR từ Mozilla. org và geckodriver từ github, đây là những gì tôi cần

apt install --no-install-recommends --no-install-suggests \
    xvfb python3-xvfbwrapper libgtk-3-0 libdbus-glib-1-2

Điều này kéo theo tổng cộng 61 gói, 51 trong số đó có liên quan đến libgtk-3. 0

Kiểm tra Firefox và tạo một hồ sơ

Bây giờ về mặt lý thuyết bạn có đủ để chạy Mozilla. Để đảm bảo nó chạy, bạn cần có khả năng hiển thị các máy khách X. Cách dễ nhất là ssh -X từ một máy khác đến máy chủ của bạn với tư cách là người dùng mà bạn định sử dụng cho Selenium và xác minh rằng Firefox chạy và có thể tạo một cấu hình mới

localhost% ssh -X user@servername
servername% cd firefox-esr
servername% ./firefox -p

-p yêu cầu firefox khởi động trình quản lý hồ sơ để bạn có thể tạo hồ sơ mới

Ban đầu tôi dự định sao chép hồ sơ Selenium/NYT từ máy tính để bàn của mình, nhưng điều đó không hiệu quả vì các phiên bản Firefox quá khác nhau

Tôi đặt tên cho hồ sơ mới là "selenium";

Khi hồ sơ mới của bạn được tạo, bạn có thể chạy hồ sơ đó từ trình quản lý hồ sơ hoặc khởi động firefox với firefox -P selenium

Bây giờ, giả sử cả firefox và geckodriver đều nằm trong PATH của bạn, bạn có thể chạy các tập lệnh Selenium tự động

from selenium import webdriver
from selenium.webdriver.firefox.options import Options
import os

foxprofiledir = os.path.expanduser["~/.mozilla/firefox/random-string.selenium"]

options = Options[]
options.headless = True

webdriver = webdriver.Firefox[firefox_profile=foxprofiledir,
                              options=options]
[Điều này vẫn sẽ cung cấp cho DeprecationWarning: firefox_profile has been deprecated, please pass in a Service object được đề cập trong bài báo trước. ]

Đặt tệp nhật ký ở đâu đó hợp lý

Một điều nữa. con tắc kè tạo một tệp nhật ký chi tiết có tên là con tắc kè. nhật ký chứa tất cả các cảnh báo mà Firefox đã tạo ra trong quá trình chạy, chủ yếu là hàng trăm dòng cảnh báo JavaScript từ các tập lệnh được viết kém. Nó tạo nhật ký này trong thư mục hiện tại. Nếu tập lệnh Selenium của bạn chạy từ một thư mục mà người dùng của bạn không thể ghi, toàn bộ quá trình sẽ không thành công. Vì vậy, hãy chọn một nơi nào đó mà bạn muốn ghi nhật ký, chẳng hạn như /tmp/geckodriver. log nếu bạn không có vị trí tốt hơn cho nó và chỉ định điều đó khi bạn tạo webdriver

webdriver = webdriver.Firefox[firefox_profile=foxprofiledir,
                              options=options,
                              service_log_path=path_to_log_file]

Cùng với đó, tập lệnh Selenium của bạn có thể chạy không đầu trên máy chủ

Nhưng còn một mảnh nữa. nếu mã chạy không giám sát, nó cần xử lý lỗi và hết thời gian chờ. Và đó là một khía cạnh của selen dường như không hoạt động tốt và không được ghi chép đầy đủ, vì vậy tôi đã tích lũy một bộ sưu tập các kỹ thuật hack để giải quyết vấn đề này. Tôi sẽ mô tả những điều đó trong bài viết tiếp theo

Làm cách nào để biến Firefox không đầu trong Selenium Python?

Bạn có thể sử dụng bất kỳ Trình duyệt web nào như Firefox hoặc Chrome ở chế độ không đầu. Để làm như vậy, trước tiên hãy mở Trình duyệt web bằng Trình điều khiển web rồi đặt nó ở chế độ không đầu . Trong mọi trường hợp, trình điều khiển web cần được cài đặt.

Làm cách nào để sử dụng trình duyệt không đầu trong Selenium Python?

Hãy đi sâu vào ngay. .
Bước 1. mở trang. Hãy viết một mã mở trang. .
Bước 2. Chuyển sang chế độ không đầu Python Selenium. Khi trang được mở, phần còn lại của quy trình sẽ dễ dàng hơn. .
Bước 3. Quét dữ liệu

Làm cách nào để tự động hóa Firefox bằng Selenium Python?

Ví dụ về Selenium Firefox . Trình điều khiển tắc kè sẽ khởi động trình duyệt firefox thực sự và hỗ trợ Javascript. Hãy xem mã firefox selen. Đầu tiên nhập webdriver, sau đó khởi động firefox. install the geckodriver. The geckodriver driver will start the real firefox browser and supports Javascript. Take a look at the selenium firefox code. First import the webdriver, then make it start firefox.

Firefox có thể chạy không đầu không?

Firefox ở chế độ không đầu, có thể chạy sau khi chúng tôi định cấu hình đường dẫn tắc kè . Sau đó, chúng ta sẽ sử dụng lớp FirefoxOptions và gửi kiến ​​thức không đầu tới trình duyệt bằng phương thức setHeadless và chuyển true làm tham số cho nó.

Chủ Đề