7.1.2 Selenium的用法1

目錄

1. 初始化瀏覽器對象和訪問頁面

2. 查找節點及節點交互

2.1 查找單個節點

(1)獲取方法1——特定方法

(2)通用方法

2.2 查找多個節點

2.3 節點交互

3. 動作鏈

4. 執行 JavaScript 之下拉進度條

5.?獲取節點信息

5.1 獲取屬性

5.2?獲取文本值

5.3?獲取 ID、位置、標簽名、大小


1. 初始化瀏覽器對象和訪問頁面

from selenium import webdriverbrowser = webdriver.Chrome()    # 初始化瀏覽器對象
browser.get('https://www.taobao.com/')  # 訪問淘寶頁面
print(browser.page_source)  # 得到頁面源代碼
browser.close()

? ? ? ? 運行代碼,之后會自動彈出窗口,并訪問淘寶,輸出網頁HTML代碼。

2. 查找節點及節點交互

? ? ? ? Selenium可以驅動瀏覽器完成各種操作,例如填充表單、模擬點擊、輸入等。但想要點擊、輸入等需要找到輸入的地方即節點,之后點擊、輸入即節點交互。

2.1 查找單個節點

????????下面我們以淘寶網為例:

? ? ? ? 這是個輸入的表單節點,之后我們獲取它。可以發現這個input節點 id屬性為 'q',name='q'等等,我們可以通過其屬性去獲取節點(屬性多種,獲取方式也多種)。

(1)獲取方法1——特定方法

? ? ? ? 以下是所有特定方法:

browser.find_element_by_id('')
browser.find_element_by_name('')
browser.find_element_by_css_selector('')    # CSS選擇器
browser.find_element_by_xpath('')
browser.find_element_by_link_text('')
browser.find_element_by_partial_link_text('')
browser.find_element_by_tag_name('')
browser.find_element_by_class_name('')

(2)通用方法

????????find_element(查找方法,方式的取值),使用這個最好先from selenium.webdriver.common.by import By,方便使用。

from selenium import webdriver
from selenium.webdriver.common.by import Bybrowser = webdriver.Chrome()    # 初始化瀏覽器對象
browser.get('https://www.taobao.com/')  # 訪問淘寶頁面
inputElement1 = browser.find_element_by_id('q')
# inputElement11 = browser.find_element(By.ID, 'q')    # 通用方法
inputElement2 = browser.find_element_by_css_selector('#q')
inputElement3 = browser.find_element_by_xpath('//*[@id="q"]')
print(inputElement1, inputElement2, inputElement3)    # 三個值相同browser.close()

2.2 查找多個節點

? ? ? ? 例如下面的導航條:

獲取方法:在前面單個節點的兩個獲取方法的element加s即可,返回的是個列表。

from selenium import webdriverbrowser = webdriver.Chrome()    # 初始化瀏覽器對象
browser.get('https://www.taobao.com/')  # 訪問淘寶頁面
inputElement = browser.find_elements_by_css_selector('.nav-hd li')
print(inputElement)browser.close()

2.3 節點交互

? ? ? ? 現要瀏覽器自動去淘寶搜索ipad,我們需要先驅動瀏覽器打開淘寶,獲取輸入框節點,再使用send_keys方法輸入文字,獲取搜索按鈕節點,用 click 方法點擊按鈕。

from selenium import webdriver
from selenium.webdriver.common.by import Bybrowser = webdriver.Chrome()    # 初始化瀏覽器對象
browser.get('https://www.taobao.com/')  # 訪問淘寶頁面
inputElement = browser.find_element_by_id('q')    # 獲取輸入框節點
inputElement.send_keys('ipad')    # 輸入文字
findButton = browser.find_element_by_css_selector('.search-button button')    
# 獲取搜索按鈕節點
findButton.click()    # 點擊按鈕

? ? ? ? 運行程序,可以看到過程。因為沒有登陸,所以會停留在登陸頁面。更多操作可看官方文檔介紹:7. WebDriver API — Selenium Python Bindings 2 documentation。

3. 動作鏈

? ? ? ? 在前面,交互操作都是針對某個節點執行的。還有一些操作妹紙特定的執行對象,比如鼠標拖拽、鍵盤按鍵等,需要用另一種方式執行,那就是動作鏈。

? ? ? ?例如,可以這樣實現拖拽節點的操作,將某個節點從一處拖拽至另一處:

實例鏈接:菜鳥教程在線編輯器

 

現用代碼實現拖拽:

from selenium import webdriver
from selenium.webdriver import ActionChainsbrowser = webdriver.Chrome()
url = 'http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable'
browser.get(url)
browser.switch_to.frame('iframeResult')
source = browser.find_element_by_css_selector('#draggable')
target = browser.find_element_by_css_selector('#droppable')
actions = ActionChains(browser)
actions.drag_and_drop(source, target)
actions.perform()

? ? ? ?browser.switch_to.frame('iframeResult')用于內嵌,使之后的source能嵌入target,因為要凸顯效果,特定加入。

????????依次選中要拖曳的節點source和拖曳到的目標節點target,接著聲明 ActionChains 對象并將其賦值為 actions 變量,然后通過調用 actions 變量的 drag_and_drop() 方法,再調用 perform() 方法執行動作,此時就完成了拖曳操作。

結果:

更多的動作鏈操作可以參考官方文檔的動作鏈介紹:7. WebDriver API — Selenium Python Bindings 2 documentation

4. 執行 JavaScript 之下拉進度條

????????對于某些操作,Selenium API 并沒有提供。比如,下拉進度條,它可以直接模擬運行 JavaScript,此時使用 execute_script() 方法即可實現(雙引號中為固定代碼,多個網站都適用),代碼如下:

from selenium import webdriverbrowser = webdriver.Chrome()
# browser.get('https://www.zhihu.com/explore')
browser.get('https://news.baidu.com/')
browser.execute_script('window.scrollTo(0, document.body.scrollHeight)')
browser.execute_script('alert("To Bottom")')

????????有了這個方法,基本上 API 沒有提供的所有功能都可以用執行 JavaScript 的方式來實現了。

5.?獲取節點信息

????????前面說過,通過 page_source 屬性可以獲取網頁的源代碼,接著就可以使用解析庫(如正則表達式、Beautiful Soup、pyquery 等)來提取信息了。

????????不過,既然 Selenium 已經提供了選擇節點的方法,返回的是 WebElement 類型,那么它也有相關的方法和屬性來直接提取節點信息,如屬性、文本等。這樣的話,我們就可以不用通過解析源代碼來提取信息了,非常方便。

接下來,就看看通過怎樣的方式來獲取節點信息吧。

5.1 獲取屬性

????????可以使用 get_attribute() 方法來獲取節點的屬性,但是其前提是先選中這個節點,示例如下:獲得百度這個logo的class屬性。

from selenium import webdriverbrowser = webdriver.Chrome()
url = 'https://www.baidu.com/'
browser.get(url)
baiduLogo = browser.find_element_by_id('lg')
print(baiduLogo)
print(baiduLogo.get_attribute('class'))
輸出:<selenium.webdriver.remote.webelement.WebElement(session="ae1b17e9e092f2155263522772036f37", element="f.25E08F3EDDDDC250A5E5784201893A30.d.2BB430665B7C306121BC019488525624.e.10")>
s-p-top

5.2?獲取文本值

????????每個 WebElement 節點都有 text 屬性,直接調用這個屬性就可以得到節點內部的文本信息。

from selenium import webdriverbrowser = webdriver.Chrome()
url = 'https://www.baidu.com/'
browser.get(url)
content = browser.find_element_by_class_name('title-content-title')
print(content.text)
browser.close()# 輸出:
# 大力推動我國新能源高質量發展

5.3?獲取 ID、位置、標簽名、大小

? ? ? ? 上述同樣的方法,找到獲取節點,用屬性即可。

節點.id
節點.location
節點.tag_name
節點.size

本人新手,若有錯誤,歡迎指正;若有疑問,歡迎討論。若文章對你有用,點個小贊鼓勵一下,謝謝,一起加油吧!

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

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

相關文章

谷歌seo推廣秒收錄怎么做?

谷歌SEO推廣秒收錄想要做到&#xff0c;可以利用我們光算科技獨家技術&#xff0c;GSI快速收錄&#xff0c;通過技術手段和操作&#xff0c;幫你的網站快速被谷歌發現和記錄 這項技術具體核心就是GPC爬蟲池系統&#xff0c;這個系統是專門研究谷歌搜索引擎優化的規律和算法創造…

【QT】QTableView或QTableWidget 搭配QLineEdit實現數據的搜索顯示

在 Qt 中&#xff0c;QTableView 和 QTableWidget 都可以用來實現數據的搜索和顯示&#xff0c;但它們的適用場景和實現方式有所不同&#xff1a; QTableView 適用場景&#xff1a;QTableView 適用于更復雜的場景&#xff0c;尤其是當需要處理大量數據或需要高度定制化的表格時…

66-ES6:var,let,const,函數的聲明方式,函數參數,剩余函數,延展操作符,嚴格模式

1.JavaScript語言的執行流程 編譯階段&#xff1a;構建執行函數&#xff1b;執行階段&#xff1a;代碼依次執行 2.代碼塊&#xff1a;{ } 3.變量聲明方式var 有聲明提升&#xff0c;允許重復聲明&#xff0c;聲明函數級作用域 訪問&#xff1a;聲明后訪問都是正常的&…

拿下邊界機器進行內網滲透的方案

拿下機器后&#xff0c;使用代理訪問內網 windows環境&#xff1a;reGeorg與proxifier Linux環境&#xff1a;reGeorg與proxychains&#xff0c; 使用nmap等工具進行掃描&#xff0c;發現web服務的主機和其它信息。有時這些邊界機器上會記錄一些 內網服務器上的一些信息&…

QT C++實現點擊按鍵彈出窗口并顯示圖片/視頻|多窗口應用程序的設計和開發

一、介紹 首先&#xff0c;QT界面開發中主要大體分為2種多窗口的形式&#xff1a; 嵌入式&#xff1a; 新生成的窗口嵌入在主窗口內部獨立窗口&#xff1a; 以彈窗形式的新窗口生成和展示 這里就講解最簡單的&#xff1a;點擊案件后&#xff0c;跳出一個新窗口 二、代碼實…

利用FFMPEG 將RTSP流的音頻G711 轉碼為AAC 并 推流到RTMP

之前我們的視頻轉碼項目中 是沒有加入音頻的 現在 需要加入音頻 &#xff0c;由于RTMP只支持AAC的 音頻流 而有的RTSP流的音頻編碼并不是AAC 大多數都是G711編碼 還分為G711A 和G711U 之前用ffmpeg命令行可以直接 完成轉碼 并推送到RTMP 但是考慮到無法獲取更詳細的狀…

Qt篇——QTableWidget保存表格數據到Excel文件中,讀Excel內容到QTableWidget

表格和excel例子如下圖所示&#xff1a; 一、QTableWidget保存表格數據到Excel文件中 代碼如下&#xff1a; &#xff08;pro文件中添加QT axcontainer&#xff09; #include <QAxObject>void MainWindow::saveTableToExcel() {QDateTime current_date_time QDateTi…

六、MQTT源碼簡單瀏覽

1、MQTT程序分層 1.1、MQTT客戶端工作流程 (1)連接MQTT服務器。 (2)客戶端向服務器發送訂閱主題。 (3)客戶端等待MQTT的消息。 (4)客戶端向服務器發送消息。 2.2、MQTT程序結構 APP層 while循環或一個進程中&#xff1a;等待消息&#xff0c;處理消息&#xff1b; 發送消…

[法規規劃|方案實操]數據資產入表,城投將獲融資新渠道

2023年8月&#xff0c;財政部發布了《企業數據資源相關會計處理暫行規定》&#xff0c;并從2024年1月1日開始實施&#xff0c;標志著數據資產正式納入企業的資產負債表。這一舉措被視為數據資產從理論走向實踐的重大一步。 數據資產入表對城投運營模式的影響 隨著全球經濟格局…

Vue3速成

文章目錄 day 11. 創建vue3工程3. 響應式數據4. 計算屬性 day 25. watch 監視6. watchEffect7. 標簽的ref屬性8. 回顧TS中的接口_泛型_自定義類型 day 1 1. 創建vue3工程 相關代碼如下&#xff1a; ## 創建vue工程 npm create vuelastest## 安裝node_modules npm install //…

JSON 文件里的 “$schema” 是干什么用的?

最近我在做一些前端項目&#xff0c;我發現有的配置文件&#xff0c;比如 .prettierrc.json 或者 tsconfig.json 里面都會看到一個 $schema 字段&#xff0c;有點好奇&#xff0c;就查了一下。 什么是 JSON Schema JSON Schema是一種基于JSON (JavaScript Object Notation) 的…

【Leetcode】2369. 檢查數組是否存在有效劃分

文章目錄 題目思路代碼結果 題目 題目鏈接 給你一個下標從 0 開始的整數數組 nums &#xff0c;你必須將數組劃分為一個或多個 連續 子數組。 如果獲得的這些子數組中每個都能滿足下述條件 之一 &#xff0c;則可以稱其為數組的一種 有效 劃分&#xff1a; 子數組 恰 由 2 個…

MATLAB算法實戰應用案例精講-【圖像處理】三維重建(最終篇)

目錄 前言 相機定標和三維重建 針孔相機模型和變形 三維成像 一、機器視覺系統組成

大數據智能化-長視頻領域

隨著數字化時代的到來&#xff0c;長視頻領域的發展迎來了新的機遇和挑戰。在這一背景下&#xff0c;大數據智能化技術的應用成為長視頻行業提升用戶體驗、優化運營管理的重要手段之一。本文將從優愛騰3大長視頻背景需求出發&#xff0c;分析靜態資源CDN、視頻文件存儲與分發、…

網絡安全、信息安全、計算機安全,有何區別?

這三個概念都存在&#xff0c;一般人可能會混為一談。 究竟它們之間是什么關系&#xff1f;并列&#xff1f;交叉&#xff1f; 可能從廣義上來說它們都可以用來表示安全security這樣一個籠統的概念。 但如果從狹義上理解&#xff0c;它們應該是有區別的&#xff0c;區別在哪呢&…

力扣hot100題解(python版36-40題)

36、二叉樹的中序遍歷 給定一個二叉樹的根節點 root &#xff0c;返回 它的 *中序 遍歷* 。 示例 1&#xff1a; 輸入&#xff1a;root [1,null,2,3] 輸出&#xff1a;[1,3,2]示例 2&#xff1a; 輸入&#xff1a;root [] 輸出&#xff1a;[]示例 3&#xff1a; 輸入&am…

tcping實用小工具

Tcping實用小工具命令詳解 一、tcping介紹 tcping&#xff1a;tcping命令基于tcp協議監控&#xff0c;可以從較低級別的協議獲得簡單的&#xff0c;可能不可靠的數據報服務。 原則上&#xff0c;TCP應該能夠在從容硬線連接到分組交換或電路交換網絡的各種通信系統之上操作。 …

【機器學習基礎】層次聚類-BIRCH聚類

&#x1f680;個人主頁&#xff1a;為夢而生~ 關注我一起學習吧&#xff01; &#x1f4a1;專欄&#xff1a;機器學習 歡迎訂閱&#xff01;相對完整的機器學習基礎教學&#xff01; ?特別提醒&#xff1a;針對機器學習&#xff0c;特別開始專欄&#xff1a;機器學習python實戰…

企業微信私有部署:實現高效溝通與信息安全

隨著移動互聯網的快速發展&#xff0c;企業微信作為一種高效、便捷的通訊工具&#xff0c;已經成為了眾多企業的首選。然而&#xff0c;對于一些對信息安全有特殊要求的大型企業而言&#xff0c;使用公有版企業微信并不能滿足其安全需求。因此&#xff0c;企業微信私有部署應運…

matplotlib.animation 3d姿態動畫

目錄 演示效果&#xff1a; 演示代碼&#xff1a; 保存為gif 演示效果&#xff1a; 演示代碼&#xff1a; import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D from matplotlib.animation import FuncAnimation# 定義人體關鍵點…