Selenium 使用指南:從入門到精通

Selenium 使用指南:從入門到精通

Selenium 是一個用于自動化 Web 瀏覽器操作的強大工具,廣泛應用于自動化測試和 Web 數據爬取中。本文將帶你從入門到精通地掌握 Selenium,涵蓋其基本操作、常用用法以及一個完整的圖片爬取示例。

1. 環境配置

1.1 安裝 Selenium

在 Python 環境中,可以通過 pip 安裝 Selenium:

pip install selenium

1.2 下載 WebDriver

Selenium 需要與特定瀏覽器的 WebDriver 一起使用。例如,若使用 Chrome 瀏覽器,需要下載 ChromeDriver 并確保路徑已配置好。

1.3 設置 WebDriver 路徑

將下載的 WebDriver 解壓后,路徑可以設置到系統環境變量中,或在代碼中指定其位置。

2. Selenium 基本用法

2.1 啟動瀏覽器并打開頁面

from selenium import webdriver# 創建 Chrome 瀏覽器實例并指定 WebDriver 路徑
driver = webdriver.Chrome(executable_path=r'C:\Program Files\Google\Chrome\Application\chromedriver.exe')# 打開網頁
driver.get('https://www.example.com')# 關閉瀏覽器
driver.quit()

2.2 查找元素

可以通過多種方式查找頁面中的元素:

# 通過 ID
element_by_id = driver.find_element_by_id('element-id')# 通過 name
element_by_name = driver.find_element_by_name('element-name')# 通過 class
element_by_class = driver.find_element_by_class_name('element-class')# 通過 tag
element_by_tag = driver.find_element_by_tag_name('tag-name')# 通過 CSS selector
element_by_css = driver.find_element_by_css_selector('css.selector')# 通過 XPath
element_by_xpath = driver.find_element_by_xpath('//tag[@attribute="value"]')

2.3 交互操作

2.3.1 點擊事件
# 查找并點擊按鈕
button = driver.find_element_by_id('button-id')
button.click()
2.3.2 輸入文本
# 查找輸入框并輸入文本
input_box = driver.find_element_by_name('input-name')
input_box.send_keys('Hello, World!')

2.4 獲取元素屬性和文本

# 獲取屬性值
attribute_value = element_by_id.get_attribute('attribute-name')# 獲取文本內容
text_content = element_by_id.text

2.5 等待元素加載

在某些情況下,需要等待元素加載完成:

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ECelement = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, 'element-id'))
)

2.6 處理彈窗和多窗口

2.6.1 處理 JavaScript 彈窗
# 切換并接受彈窗
alert = driver.switch_to.alert
alert.accept()
2.6.2 切換窗口
# 獲取所有窗口句柄
handles = driver.window_handles# 切換到新窗口
driver.switch_to.window(handles[1])

2.7 執行 JavaScript

# 滾動頁面到元素
driver.execute_script("arguments[0].scrollIntoView();", element_by_id)

2.8 截圖

# 保存當前頁面截圖
driver.save_screenshot('screenshot.png')

2.9 管理 Cookies

# 獲取所有 Cookies
cookies = driver.get_cookies()# 添加新 Cookie
driver.add_cookie({'name': 'key', 'value': 'value'})# 刪除一個 Cookie
driver.delete_cookie('key')# 刪除所有 Cookies
driver.delete_all_cookies()

3. 高級用法:爬取網頁圖片

3.1 爬取示例代碼

以下是一個使用 Selenium 爬取網頁圖片的完整示例:

from selenium import webdriver
import os
import urllib.request# 設置 ChromeDriver 路徑并打開瀏覽器
driver = webdriver.Chrome(executable_path='path/to/chromedriver')# 打開目標網頁
driver.get('https://www.example.com')# 查找所有圖片元素
images = driver.find_elements_by_tag_name('img')# 創建保存圖片的文件夾
os.makedirs('downloaded_images', exist_ok=True)# 下載所有圖片
for i, img in enumerate(images):src = img.get_attribute('src')if src:print(f"Downloading image {i+1}: {src}")# 下載并保存圖片urllib.request.urlretrieve(src, f'downloaded_images/image_{i+1}.jpg')# 關閉瀏覽器
driver.quit()import urllib.request
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get("https://netflav.com/trending")
element_by_id = driver.find_element(By.ID, 'kw')
element_by_id.send_keys("hello")
driver.find_element(By.ID, 'su').click()
plants = driver.find_elements(By.TAG_NAME, "img")
for idx, img_element in enumerate(plants):img_url = img_element.get_attribute('src')urllib.request.urlretrieve(src, f'image_{idx+1}.jpg')
driver.quit()

3.2 代碼解釋

  • 導入庫并設置 WebDriver:導入 Selenium 和 Python 標準庫用于文件操作和 HTTP 請求。
  • 打開網頁并獲取圖片元素:使用 find_elements_by_tag_name('img') 獲取所有圖片元素。
  • 下載圖片:遍歷圖片元素,獲取 src 屬性并下載圖片到本地。

4. 總結

通過本文的介紹,相信你已經對 Selenium 的基本操作和高級應用有了全面的了解。Selenium 是一個強大且靈活的工具,在自動化測試和數據爬取中都能提供極大便利。通過學習和實踐這些功能,可以極大地提升自動化流程的效率。希望這篇文章能幫助你更好地掌握 Selenium。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/67857.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/67857.shtml
英文地址,請注明出處:http://en.pswp.cn/web/67857.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Sqoop導入MySQL中含有回車換行符的數據

個人博客地址:Sqoop導入MySQL中含有回車換行符的數據 MySQL中的數據如下圖: 檢查HDFS上的目標文件內容可以看出,回車換行符位置的數據被截斷了,導致數據列錯位。 Sqoop提供了配置參數,在導入時丟棄掉數據的分隔符&…

利用matlab尋找矩陣中最大值及其位置

目錄 一、問題描述1.1 max函數用法1.2 MATLAB中 : : :的作用1.3 ind2sub函數用法 二、實現方法2.1 方法一:max和find2.2 方法二:max和ind2sub2.3 方法對比 三、參考文獻 一、問題描述 matlab中求最大值可使用函數max,對于一維向量&#xff0…

PyTorch數據建模

回歸分析 import torch import numpy as np import pandas as pd from torch.utils.data import DataLoader,TensorDataset import time strat = time.perf_counter()

機試題——字符匹配

題目描述 給你一個字符串數組(每個字符串均由小寫字母組成)和一個字符規律(由小寫字母和 . 和 * 組成),識別數組中哪些字符串可以匹配到字符規律上。 . 匹配任意單個字符。* 匹配零個或多個前面的那一個元素。 所謂…

《 C++ 點滴漫談: 二十五 》空指針,隱秘而危險的殺手:程序崩潰的真兇就在你眼前!

摘要 本博客全面解析了 C 中指針與空值的相關知識,從基礎概念到現代 C 的改進展開,涵蓋了空指針的定義、表示方式、使用場景以及常見注意事項。同時,深入探討了 nullptr 的引入及智能指針在提升代碼安全性和簡化內存管理方面的優勢。通過實際…

git push到遠程倉庫時無法推送大文件

一、錯誤 remote: Error: Deny by project hooks setting ‘default’: size of the file ‘scientific_calculator’, is 164 MiB, which has exceeded the limited size (100 MiB) in commit ‘4c91b7e3a04b8034892414d649860bf12416b614’. 二、原因 本地提交過大文件&am…

掌握API和控制點(從Java到JNI接口)_36 JNI開發與NDK 04

4、 *.so的入口函數&#xff1a;JNI_OnLoad() VM (virtual machine)的角色 Java代碼在VM上執行。在執行Java代碼的過程中&#xff0c;如果Java需要與本地代碼(*.so)溝通時&#xff0c; VM就會把*.so視為插件<Tn>而加載到VM里。然后讓Java函數呼叫到這插件<Tn>里的…

Windows圖形界面(GUI)-QT-C/C++ - QT Tab Widget

公開視頻 -> 鏈接點擊跳轉公開課程博客首頁 -> ???鏈接點擊跳轉博客主頁 目錄 一、概述 1.1 什么是 QTabWidget&#xff1f; 1.2 使用場景 二、常見樣式 2.1 選項卡式界面 2.2 動態添加和刪除選項卡 2.3 自定義選項卡標題和圖標 三、屬性設置 3.1 添加頁面&…

[MRCTF2020]Ez_bypass1(md5繞過)

[MRCTF2020]Ez_bypass1(md5繞過) ?? 這道題就是要繞過md5強類型比較&#xff0c;但是本身又不相等&#xff1a; md5無法處理數組&#xff0c;如果傳入的是數組進行md5加密&#xff0c;會直接放回NULL&#xff0c;兩個NuLL相比較會等于true&#xff1b; 所以?id[]1&gg…

90,【6】攻防世界 WEB Web_php_unserialize

進入靶場 進入靶場 <?php // 定義一個名為 Demo 的類 class Demo { // 定義一個私有屬性 $file&#xff0c;默認值為 index.phpprivate $file index.php;// 構造函數&#xff0c;當創建類的實例時會自動調用// 接收一個參數 $file&#xff0c;用于初始化對象的 $file 屬…

Jenkins安裝部署(以及常見報錯解決方案),jdk版本控制器sdkman

目錄 零、環境介紹 一、Jenkins安裝 1、插件安裝以及更換插件源 2、修改jenkins時區 二、sdkman安裝&#xff08;可選&#xff09; 1、sdkman常用方法 2、sdkman常用方法演示 2.1、查看可用的jdk 2.2、下載jdk并切換版本 三、jenkins報錯解決 1、下載sdkman后systemc…

大數據挖掘--兩個角度理解相似度計算理論

文章目錄 0 相似度計算可以轉換成什么問題1 集合相似度的應用1.1 集合相似度1.1文檔相似度1.2 協同過濾用戶-用戶協同過濾物品-物品協同過濾 1.2 文檔的shingling--將文檔表示成集合1.2.1 k-shingling1.2.2 基于停用詞的 shingling 1.3 最小哈希簽名1.4 局部敏感哈希算法&#…

關于貪心學習的文筆記錄

貪心&#xff0c;顧名思義就是越貪越好&#xff0c;越多越有易&#xff0c;他給我的感覺是&#xff0c;通常是求最大或最小問題&#xff0c;相比于動態規劃貪心讓人更加琢磨不透&#xff0c;不易看出方法&#xff0c;為此在這記錄我所見過的題型和思維方法&#xff0c;以便回頭…

c語言練習題【數據類型、遞歸、雙向鏈表快速排序】

練習1&#xff1a;數據類型 請寫出以下幾個數據的數據類型 整數 a a 的地址 存放a的數組 b 存放a的地址的數組 b的地址 c的地址 指向 printf 函數的指針 d 存放 d的數組 整數 a 的類型 數據類型是 int a 的地址 數據類型是 int*&#xff08;指向 int 類型的指針&#xff09; …

聯想拯救者Y9000P IRX8 2023 (82WK) 原廠Win11 家庭中文版系統 帶一鍵還原功能 安裝教程

安裝完重建winre一鍵還原功能&#xff0c;和電腦出廠時的系統狀態一模一樣。自動機型專用軟件&#xff0c;全部驅動&#xff0c;主題壁紙&#xff0c;自動激活&#xff0c;oem信息等。將電腦系統完全恢復到出廠時狀態。 支持機型 (MTM) : 82WK 系統版本&#xff1a;Windows 1…

搜索與圖論復習2最短路

單源最短路---所有邊權是正數(Dijkstra算法O(n^2)--稠密圖(鄰接矩陣)和堆優化的Dijkstra算法O(mlogn)--稀疏圖(鄰接表)) 或存在負邊權(Bellman-ford貝爾曼福特算法O(nm)和SPFA一般O(m) 最壞O(nm) ) 多源最短路---Floyd算法O(n^3) 一、迪杰斯特拉算法(Dijkstra)&#xff1a;1…

Unity GetLocalizedString()失效問題

問題&#xff1a; 在一個自定義類中調用GetLocalizedString()的方法&#xff0c;是無效的&#xff08;創建這個自定義類的腳本沒掛載到場景中&#xff09;。 解決方法: 將自定義類的GetLocalizedString()方法換個地方&#xff0c;換到在場景中掛載的一個腳本實例&#xff08;…

【建站】專欄目錄

建站專欄的想法有很多&#xff0c;想寫窮鬼如何快速低成本部署前后端項目讓用戶能訪問到&#xff0c;如何將網站收錄到百度&#xff0c;bing&#xff0c;google并優化seo讓搜索引擎搜索到網站&#xff0c;想寫如何把網站加入google廣告或者接入stripe信用卡首款平臺收款&#x…

深入解析“legit”的地道用法——從俚語到正式表達:Sam Altman用來形容DeepSeek: legit invigorating(真的令人振奮)

深入解析“legit”的地道用法——從俚語到正式表達 一、引言 在社交媒體、科技圈甚至日常對話中&#xff0c;我們經常會看到或聽到“legit”這個詞。比如最近 Sam Altman 在 X&#xff08;原 Twitter&#xff09;上發的一條帖子中寫道&#xff1a; we will obviously deliver …

Vue 圖片引用方式詳解:靜態資源與動態路徑訪問

目錄 前言1. 引用 public/ 目錄2. assets/ 目錄3. 遠程服務器4. Vue Router 動態訪問5. 總結6. 擴展&#xff08;圖片不顯示&#xff09; 前言 &#x1f91f; 找工作&#xff0c;來萬碼優才&#xff1a;&#x1f449; #小程序://萬碼優才/r6rqmzDaXpYkJZF 在 Vue 開發中&#x…