1. Kết thúc session
Làm thế nào để đóng session trình duyệt đúng cách
Ok, bạn đã có một script tuyệt vời, thu thập dữ liệu,
nhấn các nút và làm rất nhiều điều kỳ diệu trong
trình duyệt. Giờ thì việc kết thúc đúng cách là rất quan trọng.
Hãy tưởng tượng trình duyệt của bạn là một chú voi từ tốn:
bạn không thể chỉ đóng cái "rầm" rồi đi được. Bạn cần
lịch sự và nhẹ nhàng đóng nó. Để làm điều này,
sử dụng phương thức quit()
.
from selenium import webdriver
# Khởi tạo driver trình duyệt
driver = webdriver.Chrome()
# Đây là nơi phép màu duyệt web của bạn xảy ra... 🧙♂️
# Đóng trình duyệt
driver.quit()
Phương thức quit()
đóng tất cả các cửa sổ trình duyệt và
kết thúc nó. Nếu bạn quên gọi nó, sẽ xảy ra các tình huống kỳ lạ
như trình duyệt mở trong nền và rò rỉ bộ nhớ không rõ ràng. Mà cuộc sống hạnh phúc,
đồng ý đi, ai cũng muốn.
Giải quyết vấn đề với các tiến trình trình duyệt bị treo
Đôi khi sau khi làm việc với Selenium, các tiến trình trình duyệt vẫn còn
treo trong chế độ nền, như các đơn vị lưỡng lự trong chiến lược thời gian thực.
Điều này có thể xảy ra khi script của bạn bị "văng" đâu đó ở giữa.
Một trong những cách để xử lý vấn đề này là sử dụng
việc đóng tiến trình hàng loạt, ví dụ như với
psutil
trong Python hoặc các lệnh hệ thống khác.
import psutil
# Đóng tất cả các tiến trình Chrome bị treo
for proc in psutil.process_iter():
# Kiểm tra xem tiến trình có thuộc về trình duyệt không
if 'chrome' in proc.name().lower():
proc.kill()
Đây không phải là cách thanh tao nhất, nhưng đôi khi không còn lựa chọn nào khác khi các tiến trình trở nên không kiểm soát được. Hãy nhớ rằng khi làm điều này bạn sẽ giết tất cả các tiến trình trình duyệt, vì vậy hãy dùng với sự khôn ngoan.
2. Kiểm tra script
Kiểm tra sự chính xác của tất cả các bước trong kịch bản
Kết thúc script thành công chỉ là nửa chặng đường.
Quan trọng là kiểm tra mỗi bước đều được thực hiện chính xác.
Để làm điều này, các công cụ
kiểm tra phần mềm,
như unittest
hoặc pytest
, rất hữu ích.
Bạn có thể viết các test để đảm bảo rằng script của bạn
mở đúng trang, nhấn nút và thu thập dữ liệu một cách chính xác.
Hãy xem qua một test tối giản sử dụng
unittest
:
import unittest
from selenium import webdriver
class TestBrowserAutomation(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Chrome()
def test_open_page(self):
self.driver.get("https://example.com")
self.assertEqual("Example Domain", self.driver.title)
def tearDown(self):
self.driver.quit()
unittest.main()
Test này kiểm tra rằng script của chúng ta mở trang https://example.com và tiêu đề của trang đúng như mong đợi. Đây là một cách đơn giản nhưng mạnh mẽ để đảm bảo rằng các phần quan trọng của script của bạn hoạt động đúng.
Debug và tối ưu hóa
Đôi khi ngay cả sau khi viết test, script của bạn vẫn hành xử
như một đứa trẻ khó tính, từ chối hoạt động chính xác. Đây là lúc
debug ra tay cứu nguy. Sử dụng
print()
để in giá trị trung gian,
nhằm tìm ra chính xác chỗ nào xảy ra vấn đề. Các chú thích
vui vẻ trong mã tất nhiên được hoan nghênh, nhưng đừng quên
mục tiêu: hiểu chuyện gì đang xảy ra.
Ví dụ, bạn gặp vấn đề rằng some_element không tồn tại trên trang:
try:
some_element = driver.find_element_by_id('missing-id')
except Exception as e:
print(f"Ôi trời! Có gì đó sai: {e}")
Ngoài ra, hãy chú ý đến hiệu năng của script của bạn. Đôi khi, để tối ưu hóa công việc, bạn có thể áp dụng các chiến lược khác nhau, như giảm tần suất yêu cầu hoặc tối ưu hóa logic tìm kiếm phần tử.
Ngăn ngừa thất bại và lỗi trong tương lai
Sau khi tối ưu hóa và debug script của bạn nên hoạt động
hoàn hảo, như một chiếc đồng hồ Thụy Sĩ, nhưng luôn có nguy cơ
phát sinh vấn đề mới. Bạn có thể sử dụng hệ thống
ghi log, như logging
, để
ghi lại những gì đang diễn ra trong script của bạn. Điều này giúp thấy rõ
nơi và vì sao vấn đề xảy ra.
import logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
logger.info("Bắt đầu chạy script")
# log thêm các hành động ở đây...
logger.info("Kết thúc script")
Hãy nhớ rằng luôn cần dự đoán các sự kiện bất ngờ, đặc biệt nếu bạn làm việc với dữ liệu không ổn định hoặc các trang không đáng tin cậy. Hãy cân nhắc tích hợp hệ thống retry và timeout để script không gặp lỗi với các sự cố nhỏ.
GO TO FULL VERSION