1. 結束會話
如何正確結束瀏覽器會話
那麼,現在你有一個超棒的腳本,它可以收集資料、點擊按鈕,做許多瀏覽器裡的神奇事情。現在很重要的是要正確地結束它的工作。想像一下,瀏覽器就像是一隻悠閒的象:你不能突然關門然後離開。你必須禮貌而平靜地關閉它。為此,使用方法 quit()。
from selenium import webdriver
# 初始化瀏覽器驅動
driver = webdriver.Chrome()
# 這裡是你的瀏覽魔法... 🧙♂️
# 結束瀏覽器工作
driver.quit()
方法 quit() 關閉所有的瀏覽器窗口並結束它的工作。如果你忘記調用它,會發生一些怪異的事情,比如背景中開著的瀏覽器,以及不明內存泄漏問題。大家都希望過一個愉快的日子,不是嗎?
解決卡住的瀏覽器進程問題
有時候,在使用 Selenium 後瀏覽器的進程仍然會在背景裡運行,就像即將選擇方向的即時戰略遊戲中的猶豫單位一樣。這可能發生在你的腳本中途關閉的時候。一個解決這個問題的方法是使用批量結束進程,比如用 Python 的 psutil 或其他系統指令。
import psutil
# 關閉所有卡住的 Chrome 進程
for proc in psutil.process_iter():
# 檢查進程是否屬於瀏覽器
if 'chrome' in proc.name().lower():
proc.kill()
這不是最優雅的方式,但如果進程變得難以管理,有時別無選擇。記住,這樣做會關閉所有的瀏覽器進程,所以要理智地使用這個方法。
2. 測試腳本
檢查腳本中每一步的正確性
成功結束腳本只是故事的一半。重要的是要驗證每一步是否正確執行。為此,像 軟體測試工具, 比如 unittest 或 pytest 很適合。你可以寫測試來確認你的腳本正常打開頁面,點擊按鈕,並收集數據。
讓我們來看一個使用 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()
這個測試確認了我們的腳本打開了頁面 https://example.com ,並且頁面標題符合預期。這是一個簡單但強大的方式來確保腳本的關鍵部件正確工作。
調試與優化
有時候,即使是寫了測試後,你的腳本也可能像一個任性的孩子一樣,拒絕正確運行。這時候,就輪到調試上場了。使用 print() 來輸出中間的值,以便跟蹤到底是哪裡出了問題。在代碼中插入有趣的註釋是受歡迎的,但還是要記住目標:弄清楚事情的來龍去脈。
比如,當你遇到問題發現 some_element 在頁面上不存在時:
try:
some_element = driver.find_element_by_id('missing-id')
except Exception as e:
print(f"Whoops! 發生了些問題: {e}")
此外,要密切注意腳本的性能。為優化工作,有時可以採用不同的策略,比如減少請求的頻率或優化查找元素的邏輯。
防止未來的故障和錯誤
優化和調試後,你的腳本應該要像瑞士鐘錶一樣完美運作,但仍然可能出現新的問題。你可以使用像 logging 這樣的日誌系統來記錄腳本中發生的事情。這可以幫助了解哪裡以及為什麼出了問題。
import logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
logger.info("開始腳本工作")
# log more actions here...
logger.info("結束腳本工作")
記住,工作時要考慮到意外的事件,特別是當你處理不穩定的數據或頁面時。考慮加入重試機制和超時設置,以確保腳本不會因為小的故障而崩潰。
GO TO FULL VERSION