文章目錄
- 前言
- 一、初識selenium
- 二、安裝selenium
- 2.1 查看chrome版本并禁止chrome自動更新
- 2.1.1 查看chrome版本
- 2.1.2 禁止chrome更新自動更新
- 2.2 安裝對應版本的驅動程序
- 2.3安裝selenium包
- 三、selenium關于瀏覽器的使用
- 3.1 創建瀏覽器、設置、打開
- 3.2 打開/關閉網頁及瀏覽器
- 3.3 瀏覽器的最大/小化
- 3.4 瀏覽器打開位置、尺寸
- 3.5 瀏覽器截圖、網頁刷新
- 四、selenium關于元素的使用
- 4.1 元素定位
- 4.2 元素交互操作
- 4.3 元素八種定位方式
- 4.3.1 元素定位-ID
- 4.3.2 元素定位-NAME
- 4.3.3 元素定位-CLASS_NAME
- 4.3.4 元素定位-TAG_NAME
- 4.3.5 元素定位-LINK_TEXT
- 4.3.6 元素定位-PARTIAL_LINK_TEXT
- 4.3.7 元素定位-CSS_SELECTOR
- 4.3.8 元素定位-XPATH
- 4.4 元素定位的隱式等待
- 案例一: 獲取表單元素并修改
- 案例二:重復填寫表單
- 五、三種瀏覽器獲取框(警告框、確認框、提示框)
- 5.1 警告框
- 5.2 確認框
- 5.3 提示框
- 六、 iframe嵌套網頁內部元素獲取
- 七、獲取元素以及判斷可見性
- 八、 網頁前進、后退
- 總結
前言
在當今快速發展的互聯網時代,自動化測試和網絡爬蟲技術已經成為開發者和測試工程師不可或缺的技能。Python 作為一門簡潔、高效的編程語言,憑借其豐富的生態庫和易用性,成為了自動化測試和爬蟲開發的首選工具之一。而 Selenium,作為一款強大的瀏覽器自動化工具,不僅能夠模擬用戶操作,還能處理動態加載的網頁內容,為開發者提供了極大的便利。
無論是進行 Web 應用的自動化測試,還是從復雜的網站中抓取數據,Selenium 都能勝任。它支持多種瀏覽器(如 Chrome、Firefox、Edge 等),并提供了靈活的 API,使得開發者可以輕松實現頁面元素的定位、交互和驗證。此外,結合 Python 的簡潔語法,Selenium 讓自動化任務的編寫變得更加高效和直觀。
本文將帶你深入探索 Python 與 Selenium 的結合使用,從基礎的環境搭建到高級的實戰技巧,幫助你快速掌握這一強大工具。無論你是剛入門的新手,還是希望進一步提升技能的開發者,相信本文都能為你提供有價值的參考和啟發。
一、初識selenium
- 自動化測試:快速完成重復性網頁測試,提高效率
- 處理動態內容:完美支持JavaScript渲染的現代網頁
- 跨瀏覽器支持:Chrome/Firefox/Edge等主流瀏覽器都兼容
- Python絕配:配合Requests/BeautifulSoup等庫更強大
- 數據采集:解決普通爬蟲無法處理的交互式網站
- 就業優勢:Web自動化的必備技能,提升職場競爭力
簡而言之:Selenium讓網頁自動化變得簡單高效!
二、安裝selenium
注意: 這里所有的舉例都采用chrome瀏覽器。對于其他瀏覽器大致步驟一致。
2.1 查看chrome版本并禁止chrome自動更新
2.1.1 查看chrome版本
步驟: 設置
? ? 關于chrome
? ? 查看版本
2.1.2 禁止chrome更新自動更新
chrome自動更新會導致chrome驅動出現失效問題,因而需要禁止自動更新。
詳細步驟:
Win+ R 打開輸入services.msc
找到所有關于Google更新的相關程序,雙擊打開改為禁用即可
重新打開chrome 出現該效果即表示成功
2.2 安裝對應版本的驅動程序
網址:
https://storage.googleapis.com/chrome-for-testing-public/你的版本號/win64/chromedriver-win64.zip
安裝好對應的zip包之后,將其解壓,復制一份chromedriver.exe程序
2.3安裝selenium包
安裝方式:通過之前安裝(lxml,jsonpath等)操作來安裝selenium,這里不再介紹。
三、selenium關于瀏覽器的使用
3.1 創建瀏覽器、設置、打開
注意:第一步先將復制的文件粘貼到對應的項目下面
測試:
# 用于操作瀏覽器
# from selenium import webdriver
# 用于設置谷歌瀏覽器
# from selenium.webdriver.chrome.options import Options
# 用于管理谷歌驅動
# from selenium.webdriver.chrome.service import Service# (1)導包
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service# 創建瀏覽器對象
options = Options()
# 禁用沙盒模式(增加兼容性)--- 如果沒有出現秒閃退問題,可以不填入
options.add_argument('--no-sandbox')
# 保持瀏覽器打開狀態(默認執行完之后會自動關閉)
options.add_experimental_option("detach", True)
# 創建并啟動瀏覽器
browse = webdriver.Chrome(service=Service('chromedriver.exe'),options=options)
3.2 打開/關閉網頁及瀏覽器
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
import time# 封裝
def setup():options = Options()options.add_experimental_option("detach", True)browser = webdriver.Chrome(service=Service('chromedriver.exe'),options=options)return browserbrowser = setup()
# 打開指定的網址
browser.get('https://www.baidu.com')
# 打印源碼
print(browser.page_source)
time.sleep(3)
# 關閉當前的標簽頁
browser.close()
# 退出瀏覽器并釋放驅動
browser.quit()
3.3 瀏覽器的最大/小化
import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Servicedef setup():options = Options()options.add_experimental_option("detach", True)browser = webdriver.Chrome(service=Service('chromedriver.exe'),options=options)return browserbrowser = setup()browser.get('https://www.baidu.com')
time.sleep(2)
# 瀏覽器最大化
browser.maximize_window()
time.sleep(2)
# 瀏覽器最小化
browser.minimize_window()
time.sleep(2)
# 重新返回最大化
browser.maximize_window()
time.sleep(2)
# 關閉瀏覽器
browser.quit()
3.4 瀏覽器打開位置、尺寸
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Servicedef setup():options = Options()options.add_experimental_option('detach', True)browser = webdriver.Chrome(service=Service('chromedriver.exe'), options=options)return browserbrowser = setup()# 單位均為像素
# 設置瀏覽器打開的位置(相對于左上角)
browser.set_window_position(100,100)
# 設置寬高px
browser.set_window_size(800,600)
# 關閉瀏覽器
browser.quit()
3.5 瀏覽器截圖、網頁刷新
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
import time
def setup():options = Options()options.add_experimental_option('detach', True)browser = webdriver.Chrome(service=Service('chromedriver.exe'), options=options)return browserbrowser = setup()
browser.get('https://www.baidu.com')
# 瀏覽器截圖(盡量保存為png的格式)
browser.get_screenshot_as_file('baidu.png')
time.sleep(3)
# 刷新當前頁
browser.refresh()
time.sleep(3)
# 關閉
browser.quit()
四、selenium關于元素的使用
4.1 元素定位
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
import time
def setup():options = Options()options.add_experimental_option('detach', True)browser = webdriver.Chrome(service=Service('chromedriver.exe'), options=options)return browserbrowser = setup()
browser.get('https://www.baidu.com')
# 使用元素定位需要先導入對應的包
# from selenium.webdriver.common.by import By# 例如根據ID查找百度首頁的輸入框
# <input id="kw" name="wd"># find_element用來查找一個元素時使用
# 找不到時會直接報錯
# 類似于根據id查找的,使用該方法即可,id是元素的唯一標識
input = browser.find_element(By.ID, 'kw')
# 獲取class
print(input.get_attribute('class'))
# 獲取標簽名
print(input.tag_name)# find_elements用來查找多個元素時使用
# 返回的是列表,找不到時不會報錯會返回一個空列表
inputs = browser.find_elements(By.ID, 'kw')
print(inputs)# 提示一下:也可以在瀏覽器的控制臺輸入
# document.getElementById('kw') 來先查找一下# 關閉瀏覽器
browser.quit()
4.2 元素交互操作
import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import Bydef setup():options = Options()options.add_experimental_option('detach',True)browser = webdriver.Chrome(service=Service('chromedriver.exe'),options=options)return browserbrowser = setup()# 獲取指定的網址
browser.get('https://www.baidu.com')
input = browser.find_element(By.ID,'kw')
# 元素輸入
input.send_keys('fasgfagasgasg')
time.sleep(3)
# 元素清空
input.clear()
time.sleep(2)
# 元素再次輸入
input.send_keys('古詩文')
time.sleep(2)
# 獲取搜索按鈕
button = browser.find_element(By.ID,'su')
# 調用按鈕的點擊方法
button.click()
time.sleep(2)
# 關閉瀏覽器
browser.quit()
4.3 元素八種定位方式
4.3.1 元素定位-ID
通過id定位元素結果基本上就是我們想要的元素,準確性比較高。
input = browser.find_element(By.ID, 'kw')
4.3.2 元素定位-NAME
通過name屬性來獲取元素,也是比較精準的。
input = browser.find_element(By.ID, 'kw')
4.3.3 元素定位-CLASS_NAME
使用class屬性來查找元素,容易出現多個元素,因而往往需要用切片處理方式
注意:如果class屬性值中包含空格是無法正常獲取的
element = browser.find_element(By.CLASS_NAME, 'bg s_btn')
4.3.4 元素定位-TAG_NAME
通過tag標簽來查找元素,缺點是獲取的元素比較多,需要切片找到需要的元素
element = browser.find_element(By.TAG_NAME, 'input')
4.3.5 元素定位-LINK_TEXT
只標識a標簽中的鏈接文字,根據鏈接文字查找元素
element = browser.find_element(By.LINK_TEXT, '新聞')
4.3.6 元素定位-PARTIAL_LINK_TEXT
與LINK_TEXT區別是,雖然都是通過鏈接文本獲取元素,但是PARTIAL_LINK_TEXT是在LINK_TEXT的基礎上增加了模糊匹配
element = browser.find_element(By.PARTIAL_LINK_TEXT, '地')
4.3.7 元素定位-CSS_SELECTOR
# 通過id等位
element = browser.find_element(By.CSS_SELECTOR, '#kw')
# 通過class定位
element = browser.find_element(By.CSS_SELECTOR, '.s_ipt')
# 不加修飾符(輸入標簽名)
element = browser.find_element(By.CSS_SELECTOR, 'input')
# 通過任意類型定位
# 精確匹配
element = browser.find_element(By.CSS_SELECTOR, '[value="百度一下"]')
# 模糊匹配
element = browser.find_element(By.CSS_SELECTOR, '[value*="百度"]')
# 匹配開頭
element = browser.find_element(By.CSS_SELECTOR, '[value^="百"]')
# 匹配結尾
element = browser.find_element(By.CSS_SELECTOR, '[value$="一下"]')
以上都屬于理論定位法,可以直接通過谷歌瀏覽器復制唯一的selector來確定元素
element = browser.find_element(By.CSS_SELECTOR, '#su')
4.3.8 元素定位-XPATH
打開谷歌瀏覽器,直接復制該元素的XPATH即可,與上述操作基本一致
當一個無法獲取到指定元素的時候,采用第二個完整xpath
寫法
# Xpath
element = browser.find_element(By.XPATH, '//*[@id="su"]')
# 完成Xpath
element = browser.find_element(By.XPATH, '/html/body/div[1]/div[1]/div[5]/div/div/form/span[2]/input')
4.4 元素定位的隱式等待
隱式等待的作用是為了防止,當我們進入到一個頁面時,該元素未第一時間加載出來,到底找不到元素而引發的報錯。
import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import Bydef setup():options = Options()options.add_experimental_option("detach", True)browser = webdriver.Chrome(service=Service('chromedriver.exe'),options=options)# 設置性代碼,只要獲取元素都會先等待10s 10s之后才會出現異常# 并且只需要設置一次即可browser.implicitly_wait(10)return browserbrowser = setup()browser.get(r'本地文件的絕對路徑')
# time.sleep(4)
div = browser.find_element(By.CSS_SELECTOR,'#delayed-element')
print(div)
對應的html文件
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>隱式等待測試頁面</title>
</head>
<body><h1>隱式等待測試</h1><div id="immediate-element">這個元素是立即存在的</div><script>// 5秒后動態添加一個元素setTimeout(function() {let newElement = document.createElement("div");newElement.id = "delayed-element";newElement.textContent = "這個元素是5秒后出現的";document.body.appendChild(newElement);}, 3000);</script>
</body>
</html>
案例一: 獲取表單元素并修改
import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import Bydef setup():options = Options()options.add_experimental_option("detach", True)browser = webdriver.Chrome(service=Service('chromedriver.exe'), options=options)# 設置性代碼,只要獲取元素都會先等待10s 10s之后才會出現異常# 并且只需要設置一次即可browser.implicitly_wait(10)return browserbrowser = setup()browser.get(r'HTML文件絕對路徑')# 單選
browser.find_element(By.XPATH, '/html/body/form/div[1]/label[2]').click()# 多選
browser.find_element(By.XPATH, '/html/body/form/div[2]/label[1]').click()
browser.find_element(By.XPATH, '/html/body/form/div[2]/label[2]').click()
browser.find_element(By.XPATH, '/html/body/form/div[2]/label[3]').click()# 下拉
browser.find_element(By.XPATH, '/html/body/form/div[3]/select/option[2]').click()# 日期框
browser.find_element(By.XPATH, '/html/body/form/div[4]/div/input').send_keys('20210912')# 上傳文件
browser.find_element(By.XPATH, '/html/body/form/div[5]/input').send_keys(r'D:\Python-learning\pythonProject\02-homework\12-test\baidu.png')# 提交
browser.find_element(By.XPATH, '/html/body/form/button').click()
對應的HTML文件
test.html
<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>表單示例</title><style>body {font-family: Arial, sans-serif;max-width: 600px;margin: 0 auto;padding: 20px;}.form-group {margin-bottom: 20px;padding: 15px;border: 1px solid #ddd;border-radius: 5px;}.form-group h3 {margin-top: 0;margin-bottom: 15px;}.rating {display: flex;flex-direction: column;gap: 10px;}.rating-item {display: flex;align-items: center;}.rating-label {width: 100px;}.date-input {display: flex;align-items: center;}.date-input input {width: 120px;margin-right: 10px;}.date-format {color: #666;}</style>
</head>
<body><form action="ok.html" method="post"><!-- 單選框 --><div class="form-group"><h3>單選框</h3><label><input type="radio" name="language" value="Python" checked> Python</label><br><label><input type="radio" name="language" value="Java"> Java</label><br><label><input type="radio" name="language" value="C++"> C++</label></div><!-- 多選框 --><div class="form-group"><h3>多選框</h3><label><input type="checkbox" name="device" value="手機"> 手機</label><br><label><input type="checkbox" name="device" value="電腦"> 電腦</label><br><label><input type="checkbox" name="device" value="網頁"> 網頁</label></div><!-- 下拉菜單 --><div class="form-group"><h3>下拉</h3><select name="city"><option value="北京" selected>北京</option><option value="上海">上海</option><option value="廣州">廣州</option></select></div><!-- 日期選擇 --><div class="form-group"><h3>日期</h3><div class="date-input"><input type="text" id="dateInput" placeholder="輸入年月日如20240521" maxlength="8"><span id="dateDisplay" class="date-format">年 / 月 / 日</span></div><input type="hidden" id="formattedDate" name="date"></div><!-- 附件上傳 --><div class="form-group"><h3>附件</h3><input type="file" name="attachment"></div><!-- 提交按鈕 --><button type="submit">提交</button></form><script>document.getElementById('dateInput').addEventListener('input', function(e) {let value = e.target.value.replace(/\D/g, ''); // 移除非數字字符if (value.length > 8) {value = value.substring(0, 8); // 限制最大長度為8}e.target.value = value; // 更新輸入框值if (value.length === 8) {// 格式化為YYYY/MM/DDconst year = value.substring(0, 4);const month = value.substring(4, 6);const day = value.substring(6, 8);// 驗證月份和日期是否有效const validMonth = parseInt(month) >= 1 && parseInt(month) <= 12;const validDay = parseInt(day) >= 1 && parseInt(day) <= 31;if (validMonth && validDay) {const formattedDate = `${year}/年${month}/月${day}日`;document.getElementById('dateDisplay').textContent = formattedDate;document.getElementById('formattedDate').value = formattedDate;} else {document.getElementById('dateDisplay').textContent = '日期無效';document.getElementById('formattedDate').value = '';}} else {document.getElementById('dateDisplay').textContent = '年 / 月 / 日';document.getElementById('formattedDate').value = '';}});</script>
</body>
</html>
ok.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<h1>提交成功!!!</h1>
<a href="./test.html" target="_blank">跳轉到填寫頁面</a>
</body>
</html>
案例二:重復填寫表單
提示:需要使用到句柄
import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import Bydef setup():options = Options()options.add_experimental_option("detach", True)browser = webdriver.Chrome(service=Service('chromedriver.exe'), options=options)# 設置性代碼,只要獲取元素都會先等待10s 10s之后才會出現異常# 并且只需要設置一次即可browser.implicitly_wait(10)return browserbrowser = setup()browser.get(r'HTML文件絕對路徑')# 循環重復
for x in range(2):time.sleep(2)# 單選browser.find_element(By.XPATH, '/html/body/form/div[1]/label[2]').click()# 多選browser.find_element(By.XPATH, '/html/body/form/div[2]/label[1]').click()browser.find_element(By.XPATH, '/html/body/form/div[2]/label[2]').click()browser.find_element(By.XPATH, '/html/body/form/div[2]/label[3]').click()# 下拉browser.find_element(By.XPATH, '/html/body/form/div[3]/select/option[2]').click()# 日期框browser.find_element(By.XPATH, '/html/body/form/div[4]/div/input').send_keys('20210912')# 上傳文件browser.find_element(By.XPATH, '/html/body/form/div[5]/input').send_keys(r'上傳文件絕對路徑')time.sleep(2)# 提交browser.find_element(By.XPATH, '/html/body/form/button').click()# 點擊返回browser.find_element(By.XPATH, '/html/body/a').click()# 打開了新頁面之后,我們要獲取到全部的句柄(也就是所有的標簽頁)handles = browser.window_handles# print(handles)# 關閉之前的標簽頁browser.close()# 通過句柄切換到新的標簽頁browser.switch_to.window(handles[1])# 獲取當前頁句柄# print(browser.current_window_handle)
五、三種瀏覽器獲取框(警告框、確認框、提示框)
???測試網址
5.1 警告框
示例代碼:
def setup():options = Options()options.add_experimental_option("detach", True)browser = webdriver.Chrome(service=Service('chromedriver.exe'), options=options)# 設置性代碼,只要獲取元素都會先等待10s 10s之后才會出現異常# 并且只需要設置一次即可browser.implicitly_wait(10)return browserbrowser = setup()browser.get('https://sahitest.com/demo/alertTest.htm')# 清空輸入框的默認值
browser.find_element(By.XPATH,"/html/body/form/input[1]").clear()
time.sleep(2)# 修改輸入框的值
browser.find_element(By.XPATH,"/html/body/form/input[1]").send_keys('大家一起學Python')# 點擊按鈕
browser.find_element(By.XPATH,"/html/body/form/input[2]").click()# 獲取彈窗的內容
print(browser.switch_to.alert.text)time.sleep(2)
# 點擊確認按鈕
browser.switch_to.alert.accept()
5.2 確認框
???測試網址
5.3 提示框
示例代碼
def setup():options = Options()options.add_experimental_option("detach", True)browser = webdriver.Chrome(service=Service('chromedriver.exe'), options=options)# 設置性代碼,只要獲取元素都會先等待10s 10s之后才會出現異常# 并且只需要設置一次即可browser.implicitly_wait(10)return browserbrowser = setup()browser.get('https://sahitest.com/demo/confirmTest.htm')# 點擊按鈕browser.find_element(By.XPATH,'/html/body/form/input[1]').click()time.sleep(2)
# 點擊確認按鈕
# browser.switch_to.alert.accept()# 點擊取消按鈕
browser.switch_to.alert.dismiss()
???測試網址
示例代碼:
def setup():options = Options()options.add_experimental_option("detach", True)browser = webdriver.Chrome(service=Service('chromedriver.exe'), options=options)# 設置性代碼,只要獲取元素都會先等待10s 10s之后才會出現異常# 并且只需要設置一次即可browser.implicitly_wait(10)return browserbrowser = setup()browser.get('https://sahitest.com/demo/promptTest.htm')# 點擊按鈕
browser.find_element(By.XPATH,'/html/body/form/input[1]').click()time.sleep(2)# 輸入內容
browser.switch_to.alert.send_keys("123456")
time.sleep(2)# 點擊確認按鈕
browser.switch_to.alert.accept()
六、 iframe嵌套網頁內部元素獲取
???測試網址
示例代碼:
def setup():options = Options()options.add_experimental_option("detach", True)browser = webdriver.Chrome(service=Service('chromedriver.exe'), options=options)# 設置性代碼,只要獲取元素都會先等待10s 10s之后才會出現異常# 并且只需要設置一次即可browser.implicitly_wait(10)return browserbrowser = setup()browser.get('https://sahitest.com/demo/iframesTest.htm')# iframe嵌套網頁 里面的元素 不能夠直接獲取 因為不在同一個框架里面# 1. 獲取iframe元素
iframe = browser.find_element(By.XPATH, '/html/body/iframe')# 2. 進入到iframe里面
browser.switch_to.frame(iframe)# 獲取元素并點擊
browser.find_element(By.XPATH, '/html/body/table/tbody/tr/td[1]/a[1]').click()
time.sleep(2)
# 此時如果想要獲取原頁面中的元素就必須退出iframe
browser.switch_to.default_content()time.sleep(2)
# 獲取原頁面元素
browser.find_element(By.XPATH, '/html/body/input[2]').click()
七、獲取元素以及判斷可見性
selenium提供了一些基礎的爬蟲方式。
示例代碼:
def setup():options = Options()options.add_experimental_option("detach", True)browser = webdriver.Chrome(service=Service('chromedriver.exe'), options=options)# 設置性代碼,只要獲取元素都會先等待10s 10s之后才會出現異常# 并且只需要設置一次即可browser.implicitly_wait(10)return browserbrowser = setup()browser.get('https://content-static.cctvnews.cctv.com/snow-book/video.html?item_id=932400080038356852')# 獲取元素內容 text
content = browser.find_element(By.XPATH,"/html/body/div/div/div/div[2]/div[1]/div[1]/div/div[5]/div/article/p[1]").text
print(content)# 獲取元素可見性
# 簡單來說 就是判斷這個元素我們能否在頁面上看見
flag = browser.find_element(By.XPATH,"/html/head/meta[2]").is_displayed()
print(flag)
八、 網頁前進、后退
示例代碼:
def setup():options = Options()options.add_experimental_option("detach", True)browser = webdriver.Chrome(service=Service('chromedriver.exe'), options=options)# 設置性代碼,只要獲取元素都會先等待10s 10s之后才會出現異常# 并且只需要設置一次即可browser.implicitly_wait(10)return browserbrowser = setup()browser.get('https://www.baidu.com')input = browser.find_element(By.ID, 'kw')
input.send_keys('selenium')button = browser.find_element(By.ID, 'su')
button.click()time.sleep(3)
# 網頁后退
browser.back()
time.sleep(2)
# 網頁前進
browser.forward()
time.sleep(2)
# 關閉
browser.quit()
總結
通過本文的學習,我們系統地了解了 Python 與 Selenium 的結合使用,涵蓋了從基礎配置到實際應用的多個方面。Selenium 不僅簡化了 Web 自動化測試的流程,還為數據采集和動態網頁交互提供了強大的支持。借助 Python 的靈活性和 Selenium 的豐富功能,開發者能夠高效地完成復雜的任務,無論是自動化測試、爬蟲開發,還是網頁監控。
當然,Selenium 的強大功能也伴隨著一定的學習曲線,尤其是在處理動態內容、反爬機制或復雜的頁面結構時,可能需要更多的技巧和經驗積累。但只要你掌握了核心的定位與交互方法,并學會利用等待機制、多窗口切換等高級功能,就能應對絕大多數場景的需求。
希望本文能為你打開 Selenium 世界的大門,讓你在自動化測試或數據抓取的道路上更加得心應手。技術的進步永無止境,不斷實踐和探索,你將發現更多 Selenium 與 Python 結合的奇妙用法。繼續加油,愿你在自動化的世界中創造更多可能!