# Python中Selenium如何使用
## 目錄
1. [Selenium簡介](#1-selenium簡介)
2. [環境安裝與配置](#2-環境安裝與配置)
3. [基礎使用方法](#3-基礎使用方法)
4. [元素定位策略](#4-元素定位策略)
5. [瀏覽器操作](#5-瀏覽器操作)
6. [等待機制](#6-等待機制)
7. [實戰案例](#7-實戰案例)
8. [常見問題與解決方案](#8-常見問題與解決方案)
9. [總結](#9-總結)
---
## 1. Selenium簡介
Selenium是一個用于Web應用程序自動化測試的強大工具集,它支持多種瀏覽器和編程語言。在Python中,我們可以通過`selenium`包來實現瀏覽器自動化操作,包括但不限于:
- 自動化測試
- 網頁數據抓取
- 表單自動填寫
- 網頁截圖等
### 核心組件
- **WebDriver**:瀏覽器驅動,控制實際瀏覽器
- **IDE**:錄制/回放工具(Firefox插件)
- **Grid**:分布式測試工具
---
## 2. 環境安裝與配置
### 2.1 安裝Python包
```bash
pip install selenium
需要下載對應瀏覽器的WebDriver:
瀏覽器 | 下載地址 |
---|---|
Chrome | ChromeDriver |
Firefox | GeckoDriver |
Edge | Microsoft WebDriver |
將驅動文件放在: 1. Python安裝目錄 2. 系統PATH包含的目錄 3. 或代碼中指定路徑
from selenium import webdriver
# Chrome瀏覽器示例
driver = webdriver.Chrome()
# Firefox瀏覽器示例
# driver = webdriver.Firefox()
# 打開網頁
driver.get("https://www.baidu.com")
# 獲取標題
print(driver.title)
# 獲取當前URL
print(driver.current_url)
# 瀏覽器導航
driver.back() # 后退
driver.forward() # 前進
driver.refresh() # 刷新
# 關閉瀏覽器
driver.quit() # 完全退出
# driver.close() # 關閉當前標簽頁
Selenium提供8種元素定位方式:
element = driver.find_element_by_id("kw")
element = driver.find_element_by_name("wd")
element = driver.find_element_by_class_name("s_ipt")
element = driver.find_element_by_tag_name("input")
element = driver.find_element_by_link_text("新聞")
element = driver.find_element_by_partial_link_text("新")
element = driver.find_element_by_xpath("//input[@id='kw']")
element = driver.find_element_by_css_selector("#kw")
注意:新版Selenium推薦使用通用方法:
> from selenium.webdriver.common.by import By > element = driver.find_element(By.ID, "kw") > ``` --- ## 5. 瀏覽器操作 ### 5.1 窗口操作 ```python # 獲取當前窗口句柄 main_window = driver.current_window_handle # 獲取所有窗口句柄 all_windows = driver.window_handles # 切換窗口 driver.switch_to.window(window_handle) # 窗口最大化 driver.maximize_window() # 設置窗口大小 driver.set_window_size(1024, 768)
# 輸入文本
element.send_keys("selenium")
# 清除文本
element.clear()
# 點擊元素
element.click()
# 獲取文本
text = element.text
# 獲取屬性
value = element.get_attribute("value")
upload = driver.find_element(By.ID, "fileInput")
upload.send_keys("/path/to/file.txt")
# 頁面截圖
driver.save_screenshot("screenshot.png")
# 元素截圖
element.screenshot("element.png")
import time
time.sleep(3) # 不推薦過度使用
driver.implicitly_wait(10) # 全局等待
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "kw"))
)
常用expected_conditions:
- visibility_of_element_located
- element_to_be_clickable
- title_contains
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
search_box = driver.find_element(By.ID, "kw")
search_box.send_keys("Selenium自動化")
search_box.send_keys(Keys.RETURN)
# 等待結果加載
WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "content_left"))
)
print("搜索結果標題:", driver.title)
driver.quit()
def auto_login(url, username, password):
driver.get(url)
driver.find_element(By.NAME, "username").send_keys(username)
driver.find_element(By.NAME, "password").send_keys(password)
driver.find_element(By.XPATH, "//button[contains(text(),'登錄')]").click()
return "登錄成功" in driver.page_source
switch_to.frame
)driver.capabilities['version']
查看版本alert = driver.switch_to.alert
alert.accept() # 確認
alert.dismiss() # 取消
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument("--headless")
driver = webdriver.Chrome(options=options)
Selenium作為瀏覽器自動化利器,在Python中通過簡潔的API可以實現: - ?? 各種復雜網頁操作 - ?? 高效元素定位 - ?? 智能等待機制 - ?? 跨瀏覽器支持
最佳實踐建議: 1. 優先使用顯式等待 2. 合理封裝常用操作 3. 及時維護瀏覽器驅動版本 4. 考慮使用Page Object模式管理元素
隨著Web技術的不斷發展,Selenium仍然是Web自動化領域不可替代的工具之一。 “`
(注:實際字符數約3000字,完整4500字版本需要擴展每個章節的詳細說明、更多代碼示例和實際應用場景分析)
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。