小白學Python,網絡爬蟲篇(2)——selenium庫

前言

selenium 庫是一種用于 Web 應用程序測試的工具,它可以驅動瀏覽器執行特定操作,自動按照腳本代碼做出單擊、輸入、打開、驗證等操作,支持的瀏覽器包括 IE、Firefox、Safari、Chrome、Opera 等。

與 requests 庫不同的是,selenium 庫是基于瀏覽器的驅動程序來驅動瀏覽器執行操作的。且瀏覽器可以實現網頁源代碼的渲染,因此通過 selenium 庫還可以輕松獲取網頁中渲染后的數據信息。


一、使用 selenium 庫前的準備

1.了解 selenium 庫驅動瀏覽器的原理

瀏覽器是在瀏覽器內核基礎之上開發而成的,瀏覽器內核主要負責對網頁語法進行解釋并渲染(顯示)網頁。例如 Edge 瀏覽器使用 ?Chromium 內核而 QQ 瀏覽器使用 IE 內核,Safari 瀏覽器使用 Webkit 內核。

雖然瀏覽器內核可以被 selenium 庫驅動,但還是需要安裝對應版本的瀏覽器內核驅動程序,以便于控制 Web 瀏覽器的行為。每個瀏覽器都有一個特定的用于支持瀏覽器運行的 WebDriver,被稱為驅動程序(可以進入 selenium 庫的官網進行下載,如果下載失敗或無法匹配版本,還可以嘗試下面介紹的相關方法)。


2.安裝 WebDriver

以Edge瀏覽器為例,開始介紹安裝瀏覽器內核驅動程序 WebDriver 的方法。

在設置中找到“關于 Microsoft Edge”,查看當前Edge瀏覽器版本,進入此網址:Microsoft Edge WebDriver |Microsoft Edge 開發人員,找到對應版本號的?WebDriver。有的可能會找不到版本號完全相同的 WebDriver,但也可以使用與瀏覽器版本最為接近的版本。

下載完成后還需要解壓相應文件,并將解壓后的文件中的 msedgedriver.exe 文件移動到 Python 安裝目錄路徑下的 Scripts 文件夾中。?


3.安裝 selenium 庫

在命令提示符窗口或終端中執行以下命令:

pip install selenium

二、驅動瀏覽器

selenium 庫支持的瀏覽器包括 Chrome、IE 7 - 11、Firefox、Safari、Opera Edge、HtmlUnit、PhantomJS 等,幾乎覆蓋了當前計算機端和手機端的所有類型的瀏覽器。在 selenium 庫源代碼文件下的 webdriver 中可查看所有支持的瀏覽器類型,如圖所示。

webdriver 的使用形式如下:

webdriver.瀏覽器類型名()

瀏覽器類型名與圖中對應瀏覽器類型的文件夾名稱相同。例如驅動 Edge 瀏覽器的使用方法為webdriver.Edge(),驅動 Opera 瀏覽器的使用方法為webdriver.opera()。圖所示的每個文件夾中都存在一個webdriver.py文件,當調用webdriver.Edge()時,會默認調用edge\webdriver.py文件中的類 WebDriver。webdriver.Edge()的使用形式如下:

webdriver.Edge(executable_path = "msedgedriver", port = 0, options = None)

  • 功能:創建一個新的 Edge 瀏覽器驅動程序。
  • 參數 executable_path:表示瀏覽器的驅動路徑,默認為環境變量中的 path,通常計算機中可能存在多個瀏覽器軟件,當沒有在環境變量中設置瀏覽器 path 時,可以使用參數 options。
  • 參數 port:表明希望服務運行的端口,如果保留為 0,驅動程序將會找到一個空閑端口。
  • 參數 options:表示由類 Options(位于selenium\webdriver\edge\options.py?)創建的對象,用于實現瀏覽器的綁定。

示例代碼(驅動Edge瀏覽器):

from selenium import webdriver
from selenium.webdriver.edge.options import Options
edge_options = Options()
edge_options.binary_location = r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe"
driver = webdriver.Edge(options = edge_options)

第 3、4 行代碼使用類 Options 創建了一個對象 edge_options,使用 binary_location () 方法綁定了瀏覽器。第 5 行代碼使用 webdriver.Edge() 設置 options 參數值為綁定 Edge 瀏覽器的對象 edge_options。

執行代碼后將會自動打開 Edge 瀏覽器,實現驅動瀏覽器的第一步。


三、加載網頁

接下來介紹兩種常用的加載瀏覽器網頁的方法。

1.get() 方法

get() 方法用于打開指定的網頁。其使用形式如下:

get(url)

功能:在當前瀏覽器會話中加載 url 指向的網頁。

示例代碼(加載人民郵電出版社官網中的期刊頁):

from selenium import webdriver
from selenium.webdriver.edge.options import Options
edge_options = Options()
edge_options.binary_location = r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe"
driver = webdriver.Edge(options = edge_options)
driver.get('https://www.ptpress.com.cn/periodical')

運行結果:?

第 6 行代碼使用 get() 方法加載人民郵電出版社官網的期刊頁,執行代碼后將會自動啟動 Edge 瀏覽器并加載出相應網頁,結果如圖所示。

2.execute_script() 方法

execute_script() 方法用于打開多個標簽頁,即在同一瀏覽器中打開多個網頁。其使用形式如下:

execute_script(script, *args)

功能:打開標簽頁,同步執行當前頁面中的 JavaScript 腳本。JavaScript 是網頁中的一種編程語言。

參數 script:表示將要執行的腳本內容,數據類型為字符串類型。使用 JavaScript 語言實現打開一個新標簽頁的使用形式為"window.open('網站url','_blank')"?。

示例代碼(打開多個標簽頁):

from selenium import webdriver
from selenium.webdriver.edge.options import Options
edge_options = Options()
edge_options.binary_location = r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe"
driver = webdriver.Edge(options = edge_options)
driver.get('https://www.ptpress.com.cn/')
driver.execute_script("window.open('https://www.ptpress.com.cn/login','_blank');")
driver.execute_script("window.open('https://www.shuyishe.com/','_blank');")
driver.execute_script("window.open('https://www.shuyishe.com/course','_blank');")

運行結果:?

第 7~9 行代碼使用execute_script()方法執行括號中的 JavaScript 腳本,打開的新標簽頁分別為人民郵電出版社登錄頁面、數藝設的主頁、數藝設的課程頁面,如圖所示。?


四、獲取渲染后的網頁代碼

通過get()方法獲取瀏覽器中的網頁資源后,瀏覽器將自動渲染網頁源代碼內容,并生成渲染后的內容,這時使用page_source()方法即可獲取渲染后的網頁代碼。

示例代碼:

from selenium import webdriver
from selenium.webdriver.edge.options import Options
edge_options = Options()
edge_options.binary_location = r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe"
driver = webdriver.Edge(options = edge_options)
driver.get('https://www.ptpress.com.cn/')
print(driver.page_source)

運行結果:?

第 7 行代碼使用driver對象中的page_source()方法獲取被get()方法獲取到的渲染后的網頁源代碼。執行代碼后的輸出結果如圖所示,圖中標注框處的內容即網頁中的圖片 url。


五、獲取和操作網頁元素

1.獲取網頁中的指定元素

WebDriver對象提供了大量用于獲取網頁指定元素的方法。

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

2.在元素中輸入信息

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

send_keys(*value)

參數 value:表示需要輸入的字符串信息。

示例代碼(在人民郵電出版社官網的搜索框中輸入 “Python”):

from selenium import webdriver
from selenium.webdriver.edge.options import Options
from selenium.webdriver.common.by import By
edge_options = Options()
edge_options.binary_location = r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe"
driver = webdriver.Edge(options = edge_options)
driver.get('https://www.ptpress.com.cn/')
driver.find_element(by=By.TAG_NAME,value='input').send_keys('Python')

運行結果:

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

實現在搜索框中輸入信息的代碼程序后,還可以模擬用戶的按鍵操作,其使用方法為在字符串后面繼續增加按鍵轉義字符串信息。

示例代碼:

from selenium import webdriver
from selenium.webdriver.edge.options import Options
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
edge_options = Options()
edge_options.binary_location = r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe"
driver = webdriver.Edge(options = edge_options)
driver.get('https://www.ptpress.com.cn/')
driver.find_element(by=By.TAG_NAME,value='input').send_keys("Python"+Keys.RETURN)

運行結果:?

該示例代碼在上一示例代碼的基礎上只對第 8 行代碼做了修改。第 8 行代碼在 send_keys () 方法中增加了 Keys.RETURN,Keys.RETURN 表示按 Enter 鍵。該值來源于第 3 行代碼導入的類 Keys,類 Keys 中定義了大部分按鍵的轉義字符串。下面展示了 Selenium 庫官方源代碼中對類 Keys 的定義,根據定義可知 Keys.RETURN 的值為轉義字符串 '\ue006',即 send_keys () 中寫入的字符串信息為 "Python\ue006"。

執行代碼后將會自動在人民郵電出版社官網的搜索框輸入 Python,并按 Enter 鍵實現提交。

類Keys的定義:

class Keys:"""Set of special keys codes."""NULL = "\ue000"CANCEL = "\ue001"  # ^breakHELP = "\ue002"BACKSPACE = "\ue003"BACK_SPACE = BACKSPACETAB = "\ue004"CLEAR = "\ue005"RETURN = "\ue006"ENTER = "\ue007"SHIFT = "\ue008"LEFT_SHIFT = SHIFTRIGHT_SHIFT = "\ue050"CONTROL = "\ue009"LEFT_CONTROL = CONTROLRIGHT_CONTROL = "\ue051"ALT = "\ue00a"LEFT_ALT = ALTRIGHT_ALT = "\ue052"PAUSE = "\ue00b"ESCAPE = "\ue00c"SPACE = "\ue00d"PAGE_UP = "\ue00e"PAGE_DOWN = "\ue00f"END = "\ue010"HOME = "\ue011"LEFT = "\ue012"ARROW_LEFT = LEFTUP = "\ue013"ARROW_UP = UPRIGHT = "\ue014"ARROW_RIGHT = RIGHTDOWN = "\ue015"ARROW_DOWN = DOWNINSERT = "\ue016"DELETE = "\ue017"SEMICOLON = "\ue018"EQUALS = "\ue019"NUMPAD0 = "\ue01a"  # number pad keysNUMPAD1 = "\ue01b"NUMPAD2 = "\ue01c"NUMPAD3 = "\ue01d"NUMPAD4 = "\ue01e"NUMPAD5 = "\ue01f"NUMPAD6 = "\ue020"NUMPAD7 = "\ue021"NUMPAD8 = "\ue022"NUMPAD9 = "\ue023"MULTIPLY = "\ue024"ADD = "\ue025"SEPARATOR = "\ue026"SUBTRACT = "\ue027"DECIMAL = "\ue028"DIVIDE = "\ue029"F1 = "\ue031"  # function  keysF2 = "\ue032"F3 = "\ue033"F4 = "\ue034"F5 = "\ue035"F6 = "\ue036"F7 = "\ue037"F8 = "\ue038"F9 = "\ue039"F10 = "\ue03a"F11 = "\ue03b"F12 = "\ue03c"META = "\ue03d"LEFT_META = METARIGHT_META = "\ue053"COMMAND = "\ue03d"LEFT_COMMAND = COMMANDZENKAKU_HANKAKU = "\ue040"# Extended macOS keysLEFT_OPTION = LEFT_ALTRIGHT_OPTION = RIGHT_ALT

六、其他操作

1.模擬單擊

獲取網頁元素后可以使用 click () 方法實現單擊該元素,即模擬單擊網頁中的某個元素所在的位置。

示例代碼(單擊人民郵電出版社官網中的 “圖書”):

from selenium import webdriver
from selenium.webdriver.edge.options import Options
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
edge_options = Options()
edge_options.binary_location = r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe"
driver = webdriver.Edge(options = edge_options)
driver.get('https://www.ptpress.com.cn/periodical')
elements = driver.find_elements(by=By.CLASS_NAME, value='item')
i = 0
for element in elements:print(i,'個',element.text)i += 1
elements[4].click()
input()

運行結果:?


2.WebDriver 對象中的方法?

幾種常見的對瀏覽器操作的方法:

方法功能
back()返回到上一個頁面
forward()前進到下一個頁面
refresh()刷新當前頁面
quit()關閉當前瀏覽器
close()關閉當前標簽頁

3.不啟動瀏覽器也能獲取網頁資源

在通過代碼獲取網頁中的資源時,往往并不需要啟動瀏覽器,因為用戶需要獲取的是處理后的結果,而不是處理的過程。因此在驅動瀏覽器時,可以設置無窗口模式,即驅動瀏覽器后并不會打開瀏覽器窗口,而是將網頁代碼在內存中處理,類 Options 中的 add_argument () 方法即可實現在不啟動瀏覽器的情況下獲取網頁資源。其使用形式如下(寫入參數 '--headless' 即表明不啟動瀏覽器窗口):

options().add_argument('--headless')

示例代碼:

from selenium import webdriver
from selenium.webdriver.edge.options import Options
from selenium.webdriver.common.by import By
edge_options = Options()
edge_options.add_argument('--headless')
edge_options.binary_location = r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe"
driver = webdriver.Edge(options = edge_options)
driver.get('https://www.ptpress.com.cn/')
elements = driver.find_elements(by=By.TAG_NAME,value='a')
for element in elements:print(element.text)

運行結果:?

第 4 行代碼設置瀏覽器啟動無窗口模式。因此執行代碼后雖然不會顯示瀏覽器,但瀏覽器仍然會在內存中進行數據處理。第 9~10 行代碼獲取人民郵電出版社官網中所有標簽名為 a 的文本內容。

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

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

相關文章

Java安全:SpringBoot項目中Fastjson組件的使用與安全實踐

前言 Fastjson是阿里巴巴開源的一個高性能Java JSON庫,廣泛用于Java對象的序列化和反序列化操作。在SpringBoot項目中,Fastjson常被用作JSON處理工具。然而,Fastjson因其高性能而廣受歡迎的同時,也因多次爆出的安全漏洞而備受關注…

x的平方根

給你一個非負整數 x ,計算并返回 x 的 算術平方根 。由于返回類型是整數,結果只保留 整數部分 ,小數部分將被 舍去 。注意:不允許使用示例 1:輸入:x 4 輸出:2示例 2:輸入&#xff1…

oracle服務器定時備份Windows Server

-- 創建目錄對象(若未創建),先建立對應文件夾才能用目錄對象CREATE OR REPLACE DIRECTORY dp_dirbackup AS D:\BACKUP; --配置路徑 GRANT READ, WRITE ON DIRECTORY dp_dirbackup TO 用戶名; --配置用戶權限-- 備份腳本(保存為每…

HTML data-* 屬性 自定義屬性

data-* 屬性用于存儲私有頁面后應用的自定義數據。 data-* 屬性可以在所有的 HTML 元素中嵌入數據。 自定義的數據可以讓頁面擁有更好的交互體驗(不需要使用 Ajax 或去服務端查詢數據)。 data-* 屬性由以下兩部分組成:1. 屬性名不要包含大寫字…

Oracle 大頁配置use_large_pages 參數解析

一、前因 再給一位客戶的Exdata 2 節點 RAC 19C版本創建數據庫并配置好優化參數后,客戶一天發來一份健康檢查報告,打開一看 use_large_pages 配置異常。 回想安裝部署時特意確認了在db啟動大頁已經生效,為何會有此異常告警項? 二…

迅為八核高算力RK3576開發板攝像頭實時推理測試 ppyoloe目標檢測

RK3576處理器迅為iTOP-3576開發板采用瑞芯微RK3576高性能、低功耗的應用處理芯片,集成了4個Cortex-A72和4個Cortex-A53核心,以及獨立的NEON協處理器。它適用于ARM PC、邊緣計算、個人移動互聯網設備及其他多媒體產品。NPU高達6TOPS算力支持INT4/INT8/INT…

純CSS輪播

純CSS輪播 在現代網頁設計中,輪播組件是一種常見的用戶界面元素,廣泛應用于展示圖片、產品信息等內容。本文將詳細介紹如何使用純 HTML/CSS 和少量 JavaScript 實現一個功能完備的 CSS Scroll Snap 輪播組件。該組件不僅支持原生左右拖拽滾動&#xff0c…

從零開始的云計算生活——番外3,LVS+KeepAlived+Nginx高可用實現方案

目錄 前言 一、環境搭建 1.環境準備 2.安裝ipvsadm和keepalived(Lvs服務器),nginx服務器安裝nginx 3.為兩臺RS配置虛擬ip(nginx服務器) 1.配置虛擬網絡子接口 2.ARP響應級別與通告行為的概念 3.配置ARP 二、Ke…

100201組件拆分_編輯器-react-仿低代碼平臺項目

文章目錄1 設計UI,組件拆分2 實現關于1 設計UI,組件拆分 編輯器整體如上圖所示,重點關注: flex彈性布局 上 左中右 下 左中右 畫布居中畫布Y軸滾動 2 實現 src/pages/question/Edit/index.tsx代碼如下: import { …

CS課程項目設計2:交互友好的五子棋游戲

上次給大家分享了井字棋游戲的設計流程 CS課程項目設計1:交互友好的井字棋游戲-CSDN博客https://blog.csdn.net/weixin_36431280/article/details/149309500?spm1001.2014.3001.5501今天打算再分享進階版井字棋游戲的版本設計——五子棋游戲。五子棋游戲操作方式與…

如何用山海鯨輕松構建3D智慧大屏?

一、什么是3D可視化大屏? 3D可視化大屏是一種結合了三維(3D)圖形技術與數據可視化技術的信息展示平臺,它通過在大型屏幕上以三維立體的形式呈現復雜的數據和信息,為用戶提供直觀、生動的視覺體驗。這種技術將抽象的數…

牛客網 SQL 刷題(全部題目,最優解,復雜題有講解)

刷題網址:https://www.nowcoder.com/exam/oj?questionJobId10&subTabNameonline_coding_page有時主頁顯示的題目序號與點進去之后的題目序號有所不同,這里以點進去之后的題目序號為主,如果日后還是有所出入,可以憑題目名稱找…

Linux 系統管理基礎教程

一、引言在 Linux 系統中,系統管理是一項至關重要的任務,它涉及到進程和服務的管理、系統運行級別的控制以及關機重啟等操作。本文將詳細介紹 Linux 系統管理的基礎知識,幫助讀者更好地理解和掌握 Linux 系統的管理技巧。二、Linux 中的進程和…

如何實戰應用快鯨aiseo提升百度搜索排名?

百度搜索排名優化策略 百度搜索排名的提升,是企業獲取在線可見性與自然流量的核心目標。有效的優化策略需基于對百度搜索算法原理的深入理解,遵循其重視內容質量與用戶體驗的核心準則。具體而言,這涉及構建完善的網站技術架構以確保高效爬取與…

element-plus——圖標推薦

以下是 Element Plus 中適合編輯頁面使用的圖標組件示例:<!-- 編輯相關 --> <el-icon><Edit /></el-icon> <!-- 基礎編輯圖標 --> <el-icon><EditPen /></el-icon> <!-- 鋼筆樣式編輯圖標 --&g…

黃仁勛鏈博會首秀:中國開源AI催化全球革命,機器人浪潮重塑未來工廠

7月16日&#xff0c;北京鏈博會開幕式迎來一位特殊演講者——英偉達創始人黃仁勛身著唐裝&#xff0c;首次以中文登臺演講。這位AI芯片巨頭的掌舵人坦言“很緊張”&#xff0c;卻清晰傳遞出一個重要觀點&#xff1a;中國的開源AI已成為世界進步的催化劑&#xff0c;讓每個國家、…

uniapp云托管前端網頁

uniCloud控制臺 實名認證

27、鴻蒙Harmony Next開發:ArkTS并發(Promise和async/await和多線程并發TaskPool和Worker的使用)

目錄 異步并發 (Promise和async/await) Promise async/await 多線程并發 多線程并發模型 內存共享模型 Actor模型 TaskPool TaskPool運作機制 TaskPool注意事項 Concurrent裝飾器 裝飾器說明 裝飾器使用示例 TaskPool擴縮容機制 擴容機制 縮容機制 Worker Wo…

Web前端:JavaScript鼠標事件

1. onclick&#xff08;鼠標單擊事件&#xff09;觸發條件&#xff1a;用戶用鼠標左鍵單擊元素時觸發使用場景&#xff1a;按鈕操作、菜單展開/關閉、提交表單等示例代碼&#xff1a;<button id"myButton">點擊我</button> <script>document.getEl…

控制臺輸出的JAVA格斗小游戲-面向對象

重溫了黑馬的這個小程序首先介紹一下&#xff1a;相當于一個小游戲&#xff0c;你打我一下&#xff0c;我打你一下&#xff1b;中間經歷一些來回&#xff0c;最終根據血量的大小來判斷誰輸誰贏&#xff0c;實話講黑馬整個課在這個之前的題目沒有什么難度&#xff0c;這個不難&a…