ChromeDriverManager的具體用法

ChromeDriverManagerwebdriver_manager 庫的一部分,它用于自動管理 ChromeDriver 的下載和更新。使用 ChromeDriverManager 可以避免手動下載 ChromeDriver 并匹配系統中安裝的 Chrome 瀏覽器版本。以下是 ChromeDriverManager 的基本用法:

步驟

1.安裝?webdriver_manager 庫:
pip install webdriver-manager
2.導入相關依賴
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from webdriver_manager.chrome import ChromeDriverManager
3.設置options參數(optional)

這邊因為博主要做CI/CD?需要進行無頭模式的設置所以是必需的

# 設置 Chrome 選項(如果需要)
chrome_options = Options()
chrome_options.add_argument("--headless")  # 無頭模式
chrome_options.add_argument("--disable-gpu")
chrome_options.add_argument("--no-sandbox")
4.用chromedrivermanager安裝驅動?
# 使用 ChromeDriverManager 處理驅動安裝
driver_path = ChromeDriverManager().install()
service = Service(driver_path)

代碼解釋:

  1. ChromeDriverManager().install():

    • 目標: 自動管理 ChromeDriver 的安裝。

    • 功能: ChromeDriverManager()webdriver_manager 包中的一個類,它負責管理 Chrome 瀏覽器驅動的下載和更新。

    • 方法 install(): 此方法檢查系統上是否已經安裝了 ChromeDriver,以及它的版本是否與系統上的 Google Chrome 瀏覽器兼容。如果沒有安裝或者版本不正確,它會自動下載與當前 Chrome 瀏覽器版本兼容的 ChromeDriver。

    • 結果: install() 返回下載的 ChromeDriver 的文件路徑。這是一個可執行文件的路徑,通常是 chromedriver 二進制文件在你的本地機器上的位置。

  2. Service(driver_path):

    • 目標: 啟動 Selenium 的 Chrome WebDriver 服務。

    • 功能: Service 是 Selenium 中的一個類,用于代表驅動程序的后臺服務。它主要負責啟動、終止和管理生命周期中的驅動進程。

    • 參數 driver_path: 這是 ChromeDriver 在本地系統上的路徑,由 ChromeDriverManager().install() 返回。將此路徑傳遞給 Service 構造函數來告訴 Selenium 如何找到和使用 ChromeDriver。

    • 使用: 當你創建一個 webdriver.Chrome 實例時,你可以將創建好的 Service 對象作為參數傳遞,使得 WebDriver 能夠啟動并與驅動程序正常通信。

整個過程:

  • 通過 ChromeDriverManager().install(),避免手動下載并管理 ChromeDriver 的版本問題。

  • 創建一個 Service 對象來確保在啟動 WebDriver 時能夠正確地引用和使用 ChromeDriver。

  • 最終用于初始化 WebDriver(例如 webdriver.Chrome(service=service))來啟動一個新的瀏覽器實例。

這種方法簡化了驅動安裝的管理,確保了驅動程序與瀏覽器版本的兼容性,同時提高了代碼的可維護性和穩定性。無論是在本地開發還是在CI/CD環境中,這種自動化驅動管理的方式都非常有用。

?

5.初始化并執行測試
# 正確的 WebDriver 初始化方式
driver = webdriver.Chrome(service=service)# 使用 WebDriver 做一些事情
driver.get("https://example.com")
print(driver.title)# 關閉瀏覽器
driver.quit()

基本用法示例

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager# 使用 ChromeDriverManager 處理驅動安裝
driver_path = ChromeDriverManager().install()
service = Service(driver_path)# 正確的 WebDriver 初始化方式
driver = webdriver.Chrome(service=service)# 使用 WebDriver 做一些事情
driver.get("https://stage.me.sap.com/createIssue/0")
print(driver.title)# 關閉瀏覽器
driver.quit()

注意:

在較新的 Selenium 版本中,webdriver.Chrome 的構造函數不再接受 executable_path 作為參數,而是使用 Service 對象來指定 ChromeDriver 的路徑。?如果還用老的方法會出現下面的報錯

# 創建 webdriver.Chrome 實例
driver = webdriver.Chrome(executable_path=driver_path)# 使用 WebDriver
driver.get("https://www.example.com")

TypeError: WebDriver.__init__() got an unexpected keyword argument 'executable_path'

拓展(可自行了解

  • 自動下載和更新:

    • ChromeDriverManager().install() 方法會自動下載與系統安裝的 Chrome 版本兼容的 ChromeDriver(如果未安裝或版本過舊則更新)。
  • 版本控制:

    • 可以指定 ChromeDriver 的版本,比如使用 ChromeDriverManager(version='2.46').install() 來安裝特定版本的驅動。
  • 自定義路徑:

    • 如果需要把下載的驅動放在特定路徑,可以在運行時設置相關的環境變量來管理下載目錄:
    import os
    from webdriver_manager.chrome import ChromeDriverManageros.environ['WDM_LOCAL'] = '1'  # 啟用本地目錄使用
    os.environ['WDM_DIR'] = '/path/to/store/drivers'driver_path = ChromeDriverManager().install()
  • 日志和緩存控制:

    • webdriver_manager 默認會緩存下載的驅動,并在新版本發布時更新。對于調試和開發,可以通過環境變量控制日志輸出和緩存政策。

?

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

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

相關文章

RPC、gRPC和HTTP的區別

RPC 只是一種屏蔽遠程過程調用的設計,它與HTTP不是對立的,兩者不是一個層面的概念。 RPC底層通信可以使用TCP實現(如Thrift),也可以使用HTTP實現(如gRPC),其本身并無限制。 1. 概念…

安裝Pod網絡插件時pod狀態變為ImagePullBackOff

本文摘自于我的免費專欄《Kubernetes從0到1(持續更新)》請多關注 文章目錄 先看案發現場解決過程如下原因剖析解決方法 先看案發現場 原因是在下載Pod網絡插件的時候pod始終為ImagePullBackOff wget https://raw.githubusercontent.com/coreos/flannel…

藍橋杯第十六屆c組c++題目及個人理解

本篇文章只是部分題目的理解&#xff0c;代碼和思路僅供參考&#xff0c;切勿當成正確答案&#xff0c;歡迎各位小伙伴在評論區與博主交流&#xff01; 題目&#xff1a;2025 題目解析 核心提取 要求的數中至少有1個0、2個2、1個5 代碼展示 #include<iostream> #incl…

使用mermaidchart 顯示graph LR

使用mermaidchart 顯示graph LRMermaid Chart - Create complex, visual diagrams with text. A smarter way of creating diagrams.

基于計算機視覺的試卷答題區表格識別與提取技術

基于計算機視覺的試卷答題區表格識別與提取技術 摘要 本文介紹了一種基于計算機視覺技術的試卷答題區表格識別與提取算法。該算法能夠自動從試卷圖像中定位答題區表格&#xff0c;執行圖像方向矯正&#xff0c;精確識別表格網格線&#xff0c;并提取每個答案單元格。本技術可…

SpringAI實現AI應用-自定義顧問(Advisor)

SpringAI實戰鏈接 1.SpringAl實現AI應用-快速搭建-CSDN博客 2.SpringAI實現AI應用-搭建知識庫-CSDN博客 3.SpringAI實現AI應用-內置顧問-CSDN博客 4.SpringAI實現AI應用-使用redis持久化聊天記憶-CSDN博客 5.SpringAI實現AI應用-自定義顧問&#xff08;Advisor&#xff09…

【HarmonyOS 5】App Linking 應用間跳轉詳解

目錄 什么是 App Linking 使用場景 工作原理 如何開發 1.開通 App Linking 2.確定域名 3.服務端部署 applinking.json 文件 4.AGC綁定域名 5.項目配置 6.組裝聚合鏈接 7.解析聚合鏈接中的參數 其他 如何獲取應用ID 什么是 App Linking App Linking 是一款創建跨…

什么是變量提升?(形象的比喻)

當然&#xff01;可以用幾個生活中的比喻來形象地解釋變量提升&#xff1a; ??1. 書架的占位符?? 想象你有一個書架&#xff0c;但還沒放書。 ? 變量提升&#xff08;var&#xff09;&#xff1a; 你先在書架上貼了一個標簽&#xff08;比如寫“我的書”&#xff09;&…

C++面向對象編程入門:從類與對象說起(一)

C語言是面向過程&#xff0c;關注的是過程&#xff0c;分析出求解問題的步驟&#xff0c;通過函數調用逐步解決問題&#xff0c;而C面向的是對象&#xff0c;關注的是對象&#xff0c;將一件事拆解成多個對象&#xff0c;靠對象之間互交完成。 目錄 類的定義 類的兩種定義 …

uniapp tabBar 中設置“custom“: true 在H5和app中無效解決辦法

uniapp小程序自定義底部tabbar&#xff0c;但是在轉成H5和app時發現"custom": true 無效&#xff0c;原生tabbar會顯示出來 解決辦法如下 在tabbar的list中設置 “visible”:false 代碼如下&#xff1a;"tabBar": {"custom": true,//"cust…

SpringBoot學生操行評分系統源碼設計開發

概述 基于SpringBoot框架開發的學生操行評分系統完整項目&#xff0c;該系統采用主流技術棧開發&#xff0c;包含完善的評分管理功能模塊&#xff0c;是學校管理、教育培訓機構理想的數字化解決方案&#xff0c;非常適合作為設計參考或二次開發基礎項目。 主要內容 5.1 管理…

從代碼學習深度學習 - 單發多框檢測(SSD)PyTorch版

文章目錄 前言工具函數數據處理工具 (`utils_for_data.py`)訓練工具 (`utils_for_train.py`)檢測相關工具 (`utils_for_detection.py`)可視化工具 (`utils_for_huitu.py`)模型類別預測層邊界框預測層連接多尺度預測高和寬減半塊基礎網絡塊完整的模型訓練模型讀取數據集和初始化…

基于STM32的溫濕度光照強度仿真設計(Proteus仿真+程序設計+設計報告+講解視頻)

這里寫目錄標題 **1.****主要功能****2.仿真設計****3.程序設計****4.設計報告****5.下載鏈接** 基于STM32的溫濕度光照強度仿真設計(Proteus仿真程序設計設計報告講解視頻&#xff09; 仿真圖Proteus 8.9 程序編譯器&#xff1a;keil 5 編程語言&#xff1a;C語言 設計編號…

SSH 服務部署指南

本指南涵蓋 OpenSSH 服務端的安裝、配置密碼/公鑰/多因素認證&#xff0c;以及連接測試方法。 適用系統&#xff1a;Ubuntu/Debian、CentOS/RHEL 等主流 Linux 發行版。 1. 安裝 SSH 服務端 Ubuntu/Debian # 更新軟件包索引 sudo apt update# 安裝 OpenSSH 服務端 sudo apt i…

《Python星球日記》 第46天:決策樹與隨機森林

名人說:路漫漫其修遠兮,吾將上下而求索。—— 屈原《離騷》 創作者:Code_流蘇(CSDN)(一個喜歡古詩詞和編程的Coder??) 專欄:《Python星球日記》,限時特價訂閱中ing 目錄 一、前言二、決策樹算法原理1. 決策樹簡介2. 決策樹的分裂準則(1) 信息熵與信息增益(2) 基尼不純…

Vue2:引入公共JS,通過this調用

tools.js // 圖片加上前綴 baseurl 是請求域名 img 是圖片路徑export function getimgurl(img) {return ${this.$baseurl}${img}}main.js import baseUrl from "/api/baseUrl.js" Vue.prototype.$baseurl baseUrlimport {getimgurl} from /api/tool.js; Vue.protot…

【Hot 100】 146. LRU 緩存

目錄 引言LRU 緩存官方解題LRU實現&#x1f4cc; 實現步驟分解步驟 1&#xff1a;定義雙向鏈表節點步驟 2&#xff1a;創建偽頭尾節點&#xff08;關鍵設計&#xff09;步驟 3&#xff1a;實現鏈表基礎操作操作 1&#xff1a;添加節點到頭部操作 2&#xff1a;移除任意節點 步驟…

【Linux】swap交換分區管理

目錄 一、Swap 交換分區的功能 二、swap 交換分區的典型大小的設置 2.1 查看交換分區的大小 2.1.1 free 2.1.2 cat /proc/swaps 或 swapon -s 2.1.3 top 三、使用交換分區的整體流程 3.1 案例一 3.2 案例二 一、Swap 交換分區的功能 計算機運行一個程序首先會將外存&am…

【計算機網絡】用戶從輸入網址到網頁顯示,期間發生了什么?

1.URL解析 瀏覽器分解URL&#xff1a;https://www.example.com/page 協議&#xff1a;https域名&#xff1a;www.example.com路徑&#xff1a;/page 2.DNS查詢&#xff1a; 瀏覽器向DNS服務器發送查詢請求&#xff0c;將域名解析為對應的IP地址。 3.CDN檢查(如果有)&#…

架空輸電線巡檢機器人軌跡優化設計

架空輸電線巡檢機器人軌跡優化 摘要 本論文針對架空輸電線巡檢機器人的軌跡優化問題展開研究,綜合考慮輸電線復雜環境、機器人運動特性及巡檢任務需求,結合路徑規劃算法、智能優化算法與機器人動力學約束,構建了多目標軌跡優化模型。通過改進遺傳算法與模擬退火算法,有效…