Mặc dù các trình duyệt như Firefox và Chrome đã giúp việc tải xuống các tệp dễ dàng hơn, nhưng các lượt tải xuống này phụ thuộc vào việc người dùng truy cập trang web và nhấp vào nút tải xuống theo cách thủ công. Đây có thể là một vấn đề nếu người dùng quan tâm đến việc tải xuống nhiều tệp
Bằng cách tự động hóa tác vụ tải xuống tệp, bạn có thể tiết kiệm thời gian và công sức cũng như tập trung vào các tính năng quan trọng. Tuy nhiên, có nhiều cách khác nhau để làm điều đó
Sự kết hợp giữa Python và Selenium mở ra nhiều cơ hội tự động hóa các tác vụ khác nhau như nhấp, nhập, di chuột và tải tệp xuống. Sử dụng Selenium với Python có thể tự động hóa quá trình tải xuống tệp này bằng cách xác định và nhấp vào nút tải xuống
Trong hướng dẫn Selenium Python này, tôi sẽ chỉ cho bạn cách tải xuống các tệp bằng Selenium WebDriver và Python bằng cách sử dụng khung thử nghiệm unittest. Sau đó, bạn có thể tải xuống bất kỳ loại tệp nào và lưu nó vào một thư mục cụ thể
Vậy hãy bắt đầu
Thiết lập môi trường thử nghiệm
Bạn cần có khung đơn giản nhất, Selenium và các trình điều khiển trình duyệt khác nhau trên máy của chúng tôi. Trong blog này về cách tải xuống tệp bằng Selenium Python, chúng tôi sẽ xem xét chạy thử nghiệm của mình trên Chrome, Firefox và Safari
khuôn khổ unittest là gì?
Khung kiểm tra đơn vị ban đầu được lấy cảm hứng từ JUnit và có hương vị tương tự như các khung kiểm tra đơn vị chính trong các ngôn ngữ khác. Đây là khung thử nghiệm Python mặc định được cung cấp cùng với gói Python và do đó, hầu hết các nhà phát triển đều bắt đầu thử nghiệm với. Nó cũng có thể được sử dụng để tự động hóa thử nghiệm, tổng hợp bộ sưu tập, v.v.
Cài đặt khung unittest
Để cài đặt unittest trên máy của chúng tôi, trước tiên chúng tôi cần cài đặt Python
Nhưng hãy đảm bảo rằng bạn có Homebrew trên máy của mình vì chúng tôi sẽ sử dụng hệ điều hành macOS trong hướng dẫn này về cách tải xuống tệp bằng Selenium Python
- Nhập lệnh sau trong thiết bị đầu cuối của bạn
- Khi bạn đã cài đặt nó, hãy đảm bảo rằng bạn đã cài đặt Python trên máy của mình bằng cách nhập vào thiết bị đầu cuối của bạn
- Tiếp theo, bạn cần cài đặt Selenium trên máy của chúng tôi. Để làm điều này, chúng tôi sẽ cài đặt pip bằng get-pip. py
- Tải xuống tập lệnh từ https. //bootstrap. pypa. io/get-pip. py
- Mở terminal/command Prompt, cd vào thư mục chứa get-pip. py và chạy
- Kiểm tra xem pip đã được cài đặt chưa bằng cách nhập vào thiết bị đầu cuối của bạn
- Sau khi cài đặt pip, bạn có thể cài đặt Selenium theo cách tương tự
- Thêm trình điều khiển trình duyệt. WebDriver là một công cụ mã nguồn mở để kiểm tra tự động các ứng dụng web trên nhiều trình duyệt. Nó cung cấp khả năng điều hướng các trang web, đầu vào của người dùng, thực thi JavaScript, v.v.
- Bây giờ, hãy cài đặt GeckoDriver, một công cụ trình duyệt web được sử dụng trong nhiều ứng dụng được phát triển bởi Mozilla Foundation và Mozilla Corporation. GeckoDriver là liên kết giữa các bài kiểm tra của bạn trong Selenium và trình duyệt Firefox
Cài đặt Python sẽ trông như thế này
hoặc
Đây là tập lệnh Python sử dụng một số logic bootstrapping để cài đặt pip
hoặc tùy thuộc vào quyền của bạn
Đối với Python3
Chúng tôi sẽ chạy thử nghiệm với Google Chrome, Mozilla Firefox và Safari để tải xuống tệp bằng Selenium Python
Nhập lệnh sau trong thiết bị đầu cuối của bạn
thùng bia cài đặt chromedriver
ChromeDriver sẽ giúp chúng tôi chạy thử nghiệm trong Google Chrome. Không có nó, không thể chạy tập lệnh kiểm tra Selenium trong Google Chrome và tự động hóa bất kỳ ứng dụng web nào. Đây là lý do tại sao bạn cần ChromeDriver để chạy các trường hợp thử nghiệm trên trình duyệt Google Chrome
Sau khi cài đặt hoàn tất, hãy kiểm tra xem ChromeDriver đã được cài đặt chưa bằng cách gõ lệnh
thùng bia cài đặt tắc kè
Kiểm tra xem GeckoDriver đã được cài đặt chưa bằng cách gõ lệnh
Tuy nhiên, việc cài đặt trình điều khiển trình duyệt là không cần thiết nếu các thử nghiệm sẽ được thực hiện trên lưới Selenium trên đám mây như LambdaTest
LambdaTest là một nền tảng kiểm tra trình duyệt chéo dựa trên đám mây cung cấp cho bạn nhóm trình duyệt trực tuyến gồm hơn 3000 trình duyệt và tổ hợp hệ điều hành để thực hiện kiểm tra khả năng tương thích giữa các trình duyệt trên quy mô lớn
Bạn cũng có thể Đăng ký Kênh YouTube LambdaTest và cập nhật các hướng dẫn mới nhất về kiểm tra trình duyệt tự động, kiểm tra Selenium, kiểm tra Cypress E2E, CI/CD, v.v.
Tải xuống tệp bằng Selenium Python vào một thư mục cụ thể
Trong phần này của hướng dẫn kiểm tra tự động hóa Python, chúng ta sẽ xem xét kịch bản kiểm tra sau để tải xuống tệp bằng Selenium Python
- Tới Sân chơi Selenium
- Nhấp vào nút Tải tệp xuống
- Trong trường Nhập dữ liệu, hãy nhập “Làm cách nào để tải xuống tệp bằng Selenium & Python?”
- Nhấp vào nút Tạo tệp
- Nhấp vào nút Tải xuống để tải xuống tệp Lambdainfo. txt, nên chứa “Cách tải xuống tệp bằng Selenium & Python?”
Đây là cấu trúc của dự án của chúng ta sẽ trông như thế nào
Trong blog về cách tải xuống tệp bằng Selenium Python, chúng tôi sẽ tạo ba thư mục như sau. trang, bài kiểm tra và tiện ích
Các gói Python được biểu thị bằng __init__ này. tập tin py [phát âm là "dunder init"]. Nó chỉ là một tệp trống bên trong một thư mục có nội dung: “Này, đây là một gói Python và bạn có thể xử lý nó như vậy, đặc biệt đối với các câu lệnh nhập. ”
Trong thư mục “utils” của chúng tôi, chúng tôi sẽ tạo một bộ định vị. py trong đó chúng tôi sẽ đặt các bộ định vị khác nhau của mình
Các thử nghiệm sử dụng công cụ định vị để tìm các phần tử trên một trang. Bộ định vị là các chuỗi truy vấn đơn giản để tìm các phần tử. Họ sẽ trả về tất cả các yếu tố phù hợp với truy vấn của họ
Selenium WebDriver hỗ trợ nhiều loại bộ định vị. Một số công cụ định vị Selenium được sử dụng phổ biến nhất bao gồm— ID, Tên, Tên lớp, Bộ chọn CSS, XPath, Văn bản liên kết, Văn bản liên kết một phần và Tên thẻ
Bây giờ, hãy xem cách lấy bộ định vị cho các mục tiêu mà chúng tôi cần cho kịch bản thử nghiệm của mình. Chúng tôi đã tạo một lớp SeleniumPlaygroundPageLocators trong đó chúng tôi đã tạo các biến cho từng phần tử, trong đó chúng tôi sẽ lưu các bộ chọn của mình để sử dụng sau này trong mã của chúng tôi
file_download=[Bởi. XPATH, '//li[. = "Tải xuống tệp"]']
data_field = [Theo. XPATH, '//*[@id="textbox"]']
generate_file = [Bởi. ID, 'tạo']
download_button = [Bởi. XPATH, '//*[@id="link-to-download"]']
Tôi cũng đã tạo một thư mục có tên là “trang“. Trong “pages”, chúng ta sẽ tạo một tệp selenium_playground_page. py trong đó các đối tượng trang được viết. Để tìm hiểu thêm về các đối tượng trang, hãy tham khảo blog trước đây của chúng tôi về Mô hình đối tượng trang [POM] trong Selenium Python
Hướng dẫn mã
từ selen. webdriver. phổ thông. phím nhập phím
selen. mô-đun webdriver cung cấp tất cả các triển khai WebDriver. Lớp Keys cung cấp các phương thức mà qua đó bạn có thể truy cập các khóa. Bạn có thể tham khảo blog này về Selenium Keys để tìm hiểu thêm về lớp Keys
từ tiện ích. nhập định vị *
Ở đây, chúng tôi nhập tất cả các lớp trong bộ định vị của chúng tôi. py trong thư mục utils
Python sleep[] là một phương thức của mô-đun thời gian Python. Vì vậy, trước tiên, chúng ta phải nhập mô-đun thời gian, sau đó chúng ta có thể sử dụng phương pháp này
Trong các dự án Python, thông thường sẽ tạo một thư mục “kiểm tra” trong thư mục gốc của dự án để chứa tất cả các kịch bản kiểm tra. Trong các thử nghiệm, chúng tôi có hai tệp test_download_file. py và conftest. py
Hướng dẫn mã
Mô-đun unittest cung cấp một bộ công cụ phong phú để xây dựng và chạy thử nghiệm. Trong blog này về cách tải xuống tệp bằng Selenium Python, chúng tôi đã sử dụng unittest, nhưng một số khung kiểm tra Python khác có thể được sử dụng như PyTest, Robot, DocTest, v.v.
PATH = "/Users/macbookair/Desktop/how_download_files_selenium_python/download"
Chúng tôi đã tạo một biến PATH trong đó chúng tôi lưu đường dẫn mà chúng tôi muốn lưu tệp mà chúng tôi sẽ tải xuống bằng Selenium Python
Sau đó, chúng tôi sẽ thêm một số mã vào conftest của chúng tôi. py để có thể chạy thử nghiệm trên các trình duyệt khác nhau của chúng tôi
Chạy tập lệnh tự động Python của bạn trên hơn 3000 môi trường trình duyệt. Thử LambdaTest ngay
Làm cách nào để tải xuống tệp bằng Selenium Python trong Chrome?
Trong cuộc thi của chúng tôi. py, chúng ta cần thêm một số mã. Trước tiên, chúng tôi sẽ nhập chromeOptions bằng câu lệnh nhập sau
từ selen. webdriver. trình duyệt Chrome. nhập tùy chọn Tùy chọn
Lớp Tùy chọn Chrome được sử dụng để kiểm soát các thuộc tính của Trình điều khiển Chrome và được sử dụng để kết hợp các Khả năng mong muốn. Nó giúp bạn thực hiện nhiều thao tác khác nhau, chẳng hạn như xác định thư mục mà bạn muốn lưu tệp tải xuống
Cách sử dụng để tạo phiên bản trình điều khiển Chrome
prefs = {"tải xuống. default_directory". ĐƯỜNG DẪN}
tùy chọn. add_experimental_option["prefs",prefs]
bản thân. trình điều khiển = webdriver. Chrome[tùy chọn=tùy chọn]
- tùy chọn. Điều này cho phép bạn đặt tùy chọn của trình duyệt Chrome
- Tải xuống. default_directory. Cho phép sửa đổi thư mục tải xuống mặc định. Thư mục tải xuống mặc định sẽ là đường dẫn được xác định trong biến PATH của chúng tôi
- add_experimental_option. Cho phép người dùng thêm các tùy chọn này vào đối tượng Selenium webdriver của họ
niềm tin của chúng tôi. tệp py bây giờ sẽ trông như thế này
Bây giờ bạn có thể chạy thử nghiệm của mình bằng cách nhập vào thiết bị đầu cuối của mình
Bài kiểm tra của bạn sẽ chạy như sau
Sau khi thử nghiệm của bạn chạy thành công, bạn sẽ có Lambdainfo. txt trong thư mục tải xuống của bạn
Tệp có chứa dòng chữ “Làm cách nào để tải xuống tệp bằng Selenium & Python?”
Làm cách nào để tải xuống tệp bằng Selenium Python trong Firefox?
Bây giờ, chúng ta sẽ cần tạo một hồ sơ Firefox. Đây là mã bạn sẽ cần thêm vào conftest của mình. py nếu bạn định chạy thử nghiệm với Mozilla Firefox
hồ sơ = webdriver. Hồ sơ Firefox[]
Hồ sơ. set_preference["trình duyệt. Tải xuống. danh sách thư mục", 2]
Hồ sơ. set_preference["trình duyệt. Tải xuống. giám đốc. show WhenStarting", Sai]
Hồ sơ. set_preference["trình duyệt. Tải xuống. dir", ĐƯỜNG]
Hồ sơ. set_preference["trình duyệt. ứng dụng trợ giúp. không bao giờ hỏi. saveToDisk", "ứng dụng/x-gzip"]
bản thân. trình điều khiển = webdriver. Firefox[firefox_profile=hồ sơ]
Giải thích thêm
- Hồ sơ. Đối tượng hồ sơ dành riêng cho FirefoxDriver và chứa tất cả các tùy chọn được xác định
- trình duyệt. Tải xuống. danh sách thư mục. Yêu cầu không sử dụng thư mục Tải xuống mặc định
- trình duyệt. Tải xuống. giám đốc. hiển thịKhi bắt đầu. Lượt hiển thị tiến trình tải xuống
- trình duyệt. Tải xuống. thư mục. Đặt thư mục để tải xuống
- trình duyệt. ứng dụng trợ giúp. không bao giờ hỏi. lưu vào đĩa. Thông báo cho Firefox để tự động tải xuống các tệp của các loại mime đã chọn
bản thân. trình điều khiển = webdriver. Firefox[firefox_profile=hồ sơ]
Dòng mã này cho phép chúng tôi tạo đối tượng trình điều khiển Firefox với tất cả các tùy chọn
niềm tin của chúng tôi. tệp py bây giờ sẽ trông như thế này
Bây giờ, chúng ta có thể chạy lại các bài kiểm tra của mình
Làm cách nào để tải xuống tệp bằng Selenium Python trong Safari?
Không cần tải xuống trình điều khiển Safari cho Selenium WebDriver. Thay vào đó, trình điều khiển Safari tích hợp, safaridriver, hiện có sẵn trong hầu hết các thư viện máy khách Selenium. Nhưng trước khi chạy thử nghiệm giao diện người dùng web trong Safari, hãy đảm bảo bạn đã bật tự động hóa từ xa trong trình duyệt Safari
Để cho phép tự động hóa từ xa trong Safari, bạn phải bật hỗ trợ WebDriver
- Để bật menu Phát triển trong trình duyệt Safari, hãy nhấp vào Safari > Tùy chọn > tab Nâng cao. Chọn hộp kiểm Hiển thị Menu Phát triển. Menu Phát triển xuất hiện trong thanh menu
- Để bật Tự động hóa từ xa, hãy nhấp vào Phát triển > Cho phép Tự động hóa từ xa trong thanh menu
- Cho phép safaridriver khởi chạy dịch vụ webdriver lưu trữ máy chủ web cục bộ. Để cho phép điều này, hãy chạy /usr/bin/safaridriver một lần theo cách thủ công và hoàn tất lời nhắc xác thực
- Bây giờ, chúng tôi sẽ cần thực hiện một số thay đổi trước khi chạy thử nghiệm. Đầu tiên chúng ta sẽ thay đổi thư mục download mặc định cho Safari. Bạn có thể làm điều này trong tùy chọn Safari trong tab chung
- Bây giờ, chúng tôi sẽ tắt cảnh báo xác nhận tải xuống. Trong tab trang web, trong tùy chọn
Bây giờ hãy thêm một số mã
bản thân. trình điều khiển = webdriver. Cuộc đi săn[]
niềm tin của chúng tôi. tệp py bây giờ sẽ trông như thế này
Mọi thứ đã sẵn sàng để chạy thử nghiệm với Safari. Sau khi chạy thử nghiệm của bạn, kết quả sẽ như sau
Làm cách nào để tải xuống tệp bằng Selenium Grid trên đám mây?
Mỗi dự án là duy nhất và bạn phải tối ưu hóa ứng dụng của mình cho bất kỳ cấu hình nào để cung cấp trải nghiệm người dùng mượt mà và nhất quán trên tất cả các thiết bị, trình duyệt và hệ điều hành
Trong một thế giới lý tưởng, các nhà phát triển sẽ kiểm tra ứng dụng của họ bằng thiết bị thực trong điều kiện thực. Tuy nhiên, các phòng thí nghiệm nội bộ có xu hướng nhỏ và do đó không thể cung cấp cho người dùng trải nghiệm trong thế giới thực. Thay vào đó, họ chọn sử dụng trình giả lập hoặc trình mô phỏng được thiết kế để bắt chước cảm xúc thực của người dùng. Mặc dù những công cụ này rất tốt để thử nghiệm ứng dụng, nhưng chúng không thể thay thế các thiết bị thực. Trong những trường hợp như vậy, bạn phải chọn giải pháp thử nghiệm đám mây thiết bị thực cung cấp các thiết bị thực
LambdaTest đám mây Selenium Grid cung cấp một nhóm thiết bị trực tuyến với hơn 3000 thiết bị và trình duyệt thực để giúp bạn hoàn thành công việc
Trong hướng dẫn tự động hóa web Python này về cách tải xuống tệp bằng Selenium Python, chúng tôi sẽ sử dụng LambdaTest REST API [/user-files/download] để tải xuống các tệp từ bộ lưu trữ đám mây LambdaTest
Chúng tôi sẽ phải sử dụng yêu cầu POST để tải tệp lên bộ lưu trữ LambdaTest của chúng tôi và sau đó là yêu cầu PUT để tải tệp người dùng xuống từ bộ lưu trữ LambdaTest
Trước khi tiếp tục, chúng tôi sẽ cài đặt các yêu cầu, một thư viện Python cho phép chúng tôi thực hiện các yêu cầu HTTP bằng Python. Nó trừu tượng hóa sự phức tạp của các yêu cầu đằng sau một API đơn giản, đẹp mắt, vì vậy bạn có thể tập trung vào việc tương tác với các dịch vụ và sử dụng dữ liệu trong ứng dụng của mình
Chạy lệnh sau từ thiết bị đầu cuối
yêu cầu cài đặt pip3
Khi các yêu cầu được cài đặt, bạn có thể sử dụng chúng trong dự án của mình. Nhập yêu cầu trông như thế này
Trong tệp của chúng tôi test_download_file. py, chúng tôi nhập JSON và yêu cầu các gói
Sau đó, hãy thêm một số mã
GitHubHướng dẫn mã
Trong một lớp mới TestAPIDownloadFile mà chúng tôi đã thêm vào tệp của mình, chúng tôi khai báo hai biến như sau
Các biến này sẽ được sử dụng để nhận dạng trong lệnh gọi API của chúng tôi trước khi truy cập điểm cuối
Bạn cần thay thế giá trị của tên người dùng và khóa truy cập bằng dữ liệu xác thực mà bạn có thể truy xuất từ trang hồ sơ LambdaTest
url = "https. //api. lambdatest. com/automation/api/v1/tệp người dùng"
files=[ ['file',['Lambdainfo. txt',open['/Users/macbookair/Downloads/Lambdainfo. txt','rb'],'văn bản/đồng bằng']]
'chính quyền'. 'api. lambdatest. com',
'Chấp nhận'. 'ứng dụng/json',
phản ứng = yêu cầu. request["POST", url, auth=[username, access_Key], headers=headers, data=payload, files=files]
Sau đó, chúng tôi thực hiện yêu cầu POST để tải tệp từ máy tính của chúng tôi lên bộ lưu trữ lambda
files=[ ['file',['Lambdainfo. txt',open['/Users/macbookair/Downloads/Lambdainfo. txt','rb'],'văn bản/đồng bằng']]
Bạn phải thay thế 'Lambdainfo. txt‘ theo tên tệp của bạn và ‘/Users/macbookair/Downloads/Lambdainfo. txt‘ theo đường dẫn chứa tệp
phản ứng = yêu cầu. request["POST", url, auth=[username, access_Key], headers=headers, data=payload, files=files]
Trong một biến phản hồi, chúng tôi lưu phản hồi của yêu cầu mà chúng tôi hiển thị sau đó bằng cách thực hiện
url = "https. //api. lambdatest. com/automation/api/v1/user-files/download"
'Chấp nhận'. 'ứng dụng/octet-stream',
'Loại nội dung'. 'ứng dụng/json'
phản ứng = yêu cầu. request["PUT", url, auth=[username, access_Key], headers=headers, data=payload]
open['/Users/macbookair/Documents/how_download_files_selenium_python/download/Lambdainfo. txt', 'wb']. viết [trả lời. nội dung]
Khi tệp của chúng tôi đã được tải lên bộ lưu trữ lambda, giờ đây chúng tôi có thể sử dụng các yêu cầu PUT của mình để tải tệp xuống thư mục mà chúng tôi chọn
Khóa xác định tệp của chúng tôi trên bộ lưu trữ, vì vậy bạn phải thay thế nó bằng tên tệp của chúng tôi trên bộ lưu trữ
open['/Users/macbookair/Documents/how_download_files_selenium_python/download/Lambdainfo_API. txt', 'wb']. viết [trả lời. nội dung]
Sau đó, chúng tôi lưu tệp trong thư mục chúng tôi chọn. Bạn phải thay thế đường dẫn đã chỉ định bằng đường dẫn mà bạn muốn lưu tệp
Khi thử nghiệm được chạy trong bảng điều khiển của bạn, bạn có thể thấy phản hồi cho các yêu cầu của mình
Và tệp đã được tải xuống trong thư mục đã xác định
Nếu bạn là một lập trình viên Python đang tìm cách tạo dựng tên tuổi của mình trong lĩnh vực thử nghiệm tự động hóa, thì chương trình chứng nhận Selenium Python 101 từ LambdaTest là lựa chọn tốt nhất dành cho bạn
Phần kết luận
Điều này kết thúc hướng dẫn về cách tải xuống tệp bằng Selenium Python. Khi bạn tự động kiểm tra trang web của mình bằng Selenium, bạn có thể cần kiểm tra toàn bộ chức năng của trang web hoặc ứng dụng web. Điều này có nghĩa là bạn sẽ phải thực hiện các tính năng như tải xuống và tải lên tệp, phát trực tuyến video hoặc âm thanh và đọc/viết tài liệu
Trong hướng dẫn về thử nghiệm Selenium Python này, chúng ta đã thấy cách tải xuống tệp bằng Selenium Python vào một thư mục cụ thể. Hơn nữa, chúng tôi đã học cách tải xuống tệp bằng Selenium Python trong các trình duyệt khác nhau như Chrome, Firefox và Safari. Cuối cùng, chúng tôi đã xem xét việc tải xuống tệp trên Selenium Grid trên đám mây như LambdaTest
Tôi hy vọng điều này đã cung cấp cho bạn một cái nhìn tổng quan tốt về cách tải xuống tệp bằng Selenium Python. Nếu bạn có bất kỳ câu hỏi hoặc nhận xét nào, vui lòng để lại trong phần bên dưới
Câu hỏi thường gặp [FAQ]
Làm cách nào để tải xuống Selenium cho Python?
Các liên kết Selenium Python rất dễ cài đặt. Trước tiên, đảm bảo trình quản lý gói pip được cài đặt bằng cách nhập pip vào thiết bị đầu cuối của bạn. Sau đó chạy lệnh sau.
pip cài đặt Selenium
Làm cách nào để lưu hình ảnh bằng Python Selenium?
Có thể tải xuống hình ảnh với Selenium WebDriver. Để bắt đầu, hãy xác định hình ảnh bạn muốn tải xuống với sự trợ giúp của bộ định vị như id; . Sau khi được xác định, hãy sử dụng phương thức mở để mở tệp ở chế độ ghi và nhị phân