selenium后續!!

小項目案例:實現批量下載網頁中的資源

根據15.3.2小節中的返回網頁內容可知,用戶只有獲取了網頁中的圖片url才可以將圖片下載到*在使用selenium庫渲染網頁后,可直接通過正則表達式過濾出指定的網頁圖片,從而實現批量下載接下來以此為思路來實現一個小項目案例。

項目任務
實現批量下載人民郵電出版社官網中與Python相關的圖書封面圖片。

項目實步驟

步驟1,獲取人民郵電出版社官網中與Python相關的圖書封面圖片url。使用get()方法即可獲取“python”的圖書封面圖片url。

步驟2,使用selenium庫驅動瀏覽器渲染網頁,并獲取染后的網頁代碼

步驟3,使用正則表達式過濾出圖片的ur1。

步驟4,使用15.3.2小節的返回網頁內容中的方法將對應ur1的圖片下載到本地

項目實現代碼

from selenium import webdriverfrom selenium,webdriver chrome,options import optionsimport requestsimport rechrome_options = Options ()chrome_options,binary_location = r"c:\program Files\Google\chrome\Application\chrome.exe"driver = webdriver.Chrome(options=chrome_options)driver.get('https://www.ptpress.com.cn/search?keyword=python')a = re.findall('<img src="(.+?jpg)"></div>',driver.page source)i=1for url in a:r = requests.get(url)f2 = open('.\\Python圖書\\'+str(i)+'.jpg','wb')i +=?1f2.write(r.content)f2.close()

第4~6行代碼綁定了Chrome瀏覽器,并驅動瀏覽器
第7行代碼使用get()方法打開Python類圖書的網頁,如圖15-36所示。
第8行代碼使用正則表達式過濾driver,page_source(渲染后的網頁代碼)中的圖片url。如圖15-36所示可以觀察到所有圖書封面圖片的標簽為<img>,圖片格式為.jpg,且下一個標簽為</div>。因此使用正則表達式設計的過濾規則為'<img src="(.+?jpg)"></div>’。過濾規則不是統一的,讀者可以自行設計過濾規則。第9~15行代碼使用requests庫中的get()方法將過濾出來的ur1分別保存到相對路徑“\Python圖書”下。執行代碼后將會自動下載網頁中的圖書封面圖片到本地文件夾“\Python圖書”中,如圖15-37所示。

此項目案例介紹了一個通用的下載網頁資源的方法,讀者掌握此方法后即可實現批量下載大部分網站中的圖片、音樂、視頻等資源文件。

獲取和操作網頁元素

獲取網頁中的指定元素

1獲取標簽中的圖片url使用了正則表達式的方式進行過濾,而WebDriver對象中也提供了大量用于獲取網頁指定元素的方法.

在獲取了網頁中的某個元素后,可以使用以下方法對此元素進行相應操作。

tag-name()方法:獲取元素的名稱。
text()方法:獲取元素的文本內容。
click()方法:單擊此元素。
submit()方法:提交表單。
send_keys()方法:模擬輸入信息。
size()方法:獲取元素的尺寸。

在元素中輸入信息

send_keys()方法可以實現在元素中輸入信息,例如在窗口標簽中輸入信息。其使用形式如下:

send keys(*value)

參數value:表示需要輸入的字符串信息。
示例代碼(在人民郵電出版社官網的搜索框中輸入“Python”):

from selenium import webdriverfrom selenium.webdriver.chrome.options import Optionsfrom selenium.webdriver.common.keys import Keyschrome options = Options()chrome options.binary location = r"c:\Program Files\Google\chrome\Application\chrome.exe"driver = webdriver.Chrome(options=chrome options)driver.get('https://www.ptpress.com.cn/')driver fnd element by tag name ("input").send keys ("Python" )

第8行代碼使用find_element_by_tag_name()方法找到標簽名為input的元素(通過網頁源代碼可知搜索框的標簽名為input)。獲取到標簽后使用send_keys()方法實現在搜索框內輸入字符串"Python"。

獲取元素的方法比較多,讀者可按照不同的方法靈活實現。實現在搜索框中輸入信息的代碼程序后,還可以模擬用戶的按鍵操作,其使用方法為在字符串后面繼續增加按鍵轉義字符串信息。

示例代碼:

from selenium import webdriverfrom selenium,webdriver,chrome.options import Optionsfrom selenium,webdriver,common.keys import Keyschrome options =Options()chrome_options.binary_location = r"C:\Program Files\Google\chrome\Application\chrome,exe"driver=webdriver.Chrome(options=chrome options)driver.get('https://www.ptpress.com.cn/')driver.find element by tag name("input").send keys ("Python"+ KeyS .RETURN)

示例代碼在上二示例代碼的基礎上只對第8行微了修改。第8行代碼在send_keys()方法電行KPyS.RETURN,KeyS RETURN表示技E中談值來源于第3行代碼導入的類Keys,類Kev建。能義了大部分按鍵的轉義字符串。下面展示ySpenium庫官方源代碼中對類Keys的定義,根據定*司知KeyS.RETURN的值為轉義字符串八ue006msend_keys()中寫入的字符串信息為"pythoue006"。

類Keys的定義:

Elass Keys (object):
非甘群Set of special keys codes.gn#
NULL = *\ue000'
CANCEL=\ue001'#^控制鍵
HELP =ue002'
BACKSPACE =\ue003'
BACK SPACE = BACKSPACE
TAB =\ue004'
CLEAR =\ue005'
RETURN =\ue006'ENTER =\ue007'
SHIFT =\ue008'LEFT SHIFT = SHIFTCONTROL =\ue009'LEFT CONTROL=CONTROLALT =\ue00a'LEFT ALT = ALTPAUSE =\ue00b'ESCAPE =\ue00cSPACE =\ue00d'PAGE UP=\ue00e'PAGE DOWN=\ue00f'亻狀到篚剁鈄滹會盹玀攤跑=\ue010'HOME =\ue011'LEFT =\ue012'ARROW LEFT = LEFTUp ='\ue013'ARROW UP = UPRIGHT =\ue014'ARROW RIGHT = RIGHTDOW =\1e015!INSERT =
DELETE = '\ue017
SEMICOLON =\ue018'
EQUALS =\ue019'
#數字鍵NUMPAD0 =\ue0la'
NUMPAD1 =\ue01b'
NUMPAD2=\ue0lc
NUMPAD3=\ue0ld'
NUMPAD4= \ue0le'
NUMPAD5\ue0lf
NUMPAD6'\ue020'三
NUMPAD7 =\ue021'
NUMPAD8=\ue022'
NUMPAD9 =\ue023'
MULTIPLY =\ue024
ADD =\ue025'
SEPARATOR =ue026
SUBTRACT =\ue027'
DECIMAL =\ue028
DIVIDE =\ue029
F1 =\ue031'#功能鍵
F2 =ue032'
F3 =\ue033'
F4=\ue034'
F5 =\ue035'
F6 = \ue036'
F7 =\ue037'
F8=\ue038'
F9=\ue039'
F10 =\ue03a'
F11 =\ue03b'
F12 =\ue03c'
META =\ue03d'
COMMAND=\ue03d'

小項目案例:實現上傳圖片

項目任務泰現在百度識圖官網中上傳一張圖片
項目實現代碼

from selenium import webdriver
from selentan wendrtyer chrome,options import optlons
chrome_options = options()
crome options binary_location = r"c:\program fileslGoogleichromevpplleationichrome.exe
driver = webdriver,chrome (options=chrome optint)
driver.get('百度識圖主頁的網址”
input element = driver.find element by _name('file,)
input element.send_keys(r":\書代碼\識圖,jP)

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

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

相關文章

深度解析Linux文件I/O三級緩沖體系:用戶緩沖區→標準I/O→內核頁緩存

在Linux文件I/O操作中&#xff0c;緩沖區的管理是一個核心概念&#xff0c;主要涉及用戶空間緩沖區和內核空間緩沖區。理解這兩者的區別和工作原理對于高效的文件操作至關重要。 目錄 一、什么是緩沖區 二、為什么要引入緩沖區機制 三、三級緩沖體系 1、三級緩沖體系全景圖…

【每日算法】專題十三_隊列 + 寬搜(bfs)

1. 算法思路 BFS 算法核心思路 BFS&#xff08;廣度優先搜索&#xff09;使用 隊列&#xff08;Queue&#xff09;按層級順序遍歷圖或樹的節點。以下是 C 實現的核心思路和代碼模板&#xff1a; 算法框架 #include <queue> #include <vector> #include <un…

【動手實驗】發送接收窗口對 TCP傳輸性能的影響

環境準備 服務器信息 兩臺騰訊云機器 t04&#xff08;172.19.0.4&#xff09;、t11&#xff08;172.19.0.11&#xff09;&#xff0c;系統為 Ubuntu 22.04&#xff0c;內核為 5.15.0-139-generic。默認 RT 在 0.16s 左右。 $ ping 172.19.0.4 PING 172.19.0.4 (172.19.0.4) …

28、鴻蒙Harmony Next開發:不依賴UI組件的全局氣泡提示 (openPopup)和不依賴UI組件的全局菜單 (openMenu)、Toast

目錄 不依賴UI組件的全局氣泡提示 (openPopup) 彈出氣泡 創建ComponentContent 綁定組件信息 設置彈出氣泡樣式 更新氣泡樣式 關閉氣泡 在HAR包中使用全局氣泡提示 不依賴UI組件的全局菜單 (openMenu) 彈出菜單 創建ComponentContent 綁定組件信息 設置彈出菜單樣…

讓老舊醫療設備“聽懂”新語言:CAN轉EtherCAT的醫療行業應用

在醫療影像設備的智能化升級中&#xff0c;通信協議的兼容性常成為工程師的“痛點”。例如&#xff0c;某醫院的移動式X射線機采用CAN協議控制機械臂&#xff0c;而主控系統基于EtherCAT架構。兩者協議差異導致數據延遲高達5ms&#xff0c;影像定位精度下降&#xff0c;甚至影響…

ubuntu基礎搭建

ubuntu上docker的搭建 https://vulhub.org/zh 網站最下面找到開始使用&#xff0c;有搭建的命令//安裝docker&#xff0c;連接失敗多試幾次 curl -fsSL https://get.docker.com | sh //驗證Docker是否正確安裝&#xff1a; docker version //還要驗證Docker Compose是否可用&am…

動態規劃 + DFS + 記憶化!Swift 解 LeetCode 329 的實戰筆記

文章目錄摘要描述題解答案題解代碼分析代碼解析示例測試及結果時間復雜度空間復雜度總結摘要 這篇文章帶你用 Swift 實戰一道非常經典的 DFS 記憶化搜索題目 —— LeetCode 329《矩陣中的最長遞增路徑》。看似一個簡單的“走格子”游戲&#xff0c;實則考察了搜索順序、剪枝策…

046_局部內部類與匿名內部類

一、局部內部類&#xff08;Local Inner Class&#xff09; 1.1 定義與基本概念 局部內部類是定義在方法、構造器或代碼塊內部的類&#xff0c;其作用域僅限于所在的局部范圍&#xff08;定義它的方法、構造器或代碼塊&#xff09;&#xff0c;超出該范圍則無法訪問。 它的核心…

Jenkins Pipeline 中使用 JsonSlurper 報錯:cannot find current thread

Jenkins Pipeline 中使用 JsonSlurper 報錯&#xff1a;cannot find current thread&#x1f31f; 背景? 問題重現&#x1f9e0; 原因解析&#xff1a;CPS 與非 CPS 安全方法沖突? 解決方案一&#xff1a;使用 NonCPS 注解&#xff08;經典方案&#xff09;? 解決方案二&…

Go 語言循環語句詳解

Go 語言循環語句詳解 在編程語言中&#xff0c;循環語句是實現重復執行某些代碼塊的關鍵元素。Go 語言作為現代編程語言之一&#xff0c;提供了多種循環結構來滿足不同的編程需求。本文將詳細講解 Go 語言中的循環語句&#xff0c;包括 for、while 和 goto 語句&#xff0c;幫助…

day30——零基礎學嵌入式之進程間通信1.0

一、進程間通信7種方式1.傳統的進程間通信方式&#xff08;1&#xff09;管道①無名管道&#xff1a;②有名管道&#xff1a;&#xff08;2&#xff09;③信號&#xff08;3&#xff09;system Ⅴ 》系統Ⅴ 進程間通信方式 inner Process Comunication④共享內存 &#xff…

408考研逐題詳解:2010年第33題——網絡體系結構

2010年第33題 下列選項中&#xff0c;不屬于網絡體系結構所描述的內容是&#xff08; &#xff09; A. 網絡的層次 \qquad B. 每層使用的協議 \qquad C. 協議的內部實現細節 \qquad D. 每層必須完成的功能 解析 本題屬于計算機網絡基礎知識的范疇&#xff0c;考查網絡體系結構…

VR 遠程系統的沉浸式協作體驗?

在傳統的遠程協作中&#xff0c;團隊成員往往通過二維的視頻畫面進行交流&#xff0c;這種方式雖然能實現基本的溝通&#xff0c;但缺乏真實感和互動性。而 VR 遠程系統的出現&#xff0c;徹底改變了這一局面。戴上 VR 設備&#xff0c;員工們仿佛置身于同一個真實的辦公室空間…

記錄DataGrip 2025.1.3破解失敗后,無法重啟問題修復

記錄DataGrip 2025.1.3破解失敗后&#xff0c;無法重啟問題修復安裝過程復盤異常場景解決方式總結安裝過程 在官網下載了最新版本2025.1.3。安裝成功后&#xff0c;使用30天試用方式&#xff0c;打開datagrip。 復盤異常場景 網上搜索破解教程進行破解。找了一個需要現在ja…

私有服務器AI智能體搭建配置選擇記錄

在搭建私有服務器上的AI智能體時&#xff0c;需要從多個方面進行選擇和規劃&#xff0c;以確保系統性能、安全性、可擴展性等方面滿足需求。1. 硬件選擇 服務器配置&#xff1a; CPU&#xff1a;選擇高性能多核CPU&#xff08;如Intel Xeon或AMD EPYC系列&#xff09;&#xff…

SDC Specical check setting的描述 - false path

在上一篇文中描述了SDC的基本語法&#xff0c;其中關于時序異常約束并沒有進行詳細的描述&#xff0c;但是在正常的設計中&#xff0c;一般這種異常的設置反而是需要特別關注的&#xff0c;主要包括&#xff1a;1. 虛假路徑- false path不需要滿足任何時序要求的路徑&#xff1…

【Python練習】048. 編寫一個函數,實現簡單的命令行接口,接受用戶輸入并響應

048. 編寫一個函數,實現簡單的命令行接口,接受用戶輸入并響應 在 Python 中,可以通過 input() 函數創建一個簡單的命令行接口,接受用戶輸入并根據輸入內容進行響應。 示例代碼 def simple_command_line_interface():"""實現一個簡單的命令行接口,接受用…

軟件工廠語境下的知識系統選型:兼顧合規性與集成深度

在過去幾十年間&#xff0c;制造業從“工匠手作”邁向“工業流水線”&#xff0c;完成了生產效率的巨大飛躍。當軟件開發也面臨交付復雜性、合規要求與協作成本不斷上升的現實&#xff0c;“軟件工廠”的理念逐步興起。 在這場“開發現代化”的轉型中&#xff0c;知識管理被重新…

C語言-一維數組,二維數組

數組 數組的引入如果要在程序中保存一個人的年齡&#xff1f;如何保存&#xff1f; 答&#xff1a;創建一個基于int類型的變量&#xff0c;舉例&#xff1a;int age 22如果要在程序中保存一個人的三門課的成績&#xff1f;如何保存&#xff1f; 答&#xff1a;創建三個基于flo…

如何區別HTML和HTML5?

要區分 HTML&#xff08;通常指 HTML4 及更早版本&#xff09;和 HTML5&#xff0c;主要可以從以下關鍵方面進行比較&#xff1a;一、文檔聲明區別 <!-- HTML4 文檔聲明 --> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http:/…