1. 與表單元素互動簡介
網頁中的表單是互動的起點。想像一下表單就像是一個神秘的控制面板,讓用戶可以和系統互動。但與其給掃地機器人指令,我們在這裡是給網站傳遞資訊。
如何在文字框中輸入文字
首先我們來談談如何利用 Selenium 在文字框中輸入文字。這可以透過方法 send_keys() 來完成。我們一步一步來看看這怎麼操作。
from selenium import webdriver
# 設定 webdriver 路徑,這裡是你 webdriver 的本地路徑
driver = webdriver.Chrome(executable_path='path/to/chromedriver')
# 開啟網頁
driver.get('http://example.com/login')
# 找到輸入框 (例如通過 id) 並輸入文字
username_field = driver.find_element_by_id('username')
username_field.send_keys('我的超炫帳戶')
password_field = driver.find_element_by_id('password')
password_field.send_keys('我的超級秘密密碼')
在這個簡單的範例中,我們開啟了一個頁面,並通過 ID 找到輸入框。接著,我們使用 send_keys() 方法來給輸入框傳遞文字。很簡單對吧,就像進階版的 copy-paste!
填寫文字框的小技巧
如果你覺得表單的行為有點怪異,可能是因為輸入框中已經有舊文字。在輸入新文字之前,請用 clear() 方法清除舊文字。
username_field.clear()
username_field.send_keys('新值')
這個小技巧能讓你省下不少麻煩,真的!
2. 按鍵操作
現在輸入框已經填完了,是時候按按鍵了,例如提交表單。在 Selenium 中,我們可以用方法 click() 來完成。就像你按下「查看更多梗圖」的按鈕一樣,但這次是程式控制的。
# 找到按鈕 (例如通過名稱) 並點擊
login_button = driver.find_element_by_name('login')
login_button.click()
就這樣,我們的 Selenium 腳本變成了按鍵大師,比你在遊戲中狂點按鍵更厲害!
使用範例
我們來看一個範例,結合 send_keys() 和 click() 方法來填寫和提交註冊表單。
# 開啟註冊頁面
driver.get('http://example.com/register')
# 填寫註冊表單
driver.find_element_by_id('first_name').send_keys('Ivan')
driver.find_element_by_id('last_name').send_keys('Ivanov')
driver.find_element_by_id('email').send_keys('ivan@example.com')
driver.find_element_by_id('password').send_keys('超級秘密123')
# 按下「註冊」按鈕
register_button = driver.find_element_by_css_selector('.register-button')
register_button.click()
這個簡單的範例展示了如何自動化網站上的註冊過程。這對測試註冊表單和模擬用戶操作非常有幫助。
3. 解決麻煩的表單
有時候網頁會讓你抓狂。你按了按鈕,卻沒反應。更糟的是,頁面還報錯了。我們來討論一些常見問題以及解決它們的方法。
處理動態元素
有些頁面的元素不會立即載入。在這種情況下,你的腳本可能會嘗試與某個尚未載入的元素互動。這就像你開始煎蛋,但蛋還在冰箱裡。
為避免這些情況,請使用等待功能。Selenium 可以讓你的腳本等到某個元素可用後再進行互動:
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# 等待元素可點擊後再點擊
register_button = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.CSS_SELECTOR, '.register-button'))
)
register_button.click()
使用 WebDriverWait,你可以告訴 Selenium 等到元素準備好再執行動作。這大大提高了腳本的穩定性。
處理隱藏的元素
有些頁面的元素可能是隱藏的,例如隱藏的按鈕或輸入框。如果嘗試與它們互動,可能會報錯。在這種情況下,可以用 JavaScript 讓它們變得可見:
driver.execute_script("arguments[0].style.visibility='visible';", hidden_element)
hidden_element.click()
這個方法可以讓你成功與那些因為某些原因被隱藏的元素互動。
4. 實際應用:表單自動化
現在我們已經瞭解如何與表單互動,讓我們來看看如何在現實生活中應用它。
你的老闆決定所有人每天都要通過網頁表單提交日報。而你當然不想每天都手動完成這件事啦。透過 Selenium,你可以建立腳本,讓它每天自動填寫並提交你的日報表單。
日報自動化範例
假設我們有一個網站,提供了一個每日報告的表單。表單包括姓名、部門和完成的工作內容欄位。我們來實現自動化:
driver.get('http://example.com/daily_report')
# 填寫日報表單
driver.find_element_by_id('name').send_keys('安娜・彼得洛娃')
driver.find_element_by_id('department').send_keys('科技部')
driver.find_element_by_id('report').send_keys('今天修復了所有 BUG!')
# 提交表單
submit_button = driver.find_element_by_id('submit')
submit_button.click()
這樣的腳本可以節省寶貴時間並避免人為失誤。不過,對於複雜的表單,記得測試每一步並考慮可能的錯誤情況。
今天的講座到此結束!我們學會了如何填寫輸入框和按下按鈕,就像系統化的網上問卷一樣,這將賦予你與網頁互動的超強自動化能力。
繼續探索 Selenium,請繼續關注我們,學習更多將你的瀏覽器變成真正的自動化機器的方法吧!
GO TO FULL VERSION