CodeGym /Java Adesua /Python SELF TW /設定腳本來自動化網站上的操作序列

設定腳本來自動化網站上的操作序列

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

1. 操作腳本與其執行順序

當我們開始規劃自動化腳本時,要記住像故事一樣,應該從簡單到複雜。想像你的腳本是一位英雄, 它正在網頁上旅行。每一步都精確設計和調整,以便不偏離路徑。

建立逐步自動化腳本

首先要規劃好計畫。你想達到什麼目的?加載網頁、填寫表單、點擊按鈕嗎? 就像大家常說的:「不計劃的人就是計劃失敗的人」。我們可不想失敗, 所以讓我們詳細列出每一步。

Python

from selenium import webdriver
from selenium.webdriver.common.by import By

# 創建瀏覽器驅動的實例。使用適合你瀏覽器的驅動。
driver = webdriver.Chrome()

# 開啟網頁
driver.get('https://example.com/login')

# 填寫登入名
driver.find_element(By.NAME, 'username').send_keys('my_username')

# 填寫密碼
driver.find_element(By.NAME, 'password').send_keys('my_secure_password')

# 點擊登入按鈕
driver.find_element(By.ID, 'login-button').click()

就是這樣,我們為腳本操作設定了節奏。每一步順序執行,好讓腳本能夠流暢地 瀏覽網站。

記錄執行步驟

就像每一位自尊自重的英雄,我們的腳本也應該留下「足跡」,讓我們知道它去了哪裡, 做了什麼。記錄(logging)就像我們腳本的日記。它幫助我們追蹤腳本的執行情況, 以及在有問題時查找錯誤。

Python

import logging

# 設定記錄
logging.basicConfig(level=logging.INFO)

# 記錄操作範例
logging.info("開啟登入頁面")
driver.get('https://example.com/login')

記錄不僅能幫助我們進行調試,也能讓我們安心,知道腳本正按計畫執行。 如果出現問題,我們就能回頭看看是在哪一步出錯了。

2. 讓程式碼更易於閱讀與修改

當腳本變得更加複雜時,保持程式碼的整潔非常重要。 想像一下生日聚會,賓客很多,食物也很多:如果不把一切安排得井井有條,那就會變成一團糟。 在我們的情況下,就是程式碼的混亂。

設定程式碼結構

要想輕鬆對程式碼進行修改,它必須組織得井然有序。 像整理襪子那樣,把每件事都分類整理好。 使用函數,將重複的操作提取到獨立的區塊中。

Python

def login_to_site(driver, username, password):
    logging.info("輸入登入名")
    driver.find_element(By.NAME, 'username').send_keys(username)
    
    logging.info("輸入密碼")
    driver.find_element(By.NAME, 'password').send_keys(password)
    
    logging.info("點擊登入按鈕")
    driver.find_element(By.ID, 'login-button').click()

# 使用函數進行登入
login_to_site(driver, 'my_username', 'my_secure_password')

使用函數可以讓程式碼更緊湊,也更容易修改。 比如,如果登入按鈕的 ID 改變了,只需要在一個函數中進行修改, 而不用在整個程式碼中修改。

3. 範例:網站購物流程的自動化

假設我們需要自動化網站購物流程,包含以下步驟:

  1. 開啟網站並登入帳戶。
  2. 進入商品目錄並將商品加入購物車。
  3. 進入購物車並完成購買。
Python

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 驅動初始化與設置
def initialize_driver():
    driver = webdriver.Chrome()
    driver.implicitly_wait(10)  # 隱式等待
    return driver

# 登入帳戶的函數
def login(driver, username, password):
    driver.get("https://example.com")
    driver.find_element_by_id("username").send_keys(username)
    driver.find_element_by_id("password").send_keys(password)
    driver.find_element_by_id("login_button").click()

# 進入商品目錄並加入商品到購物車
def add_product_to_cart(driver):
    driver.get("https://example.com/catalog")
    product = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.CLASS_NAME, "product_item"))
    )
    product.click()

    add_to_cart_button = driver.find_element_by_id("add_to_cart")
    add_to_cart_button.click()

# 進入購物車並完成購買
def checkout(driver):
    driver.get("https://example.com/cart")
    checkout_button = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.ID, "checkout"))
    )
    checkout_button.click()

# 關閉驅動的函數
def close_driver(driver):
    driver.quit()

# 主腳本執行操作序列
def main():
    # 設定登入資料
    username = "myusername"
    password = "mypassword"
    
    # 初始化驅動
    driver = initialize_driver()
    
    try:
        # 登入網站
        login(driver, username, password)
        
        # 進入商品目錄並加入商品到購物車
        add_product_to_cart(driver)
        
        # 進入購物車並完成購買
        checkout(driver)
    
    finally:
        # 關閉驅動
        close_driver(driver)

# 執行主腳本
main()

函數說明

  1. initialize_driver() — 初始化瀏覽器驅動的函數。 它為所有元素設置了隱式等待並返回驅動對象。
  2. login() — 負責執行網站登入的函數。它接受 usernamepassword 參數, 用於填寫登入表單和點擊按鈕。
  3. add_product_to_cart() — 用於進入目錄,選擇產品並將其加入購物車的函數。
  4. checkout() — 用於進入購物車並完成購買的函數。
  5. close_driver() — 負責關閉瀏覽器驅動的函數。
  6. main() — 主函數,管理執行的操作序列。包括調用各個階段的函數以及指定登入所需的資料。

這種方法的優勢

  1. 可讀性 — 每個階段都單獨處理成函數,讓程式碼更容易理解。
  2. 可重用性 — 單個函數可以獨立於主腳本使用,例如,執行網站上的單個操作。
  3. 便於測試 — 每個階段都可以單獨測試,確保所有功能運行正常。
  4. 靈活性 — 可以根據需要添加其他函數,或者改變 main() 中的執行順序。
1
Опрос
優化 Selenium 腳本,  37 уровень,  4 лекция
недоступен
優化 Selenium 腳本
優化 Selenium 腳本
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION