爬蟲小知識三: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)
  1. 功能:創建一個新的 Edge 瀏覽器驅動程序。
  2. 參數 executable_path:表示瀏覽器的驅動路徑,默認為環境變量中的 path,通常計算機中可能存在多個瀏覽器軟件,當沒有在環境變量中設置瀏覽器 path 時,可以使用參數 options。
  3. 參數 port:表明希望服務運行的端口,如果保留為 0,驅動程序將會找到一個空閑端口。
  4. 參數 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/web/89858.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/89858.shtml
英文地址,請注明出處:http://en.pswp.cn/web/89858.shtml

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

相關文章

Jmeter使用 -1

1 接口測試1.1 為什么要進行接口測試接口測試能夠繞過前端校驗,對后端的接口處理邏輯進行測試(數據的邊界/格式/類型)在一些需要重復測試的需求中,接口自動化的效率比手工執行效率高1.2 接口測試流程熟悉API接口文檔(接…

GitHub 趨勢日報 (2025年07月16日)

📊 由 TrendForge 系統生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日報中的項目描述已自動翻譯為中文 📈 今日獲星趨勢圖 今日獲星趨勢圖2415markitdown570claude-code434ART330erpnext150MusicFree146rustdesk129vanna80…

Python+Tkinter制作音頻格式轉換器

我們將使用Python的Tkinter庫來構建一個音頻格式轉換器界面。由于音頻轉換需要實際的處理,我們將使用pydub庫(需要安裝)來進行音頻格式轉換。同時,我們會使用ffmpeg作為后端,因此請確保系統中已安裝ffmpeg并添加到環境…

Haproxy算法精簡化理解及企業級高功能實戰

文章目錄4. Haproxy的算法4.1 靜態算法4.1.1 static-rr:基于權重的輪詢調度1. 示例:4.1.2 first1. 示例2. 測試效果:4.2 動態算法4.2.1 roundrobin1. 示例2. 動態調整權重4.2.2 leastconn1. 示例4.3 其他算法4.3.1 source1. 示例2. 測試4.3.2…

git fork的項目遠端標準協作流程 倉庫設置[設置成upstream]

這是一個在開源協作中非常常見的配置。 簡單來說,upstream 在這里指的是你 Fork 來的那個原始的、官方的倉庫。 下面我們來詳細解釋一下這個 git remote -v 輸出的含義: 1. 兩條“遙控器” (Remotes) 你的 git 配置了兩個遠程倉庫的地址,就像…

[FFmpeg] 輸入輸出訪問 | 管道系統 | AVIOContext 與 URLProtocol | 門面模式

鏈接:https://trac.ffmpeg.org/ docs:FFmpeg FFmpeg 是一個強大的多媒體框架,旨在處理媒體處理的各個階段。 它就像一個數字媒體工廠,包含以下部門:打包/解包(容器處理)、 轉譯/壓縮&#xff…

微服務的編程測評系統2

提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 文章目錄前言工程創建創建ck-oj創建oj-modules創建具體微服務oj-system推送碼云管理員登錄邏輯分析docker安裝mysqldocker客戶端docker desktop安裝安裝mysqlmysql-plus和數據…

AR智能巡檢:電力運維的數字化變革

在電力行業快速發展的當下,傳統運維方式已難以滿足現代電網對高效、安全的需求。近年來,增強現實(AR www.teamhelper.cn )技術的興起為電力巡檢帶來了全新的解決方案。通過實時數據可視化、遠程協作和智能分析,AR技術…

NeRF和3DGS原理詳細

NeRF和3DGS一、傳統三維表征方法1.1 顯示表征1.2 隱式表征二、NeRF(Nerual Radiance Field)2.1 NeRF場景表示2.2 NeRF訓練流程2.3 NeRF體渲染2.4 NeRF位置編碼2.5 NeRF體素分層采樣(Volume Hierarchical Sampling)2.6 NeRF網絡結構…

035_ClaudeCode_MCP_介紹

035_ClaudeCode_MCP_介紹 摘要 Model Context Protocol(MCP)是一個開放的標準化協議,專為大型語言模型提供上下文數據而設計。作為Claude Code生態系統的重要組成部分,MCP如同"AI應用程序的USB-C端口",提供…

Python 程序無法找到 Oracle 的 64 位客戶端庫 (libclntsh.so)

數據庫錯誤: DPI-1047: Cannot locate a 64-bit Oracle Client library: "libclntsh.so: cannot open shared object file: No such file or directory". See https://oracle.github.io/odpi/doc/installation.html#linux for help 這個錯誤表明 Python 程序無法找到…

Kubernetes常用命令總結

文章目錄Kubernetes常用命令總結1. 集群管理命令kubectl cluster-infokubectl get nodeskubectl describe node <node-name>kubectl top nodes2. Pod相關命令kubectl get podskubectl get pods -o widekubectl describe pod <pod-name>kubectl logs <pod-name&g…

roboflow使用教程

如何利用roboflow標注自己的訓練集、調用開源數據集 官網&#xff1a;Roboflow: Computer vision tools for developers and enterprises&#xff08;國內代理進不去&#xff09; 先注冊登陸進去 訓練自己的數據集 點擊“New Project”,名字按照自己的需求來 我不想寫了&am…

IDEA中使用Tomcat兩種方式

Catalogue1 集成本地Tomcat2 Tomcat Maven插件&#xff08;推薦&#xff09;1 集成本地Tomcat 將本地Tomcat集成到Idea中&#xff0c;然后進行項目部署即可 點擊編輯配置 點擊加號 添加local的Tomcat 配置Application Server 可以修改一下Name 至此&#xff0c;配置完成 …

服務器上的文件復制到本地 Windows 系統

在 Windows 上通過 SSH 連接到 Linux 服務器后&#xff0c;如果需要將服務器上的文件復制到本地 Windows 系統&#xff0c;可以使用以下幾種方法&#xff1a;方法 1&#xff1a;使用 scp&#xff08;Secure Copy&#xff09;命令 scp&#xff08;基于 SSH 的安全復制&#xff0…

大語言模型置信度增強實戰指南

LLM怎么簡單增強置信度 在大語言模型(LLM)的應用中,“置信度增強”核心目標是提升模型輸出的可靠性(減少錯誤/幻覺) 并讓模型更清晰地表達自身的不確定性(避免“一本正經地胡說”)。常用方式可分為“輸出優化”“知識補充”“校準調整”三大類, 一、基于“推理過程優…

NLP:人名分類器案例分享

本文目錄&#xff1a;一、案例介紹&#xff08;一&#xff09;關于人名分類&#xff08;二&#xff09;人名分類數據預覽二、案例步驟&#xff08;一&#xff09;導入工具包&#xff08;二&#xff09;數據預處理1. 獲取常用的字符數量2. 國家名種類數和個數3.讀數據到內存4.構…

3分鐘實戰!用DeepSeek+墨刀AI生成智能對話APP原型圖

如今&#xff0c;AI生成原型圖已經逐漸成為產品經理的一項常用輔助技能&#xff0c;不僅能加快設計進程&#xff0c;還能顯著提升前期溝通效率。最近我嘗試將大語言模型工具與AI原型工具結合測試&#xff0c;目標是看看是否能生成更高質量的原型頁面。直到我使用DeepSeek墨刀AI…

CentOS網絡配置與LAMP環境搭建指南

一、CentOS配置網絡1、查看網卡名稱ifconfig2、找到網卡對應配置文件網卡存放路徑 &#xff1a;/etc/sysconfig/network-scriptscd /etc/sysconfig/network-scripts3、修改網卡對應配置文件使用 vi/vim 打開文件&#xff0c;查看以下內容vim ifcfg-ens33將ONBOOTno 改為 ONBOOT…

TinyMCE 富文本編輯器在 vue2 中的使用 @tinymce/tinymce-vue

TinyMCE是一款功能強大、高度可定制的富文本編輯器。官方文檔 TinyMCE DOCS tinymce-vue包的版本4及更高版本支持Vue.js 3。但不支持Vue.js 2.x。對于Vue.js 2。X應用程序&#xff0c;使用tinymce-vue版本3。 安裝TinyMCE和Vue集成包 npm install tinymce/tinymce-vue3 tiny…