1. 技術基礎
填寫並提交表單
處理表單通常用於自動化用戶註冊、調查填寫、數據收集等。當你需要填寫幾百個表單時,手動操作就像是用吸管喝西瓜汁一樣不可能。但利用我們強大的 Selenium 技能,我們只需幾秒就能完成。
我們先來看看如何填寫文字框並提交表單。以下是以典型網站登錄表單的例子來學習基礎步驟:
Python
from selenium import webdriver
# 設置 driver(例如 ChromeDriver)
driver = webdriver.Chrome()
try:
# 開啟網頁
driver.get("https://example.com/login")
# 找到用戶名輸入框並輸入文字
username_input = driver.find_element_by_name("username")
username_input.send_keys("我的登錄名")
# 找到密碼輸入框並輸入文字
password_input = driver.find_element_by_name("password")
password_input.send_keys("我的密碼")
# 找到提交表單的按鈕並點擊
submit_button = driver.find_element_by_name("submit")
submit_button.click()
finally:
# 關閉 driver
driver.quit()
驗證和錯誤處理
程序員最討厭的事莫過於錯誤在不該出現的時候冒出來。所以提前處理它們吧。用 try/except
來捕獲錯誤,並記錄日誌來搞清楚到底出了什麼問題。
Python
try:
username_input = driver.find_element_by_name("username")
username_input.send_keys("我的登錄名")
except Exception as e:
print(f"填寫用戶名時出錯: {e}")
logging.error("填寫用戶名時出錯", exc_info=True)
2. Checkboxes(複選框)
現在我們已經學會了點擊按鈕,讓我們嘗試從列表中選擇幾個選項。要選中或取消選中複選框,可以使用 click()
方法。如果需要檢查是否已選中,可以使用屬性 is_selected()
。
Python
checkbox = driver.find_element_by_id("checkbox_id")
if not checkbox.is_selected():
checkbox.click()
3. Radio Buttons(單選按鈕)
單選按鈕允許從多個選項中僅選擇一個。與複選框的操作類似:用 click()
選中選項,並用 is_selected()
檢查狀態。
Python
radio_button = driver.find_element_by_id("radio_button_id")
if not radio_button.is_selected():
radio_button.click()
4. Dropdowns(下拉選單)
下拉選單包含多個選項可供選擇。在 Selenium 中有一個類 Select
,它提供了操作這些列表的方法。
Python
from selenium.webdriver.support.ui import Select
dropdown = Select(driver.find_element_by_id("dropdown_id"))
dropdown.select_by_visible_text("選項 1")
另外,也可以用 select_by_index()
或 select_by_value()
選擇選項。
5. Text Areas(文本區域)
文本區域類似於文字框,但通常用於輸入大量文本。操作方式與文字框完全相同。
Python
text_area = driver.find_element_by_id("textarea_id")
text_area.send_keys("這是一個示例文本,用於文本區域。")
6. Date Picker(日期選擇器)
日期字段允許用戶選擇日期。如果是普通的支持日期格式的文字框,可以用 send_keys()
輸入值。
Python
date_field = driver.find_element_by_id("date_field_id")
date_field.send_keys("2023-12-25") # 日期格式可能因網站而異
但有些日曆字段會需要打開彈出日曆並選擇日期的額外操作。
7. File Upload(文件上傳字段)
這些字段允許將文件上傳到服務器。可以通過 send_keys()
方法指定本地文件的路徑與它們交互。
Python
file_input = driver.find_element_by_id("file_upload_id")
file_input.send_keys("/path/to/file.txt")
8. Hidden Fields(隱藏字段)
隱藏字段不會顯示在頁面上,但可能會用於存儲表單提交所需的信息。只能在擁有其值的訪問權限時與它們交互(例如檢查或更改值)。
Python
hidden_field = driver.find_element_by_id("hidden_field_id")
value = hidden_field.get_attribute("value")
print("隱藏字段的值:", value)
9. 驗證操作成功與否
獲取執行操作的數據是檢查成功與否的指標。例如,提交表單後,您一定想確認申請是否成功接收,對吧?下面是如何做到的:
Python
># 檢查網站上的成功登錄
if "歡迎" in driver.page_source:
print("登錄成功!")
else:
print("登錄過程中發生錯誤。")
10. 問題與解決方案
問題
- 不穩定的運行:網頁經常變化。頁面結構的變化可能導致腳本崩潰,因此需要定期檢查代碼是否最新。
- 依賴網絡速度:頁面和元素加載時間可能會不同。使用顯式等待(explicit waits)來處理延遲。
解決方案
- 日誌記錄:記錄所有操作,以便更好地診斷問題。使用
logging
庫將大大簡化日誌處理。 - 代碼模塊化:將複雜的操作拆分為函數和模塊,以便更輕鬆進行修改和測試。
GO TO FULL VERSION