最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python+Selenium瀏覽器自動化測試與網(wǎng)頁自動登錄

 更新時間:2026年05月15日 09:20:59   作者:yuanpan  
在日常開發(fā)、測試和辦公自動化中,我們經(jīng)常會遇到一些重復(fù)性的瀏覽器操作,如果這些操作每天都要重復(fù)執(zhí)行,手動處理不僅浪費時間,還容易因為漏點、輸錯、忘記截圖而出錯,本文面向Python自動化測試初學(xué)者,通過一個完整案例講解如何使用Selenium自動打開網(wǎng)頁

引言

在日常開發(fā)、測試和辦公自動化中,我們經(jīng)常會遇到一些重復(fù)性的瀏覽器操作,例如打開網(wǎng)頁、輸入賬號密碼、點擊登錄按鈕、檢查頁面是否加載成功、保存截圖、批量處理后臺數(shù)據(jù)等。

如果這些操作每天都要重復(fù)執(zhí)行,手動處理不僅浪費時間,還容易因為漏點、輸錯、忘記截圖而出錯。Python 的 selenium 庫可以幫助我們自動控制瀏覽器,完成網(wǎng)頁自動化測試和網(wǎng)頁自動登錄等任務(wù)。

本文面向 Python 自動化測試初學(xué)者,通過一個完整案例講解如何使用 Selenium 自動打開網(wǎng)頁、輸入用戶名密碼、點擊按鈕、等待頁面元素加載,并自動截圖保存。

一、Selenium 庫介紹

Selenium 是一個常用的瀏覽器自動化測試工具,可以模擬真實用戶在瀏覽器中的操作,例如:

  • 打開網(wǎng)頁
  • 查找頁面元素
  • 輸入文本
  • 點擊按鈕
  • 切換窗口
  • 等待元素加載
  • 獲取頁面內(nèi)容
  • 截圖保存
  • 執(zhí)行 JavaScript
  • 驗證頁面結(jié)果

Selenium 支持多種瀏覽器,包括:

  • Chrome
  • Edge
  • Firefox
  • Safari

在 Python 中使用 Selenium,可以編寫自動化測試腳本,也可以完成一些辦公自動化任務(wù),例如后臺系統(tǒng)自動登錄、自動導(dǎo)出報表、自動截圖留檔、自動巡檢頁面狀態(tài)等。

安裝 Selenium:

pip install selenium

查看版本:

python -c "import selenium; print(selenium.__version__)"

二、ChromeDriver 安裝配置

Selenium 需要通過瀏覽器驅(qū)動來控制瀏覽器。控制 Chrome 瀏覽器時,常用的是 ChromeDriver

1. Selenium 4 的自動驅(qū)動管理

如果你使用的是 Selenium 4.6 及以上版本,Selenium Manager 通??梢宰詣庸芾頌g覽器驅(qū)動。很多情況下,你只需要安裝 Selenium,然后直接運行:

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://www.baidu.com")

Selenium 會嘗試自動找到本機 Chrome,并匹配合適的驅(qū)動。

2. 手動安裝 ChromeDriver

如果自動管理失敗,可以手動安裝 ChromeDriver。

步驟如下:

  1. 打開 Chrome 瀏覽器
  2. 在地址欄輸入 chrome://version/
  3. 查看 Chrome 主版本號
  4. 下載對應(yīng)版本的 ChromeDriver
  5. chromedriver.exe 放到一個固定目錄
  6. 將該目錄加入系統(tǒng)環(huán)境變量 Path

例如 Windows 中可以放到:

C:\WebDriver\chromedriver.exe

并把:

C:\WebDriver

加入環(huán)境變量 Path。

配置完成后,在命令行輸入:

chromedriver --version

如果能看到版本號,說明配置成功。

3. 指定 ChromeDriver 路徑

如果不想配置環(huán)境變量,也可以在代碼中指定驅(qū)動路徑:

from selenium import webdriver
from selenium.webdriver.chrome.service import Service

service = Service(r"C:\WebDriver\chromedriver.exe")
driver = webdriver.Chrome(service=service)

對初學(xué)者來說,建議優(yōu)先使用 Selenium 4 的自動驅(qū)動管理;如果失敗,再手動配置 ChromeDriver。

三、自動打開網(wǎng)頁

Selenium 打開網(wǎng)頁的基本代碼如下:

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://example.com")

常用窗口操作:

driver.maximize_window()
driver.set_window_size(1280, 800)

獲取網(wǎng)頁標(biāo)題:

print(driver.title)

獲取當(dāng)前地址:

print(driver.current_url)

關(guān)閉瀏覽器:

driver.quit()

注意:建議使用 driver.quit() 關(guān)閉整個瀏覽器進程,而不是只用 driver.close() 關(guān)閉當(dāng)前標(biāo)簽頁。

四、元素定位方法

網(wǎng)頁自動化的核心是“找到元素,然后操作元素”。Selenium 提供了多種元素定位方式。

需要先導(dǎo)入:

from selenium.webdriver.common.by import By

常見定位方式如下:

1. 通過 ID 定位

username_input = driver.find_element(By.ID, "username")

適合頁面元素有唯一 id 的情況。

2. 通過 name 定位

password_input = driver.find_element(By.NAME, "password")

表單輸入框經(jīng)常會有 name 屬性。

3. 通過 class name 定位

button = driver.find_element(By.CLASS_NAME, "login-btn")

注意:CLASS_NAME 只能寫單個 class,不能寫多個 class 組合。

4. 通過 CSS Selector 定位

login_button = driver.find_element(By.CSS_SELECTOR, "button.login-btn")

CSS Selector 非常靈活,是實際項目中最常用的方式之一。

例如:

driver.find_element(By.CSS_SELECTOR, "input[name='username']")
driver.find_element(By.CSS_SELECTOR, "#login-form button[type='submit']")

5. 通過 XPath 定位

login_button = driver.find_element(By.XPATH, "http://button[text()='登錄']")

XPath 適合定位結(jié)構(gòu)復(fù)雜、缺少穩(wěn)定屬性的元素。

常見 XPath:

//input[@id='username']
//button[contains(text(), '登錄')]
//div[@class='message']

6. find_element 與 find_elements 的區(qū)別

查找單個元素:

element = driver.find_element(By.CSS_SELECTOR, ".item")

查找多個元素:

elements = driver.find_elements(By.CSS_SELECTOR, ".item")

區(qū)別:

  • find_element 找不到元素會拋異常
  • find_elements 找不到元素會返回空列表

五、自動輸入用戶名密碼

找到輸入框后,可以使用 send_keys() 輸入內(nèi)容。

username_input = driver.find_element(By.ID, "username")
password_input = driver.find_element(By.ID, "password")

username_input.send_keys("demo_user")
password_input.send_keys("demo_password")

如果輸入框中已有內(nèi)容,可以先清空:

username_input.clear()
username_input.send_keys("demo_user")

真實項目中,不建議把賬號密碼直接寫死在代碼里。更推薦使用環(huán)境變量:

import os

username = os.getenv("TEST_USERNAME")
password = os.getenv("TEST_PASSWORD")

運行前設(shè)置環(huán)境變量:

set TEST_USERNAME=demo_user
set TEST_PASSWORD=demo_password

這樣可以避免賬號密碼泄露到代碼倉庫。

六、自動點擊按鈕

點擊按鈕使用 click()

login_button = driver.find_element(By.CSS_SELECTOR, "button[type='submit']")
login_button.click()

有些頁面按鈕需要等待可點擊后再點擊,否則可能出現(xiàn)元素未加載、按鈕被遮擋等問題。更推薦結(jié)合顯式等待:

from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait

wait = WebDriverWait(driver, 10)

login_button = wait.until(
    EC.element_to_be_clickable((By.CSS_SELECTOR, "button[type='submit']"))
)
login_button.click()

七、顯式等待與隱式等待

網(wǎng)頁不是瞬間加載完成的,尤其是現(xiàn)代前端頁面經(jīng)常使用 Ajax、Vue、React 等技術(shù)動態(tài)渲染內(nèi)容。如果元素還沒出現(xiàn)就去定位,很容易報錯。

Selenium 常用兩類等待方式:

  • 隱式等待
  • 顯式等待

1. 隱式等待

隱式等待會對所有元素查找生效。

driver.implicitly_wait(10)

含義:查找元素時,如果元素暫時不存在,最多等待 10 秒。

優(yōu)點:

  • 寫法簡單
  • 對全局生效

缺點:

  • 不夠精確
  • 復(fù)雜頁面中不容易控制具體等待條件

2. 顯式等待

顯式等待針對某個具體條件等待,更適合自動化測試。

wait = WebDriverWait(driver, 10)

element = wait.until(
    EC.presence_of_element_located((By.ID, "username"))
)

常見等待條件:

EC.presence_of_element_located(locator)      # 元素存在于 DOM 中
EC.visibility_of_element_located(locator)    # 元素可見
EC.element_to_be_clickable(locator)          # 元素可點擊
EC.title_contains("首頁")                    # 標(biāo)題包含指定文字
EC.url_contains("dashboard")                 # URL 包含指定文字

實際項目中,建議以顯式等待為主,隱式等待可以設(shè)置一個較短時間作為兜底。

八、自動截圖保存

Selenium 可以保存當(dāng)前瀏覽器截圖,非常適合測試留痕、異常排查和自動化辦公。

driver.save_screenshot("login_result.png")

也可以截圖到指定目錄:

from pathlib import Path
from datetime import datetime

screenshot_dir = Path("screenshots")
screenshot_dir.mkdir(exist_ok=True)

file_name = datetime.now().strftime("login_%Y%m%d_%H%M%S.png")
driver.save_screenshot(str(screenshot_dir / file_name))

如果登錄失敗,可以截圖保存現(xiàn)場,方便后續(xù)分析。

九、完整實戰(zhàn)代碼:自動登錄并截圖

下面是一份完整實戰(zhàn)代碼。為了避免涉及真實網(wǎng)站賬號密碼,示例使用一個演示登錄頁地址和占位選擇器。你在實際項目中只需要把 URL、賬號密碼和元素定位方式替換成自己的系統(tǒng)即可。

建議保存為:

selenium_login_demo.py

完整代碼如下:

import os
from datetime import datetime
from pathlib import Path

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


LOGIN_URL = "https://example.com/login"
USERNAME = os.getenv("TEST_USERNAME", "demo_user")
PASSWORD = os.getenv("TEST_PASSWORD", "demo_password")
SCREENSHOT_DIR = Path("screenshots")


def create_driver():
    """創(chuàng)建 Chrome 瀏覽器對象。"""
    options = webdriver.ChromeOptions()
    options.add_argument("--start-maximized")
    options.add_argument("--disable-blink-features=AutomationControlled")

    driver = webdriver.Chrome(options=options)
    driver.implicitly_wait(3)
    return driver


def save_screenshot(driver, name_prefix):
    """保存瀏覽器截圖。"""
    SCREENSHOT_DIR.mkdir(exist_ok=True)
    timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
    file_path = SCREENSHOT_DIR / f"{name_prefix}_{timestamp}.png"
    driver.save_screenshot(str(file_path))
    return file_path


def login(driver):
    """自動打開網(wǎng)頁、輸入賬號密碼并點擊登錄。"""
    wait = WebDriverWait(driver, 10)

    driver.get(LOGIN_URL)

    username_input = wait.until(
        EC.visibility_of_element_located((By.ID, "username"))
    )
    password_input = wait.until(
        EC.visibility_of_element_located((By.ID, "password"))
    )

    username_input.clear()
    username_input.send_keys(USERNAME)

    password_input.clear()
    password_input.send_keys(PASSWORD)

    login_button = wait.until(
        EC.element_to_be_clickable((By.CSS_SELECTOR, "button[type='submit']"))
    )
    login_button.click()

    wait.until(
        EC.url_contains("dashboard")
    )

    success_element = wait.until(
        EC.visibility_of_element_located((By.CSS_SELECTOR, ".user-info"))
    )
    return success_element.text


def main():
    driver = create_driver()

    try:
        user_info = login(driver)
        print(f"登錄成功:{user_info}")
        screenshot_path = save_screenshot(driver, "login_success")
        print(f"成功截圖已保存:{screenshot_path}")

    except TimeoutException:
        screenshot_path = save_screenshot(driver, "login_failed")
        print(f"登錄失敗或頁面加載超時,現(xiàn)場截圖已保存:{screenshot_path}")
        raise

    finally:
        driver.quit()


if __name__ == "__main__":
    main()

十、如何改成真實網(wǎng)站登錄

把示例代碼改成真實項目,一般只需要修改 5 個地方。

1. 修改登錄地址

LOGIN_URL = "https://your-company-system.com/login"

2. 修改用戶名輸入框定位

如果頁面 HTML 是:

<input id="account" name="account">

則代碼可以改成:

username_input = wait.until(
    EC.visibility_of_element_located((By.ID, "account"))
)

3. 修改密碼輸入框定位

password_input = wait.until(
    EC.visibility_of_element_located((By.NAME, "password"))
)

4. 修改登錄按鈕定位

login_button = wait.until(
    EC.element_to_be_clickable((By.XPATH, "http://button[contains(text(), '登錄')]"))
)

5. 修改登錄成功判斷條件

登錄成功后,頁面可能跳轉(zhuǎn)到后臺首頁,也可能出現(xiàn)用戶頭像或用戶名。

例如:

wait.until(EC.url_contains("home"))

或者:

wait.until(
    EC.visibility_of_element_located((By.CSS_SELECTOR, ".avatar"))
)

自動化測試中,登錄成功判斷非常重要。不能只點擊按鈕就認為登錄成功,必須驗證頁面狀態(tài)。

十一、常見問題與解決方法

1. 找不到元素

常見報錯:

NoSuchElementException

原因可能是:

  • 定位方式寫錯
  • 頁面還沒加載完成
  • 元素在 iframe 中
  • 元素需要滾動后才出現(xiàn)
  • 頁面結(jié)構(gòu)發(fā)生變化

解決建議:

  • 使用瀏覽器開發(fā)者工具檢查元素
  • 優(yōu)先使用穩(wěn)定的 id、name、data-* 屬性
  • 增加顯式等待
  • 如果元素在 iframe 中,先切換 iframe

2. 元素不可點擊

常見報錯:

ElementClickInterceptedException

可能原因:

  • 頁面彈窗遮擋
  • 按鈕還沒變成可點擊狀態(tài)
  • 頁面動畫還沒結(jié)束

解決方式:

login_button = wait.until(
    EC.element_to_be_clickable((By.CSS_SELECTOR, "button[type='submit']"))
)
login_button.click()

3. 頁面有驗證碼

如果登錄頁面有驗證碼、短信驗證碼、滑塊驗證,不建議繞過驗證碼。驗證碼本身就是為了防止自動化濫用。

企業(yè)內(nèi)部測試環(huán)境可以采用這些方式:

  • 測試環(huán)境關(guān)閉驗證碼
  • 使用專門的測試賬號白名單
  • 后端提供測試登錄接口
  • 自動化測試前寫入測試登錄 Cookie

4. 瀏覽器啟動失敗

可能原因:

  • Chrome 沒安裝
  • ChromeDriver 版本不匹配
  • Selenium 版本過舊
  • 驅(qū)動路徑?jīng)]有配置

建議先升級 Selenium:

pip install -U selenium

然后確認 Chrome 能正常打開。

十二、自動化辦公場景分析

Selenium 不只適合自動化測試,也可以用于一些辦公自動化場景。

1. 后臺系統(tǒng)自動登錄

很多公司內(nèi)部系統(tǒng)需要每天登錄查看數(shù)據(jù),例如 CRM、ERP、OA、工單系統(tǒng)、數(shù)據(jù)看板等。Selenium 可以自動登錄后臺,進入指定頁面。

2. 自動導(dǎo)出報表

如果系統(tǒng)沒有開放 API,但頁面上提供“導(dǎo)出 Excel”按鈕,可以使用 Selenium 自動點擊篩選條件、選擇日期、點擊導(dǎo)出。

3. 頁面巡檢與截圖留檔

運維或測試人員可以定時打開多個業(yè)務(wù)頁面,檢查是否出現(xiàn)錯誤提示,并自動保存截圖。

4. 批量錄入表單

一些舊系統(tǒng)沒有批量導(dǎo)入功能,只能手動填寫網(wǎng)頁表單。Selenium 可以讀取 Excel 數(shù)據(jù),然后自動填寫網(wǎng)頁表單。

5. 自動化回歸測試

開發(fā)完成新功能后,可以用 Selenium 編寫登錄、查詢、提交、刪除等流程測試腳本,減少人工回歸測試成本。

十三、自動化測試代碼編寫建議

初學(xué)者寫 Selenium 腳本時,建議注意以下幾點:

  • 不要把真實賬號密碼寫死在代碼里
  • 盡量使用顯式等待
  • 優(yōu)先選擇穩(wěn)定的元素定位方式
  • 每個關(guān)鍵步驟后都做結(jié)果驗證
  • 失敗時保存截圖
  • try...finally 確保瀏覽器最終關(guān)閉
  • 不要對公共網(wǎng)站進行高頻自動化請求
  • 遵守目標(biāo)網(wǎng)站的使用規(guī)則

一個好的自動化腳本,不只是能跑通一次,而是能穩(wěn)定、可維護、容易定位問題。

十四、總結(jié)

本文使用 Python + Selenium 完成了一個“瀏覽器自動化測試與網(wǎng)頁自動登錄”的入門實戰(zhàn)案例。

你已經(jīng)學(xué)習(xí)了:

  • Selenium 庫的作用
  • ChromeDriver 的安裝與配置
  • 如何自動打開網(wǎng)頁
  • 如何自動輸入用戶名和密碼
  • 如何自動點擊登錄按鈕
  • 常見元素定位方法
  • 顯式等待與隱式等待的區(qū)別
  • 如何自動截圖保存
  • 一份完整的自動登錄實戰(zhàn)代碼
  • Selenium 在自動化辦公中的應(yīng)用場景

對于 Python 自動化測試初學(xué)者來說,建議先從簡單頁面練習(xí)元素定位、輸入、點擊和等待,再逐步擴展到真實業(yè)務(wù)系統(tǒng)。

當(dāng)你掌握 Selenium 后,就可以把很多重復(fù)性的瀏覽器操作變成腳本,讓測試、辦公和數(shù)據(jù)處理流程更加高效。

以上就是Python+Selenium瀏覽器自動化測試與網(wǎng)頁自動登錄的詳細內(nèi)容,更多關(guān)于Python Selenium瀏覽器自動化測試與登錄的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • python3.7 的新特性詳解

    python3.7 的新特性詳解

    這篇文章主要介紹了python3.7 的新特性詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • OpenCV 圖像繪制的實現(xiàn)

    OpenCV 圖像繪制的實現(xiàn)

    本文主要介紹了OpenCV 圖像繪制的實現(xiàn),主要包括直線,圓,多邊形和自定義圖形等,具有一定的參考價值,感興趣的可以了解一下
    2021-07-07
  • 使用Python實現(xiàn)分組數(shù)據(jù)并保存到單獨的文件中

    使用Python實現(xiàn)分組數(shù)據(jù)并保存到單獨的文件中

    當(dāng)處理大型數(shù)據(jù)集時,通常需要將數(shù)據(jù)分組,并將每個分組的數(shù)據(jù)保存到單獨的文件中,本文將使用 Python 中的 pandas 庫來實現(xiàn)這一目標(biāo),需要的可以參考下
    2024-04-04
  • 基于Python實現(xiàn)簡單學(xué)生管理系統(tǒng)

    基于Python實現(xiàn)簡單學(xué)生管理系統(tǒng)

    這篇文章主要為大家詳細介紹了基于Python實現(xiàn)簡單學(xué)生管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • python3實現(xiàn)抓取網(wǎng)頁資源的 N 種方法

    python3實現(xiàn)抓取網(wǎng)頁資源的 N 種方法

    這兩天學(xué)習(xí)了python3實現(xiàn)抓取網(wǎng)頁資源的方法,發(fā)現(xiàn)了很多種方法,所以,今天添加一點小筆記。
    2017-05-05
  • Python字典和列表性能之間的比較

    Python字典和列表性能之間的比較

    今天給大家介紹的是Python列表和字典的相關(guān)知識,文中對Python字典和列表的性能作了充分的比較,好奇的小伙伴們一起來看看吧,需要的朋友可以參考下
    2021-06-06
  • PyInstaller打包TkinterDnD應(yīng)用時窗口圖標(biāo)失效問題的解決詳解

    PyInstaller打包TkinterDnD應(yīng)用時窗口圖標(biāo)失效問題的解決詳解

    在使用 Python 的 Tkinter 庫開發(fā)圖形用戶界面(GUI)應(yīng)用時,為應(yīng)用設(shè)置一個獨特的圖標(biāo)是提升用戶體驗的重要一步,但偶爾會遇到應(yīng)用窗口左上角的圖標(biāo)消失的問題,下面我們就來看看如何解決吧
    2025-11-11
  • 如何利用python?turtle繪圖自定義畫布背景顏色

    如何利用python?turtle繪圖自定義畫布背景顏色

    Turtle庫是Python語言中一個很流行的繪制圖像的函數(shù)庫,想象一個小烏龜,在一個橫軸為x、縱軸為y的坐標(biāo)系原點,(0,0)位置開始,這篇文章主要給大家介紹了關(guān)于如何利用python?turtle繪圖自定義畫布背景顏色的相關(guān)資料,需要的朋友可以參考下
    2021-12-12
  • Pytorch:dtype不一致問題(expected dtype Double but got dtype Float)

    Pytorch:dtype不一致問題(expected dtype Double but&

    這篇文章主要介紹了Pytorch:dtype不一致問題(expected dtype Double but got dtype Float),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • 使用Python計算兩個不同列表的相似度

    使用Python計算兩個不同列表的相似度

    這篇文章主要介紹了使用Python計算兩個不同列表的相似度,Python數(shù)據(jù)開發(fā)工作中的需求兩個不同列表給出相似度,本文實現(xiàn)判斷數(shù)字類型相似度和字符串類型相似度,非常實用,需要的朋友可以參考下
    2023-07-07

最新評論

峨眉山市| 亳州市| 申扎县| 东平县| 和田市| 永仁县| 四会市| 安吉县| 安丘市| 永济市| 梅州市| 鄯善县| 南溪县| 大荔县| 右玉县| 内黄县| 星座| 平乐县| 乌拉特后旗| 平陆县| 彭泽县| 鲜城| 岱山县| 奉节县| 云梦县| 琼中| 射阳县| 昭觉县| 新干县| 凤阳县| 永安市| 如东县| 棋牌| 龙州县| 安化县| 磐安县| 峨山| 贵港市| 沙河市| 山东省| 克拉玛依市|