CodeGym /Adesua ahorow /Python SELF TW /在網頁上自動化操作表單和按鈕以收集數據

在網頁上自動化操作表單和按鈕以收集數據

Python SELF TW
等級 37 , 課堂 3
開放

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 庫將大大簡化日誌處理。
  • 代碼模塊化:將複雜的操作拆分為函數和模塊,以便更輕鬆進行修改和測試。
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION