精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

《前端算法實戰》使用解釋器模式實現Xpath路徑的算法

開發 前端
對于一種語言,我們給出其文法表示形式(一種語言中的語法描述工具,用來定義語言的規則),并定義一種解釋器,通過這種解釋器來解釋語言中定義的句子。

前端領域里基于javascript的設計模式和算法有很多,在很多復雜應用中也扮演著很重要的角色,接下來就介紹一下javascript設計模式中的解釋器模式,并用它來實現一個獲取元素Xpath路徑的算法。??

正文

1、解釋器模式

對于一種語言,我們給出其文法表示形式(一種語言中的語法描述工具,用來定義語言的規則),并定義一種解釋器,通過這種解釋器來解釋語言中定義的句子。

 定義聽起來可能比較抽象,舉個例子比如我們常見的網站多語言,要實現多語言我們首先要預定語言的類型,提前設計不同語言的語料庫,然后我們會根據配置和統一的變量規則來映射到不同語言。

2、元素的Xpath路徑

XPath 用于在 XML 文檔中通過元素和屬性進行導航。雖然XPath 是用來查找XML節點,但同樣可以用來查找HTML文檔中的節點,因為HTML和XML結構類似。這里我們只考慮html,即元素在html頁面中所處的路徑。

那么如何快速獲取元素的Xpath路徑呢?其實也很簡單,我們打開谷歌調試工具:

圖片

選中Copy XPath即可復制元素的Xpath路徑。格式可能長這樣:

//*[@id="juejin"]/div[2]/main/div/div[1]/article/div[1]

獲取元素Xpath路徑的應用場景很多,比如我們經常使用的python爬蟲,利用爬蟲框架可以通過Xpath路徑很方便額控制頁面中的某個dom節點,進而獲取想要的數據和元素;又比如我們通過發送元素的Xpath路徑給后端,后端可以統計某一功能的使用情況和交互數據;又比如分析用戶在網站中瀏覽的熱力分布圖,路徑畫像等等。

3、js實現獲取元素的Xpath路徑

在實現之前,首先我們分析一下Xpath路徑的結構,比如我們有一個頁面,元素span的結構如下:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<div>
<span>我是徐小夕</span>
</div>
</body>
</html>

那么我們的Xpath路徑可能長這樣:

HTML/BODY|HEAD/DIV/SPAN

 從上面可以看出,我們的最右邊一個元素都是目標元素,而最左邊第一個元素都是最外層容器。要完成這個過程首先我們要通過元素的parentNode來獲取當前元素的父元素,直到找到最頂層位置。但我們還需要注意的一點是,每找到上一層我們還要遍歷該元素前面的兄弟元素previousSibling,如果這個兄弟元素名字和它后面的元素名字相同,則在元素名上+1.

 第一步我們先實現一個遍歷同級兄弟元素的方法getSameLevelName:

// 獲取兄弟元素名稱
function getSameLevelName(node){
// 如果存在兄弟元素
if(node.previousSibling) {
let name = '', // 返回的兄弟元素名稱字符串
count = 1, // 緊鄰兄弟元素中相同名稱元素個數
nodeName = node.nodeName,
sibling = node.previousSibling;
while(sibling){
if(sibling.nodeType == 1 && sibling.nodeType === node.nodeType && sibling.nodeName){
if(nodeName == sibling.nodeName){
name += ++count;
}else {
// 重制相同緊鄰節點名稱節點個數
count = 1;
// 追加新的節點名稱
name += '|' + sibling.nodeName.toUpperCase()
}
}
sibling = sibling.previousSibling;
}
return name
}else {
// 不存在兄弟元素返回''
return ''
}
}

第二步,遍歷文檔樹。

// XPath解釋器
let Interpreter = (function(){
return function(node, wrap){
// 路徑數組
let path = [],
// 如果不存在容器節點,默認為document
wrap = wrap || document;
// 如果當前節點等于容器節點
if(node === wrap) {
if(wrap.nodeType == 1) {
path.push(wrap.nodeName.toUpperCase())
}
return path
}
// 如果當前節點的父節點不等于容器節點
if(node.parentNode !== wrap){
// 對當前節點的父節點執行遍歷操作
path = arguments.callee(node.parentNode, wrap)
}
// 如果當前節點的父元素節點與容器節點相同
else {
wrap.nodeType == 1 && path.push(wrap.nodeName.toUpperCase())
}
// 獲取元素的兄弟元素的名稱統計
let siblingsNames = getSameLevelName(node)
if(node.nodeType == 1){
path.push(node.nodeName.toUpperCase() + sublingsNames)
}
// 返回最終的路徑數組結果
return path
}
})()

有了這兩個方法,我們就可以輕松獲取元素的XPath路徑啦,比如:

let path = Interpreter(document.querySelector('span'))
console.log(path.join('/'))

這樣會返回開篇的一樣的數據結構了.如:HTML/BODY|HEAD/DIV/SPAN。

本文轉載自微信公眾號「趣談前端」,可以通過以下二維碼關注。轉載本文請聯系趣談前端公眾號。

責任編輯:姜華 來源: 趣談前端
相關推薦

2021-10-30 20:49:24

算法 Xpath路徑

2024-06-05 09:41:41

2014-11-11 15:46:54

MapReduce算法

2020-11-09 08:20:33

解釋器模式

2023-05-15 08:51:46

解釋器模式定義

2013-04-23 09:31:52

SQL Server

2021-07-07 10:31:19

對象池模式解釋器模式設計模式

2020-12-22 08:56:51

JavaScript數據結構前端

2010-04-21 08:38:18

解釋器模式PHP設計模式

2022-01-19 08:21:12

設計裝飾器模式

2017-01-05 15:13:03

Java數組算法解釋

2020-10-13 14:27:11

算法可視化路線

2017-05-26 11:00:38

Python算法

2025-08-12 09:11:25

2020-09-16 12:23:37

TypeScript

2023-04-11 08:00:00

PythonOtsu閾值算法圖像背景分割

2023-08-01 07:24:05

2022-04-15 08:30:00

Lombok@Builde構建器

2023-04-11 08:54:57

字符串匹配算法

2025-06-30 04:23:00

點贊
收藏

51CTO技術棧公眾號

欧日韩不卡视频| 午夜啪啪免费视频| 日韩视频免费观看高清| 久久a爱视频| 性欧美videoshd高清| 欧美日韩国产一区精品一区| 日韩一卡二卡三卡国产欧美| 红桃一区二区三区| 国产精品福利电影| 成人直播大秀| 欧美人与z0zoxxxx视频| 永久免费看av| 天天插天天干天天操| 老司机亚洲精品| 久久偷看各类女兵18女厕嘘嘘| 免费国偷自产拍精品视频| 大黄网站在线观看| 国产人伦精品一区二区| 91精品视频播放| 国产精品suv一区二区69| 亚洲区小说区图片区qvod| 欧美系列一区二区| 热久久最新地址| 青青青草原在线| 免费一级片91| 欧美极品xxxx| 欧美激情视频二区| 一区二区三区国产好| 欧美性xxxxx极品娇小| 一区二区视频在线观看| 性一交一乱一伧老太| 老司机午夜精品视频在线观看| www.久久撸.com| 欧美下载看逼逼| 精品www久久久久奶水| av色图一区| 9i在线看片成人免费| 国产精品一区二区3区| 国产一级片免费| 99国产精品免费视频观看| 亚洲电影免费观看高清| 欧美三级午夜理伦三级富婆| 成年女人在线看片| 亚洲欧美偷拍卡通变态| 涩涩日韩在线| 亚洲av无码乱码国产精品| 麻豆精品久久精品色综合| 性日韩欧美在线视频| 国产在线一卡二卡| 成人精品中文字幕| 亚洲精品不卡在线| 一级黄色大片免费看| 黄色日韩网站| 欧美午夜激情在线| 成人性免费视频| 午夜av在线免费观看| 国产精品国模大尺度视频| 日本成人三级| aaa级黄色片| 亚洲少妇一区| 国内免费精品永久在线视频| 亚洲熟女www一区二区三区| sdde在线播放一区二区| 亚洲欧美在线一区| 鲁大师私人影院在线观看| 国产精品自在| 91精品国产一区二区| 伊人色在线视频| 日本免费成人| 3atv在线一区二区三区| 国产又黄又猛的视频| 久久亚洲精品人成综合网| 欧洲生活片亚洲生活在线观看| 国产av无码专区亚洲精品| 涩涩涩在线视频| 午夜久久福利影院| 成人免费观看cn| 国产不卡人人| 精品国产1区2区| 国产网站免费在线观看| 都市激情亚洲一区| 欧美性高潮在线| 欧美无砖专区免费| 国产高清视频色在线www| 狠狠躁夜夜躁人人躁婷婷91| 美女av免费在线观看| 色在线视频观看| 在线视频国内自拍亚洲视频| 黄色aaa级片| 亚洲精品第一| 日韩欧美一级二级| 艳妇乳肉亭妇荡乳av| 婷婷综合一区| 中文字幕欧美专区| 午夜激情福利网| 亚洲午夜黄色| 茄子视频成人在线| 免费一级a毛片| 国产精品中文字幕欧美| 精品一区久久久| 成人精品一区二区三区校园激情| 国产精品国产a| 中文字幕第50页| heyzo一区| 欧美色道久久88综合亚洲精品| 91看片就是不一样| 亚洲午夜国产成人| 亚洲国产精品va在看黑人| 欧美熟妇精品黑人巨大一二三区| 欧美日韩性在线观看| 精品国产欧美一区二区三区成人| 欧美成人三级在线观看| 亚洲三级观看| 国产激情视频一区| 精品欧美在线观看| www.亚洲国产| 中文字幕第50页| 欧美男人天堂| 91精品国产91久久久久久最新毛片| 久久久老熟女一区二区三区91| 国产精品一在线观看| 久久夜色精品国产| 毛片毛片女人毛片毛片| 久久99精品网久久| 精品在线视频一区二区| 三区四区在线视频| 欧美午夜精品久久久久久人妖 | 欧美黑吊大战白妞| 久久久噜噜噜| 91成人理论电影| 精品资源在线看| 国产精品国产三级国产普通话99 | 中文字幕日韩一区| 动漫av网站免费观看| 99国内精品久久久久| 亚洲片av在线| 日韩毛片在线视频| 国产精品亚洲一区二区三区在线| 欧美日韩一区二区三区在线视频| 天堂av中文在线| 欧美日韩一区二区三区在线免费观看 | 欧亚精品一区| 欧美夫妻性生活视频| 亚洲天堂视频在线播放| 99视频有精品| 中文字幕无码精品亚洲资源网久久| 日本免费在线一区| 一本色道久久88综合亚洲精品ⅰ| 日本少妇bbwbbw精品| 乱一区二区av| 午夜视频久久久| 亚洲深夜视频| 亚洲第一色中文字幕| 老湿机69福利| 国产综合色在线| 亚欧精品在线| 日日夜夜天天综合| 亚洲免费电影一区| 波多野结衣视频网站| k8久久久一区二区三区| 亚洲理论电影在线观看| 日韩一区网站| 久久综合久久88| 国产日韩在线观看一区| 久久久av毛片精品| 国产 福利 在线| 久久99影视| 日韩美女主播视频| 国产青青草在线| 色呦呦网站一区| av黄色免费网站| 久久久久99| 国产一区喷水| 涩涩视频在线播放| 亚洲精品一区二区网址| 青青视频在线免费观看| 国产日韩v精品一区二区| 日韩手机在线观看视频| 日韩欧美中字| 国产精品视频专区| 中文字幕伦理免费在线视频| 欧美一区二区福利在线| 国产一级大片在线观看| 成人动漫一区二区| 欧美爱爱视频免费看| 要久久电视剧全集免费| 国产精品吊钟奶在线| 成人精品一区二区| 日韩欧美卡一卡二| 日韩成人av毛片| 久久精品人人做| 黄色aaa级片| 欧美在线二区| 国产日韩二区| 国产韩日精品| 欧美成人高清视频| 亚洲色图另类小说| 在线观看精品一区| 破处女黄色一级片| 99久久99久久精品免费看蜜桃| 亚洲乱码中文字幕久久孕妇黑人| 欧美少妇xxxx| 91在线短视频| 韩国成人动漫| 久久精品一区中文字幕| 精品人妻无码一区二区色欲产成人 | eeuss影院一区二区三区| 久久婷婷国产精品| 禁断一区二区三区在线| 国产精品成熟老女人| caopon在线免费视频| 亚洲国产精久久久久久久| www.av88| 一级女性全黄久久生活片免费| 国产麻豆xxxvideo实拍| 麻豆91在线播放免费| 欧美精品自拍视频| 99久久影视| 久久99国产精品| 香蕉久久一区| 68精品国产免费久久久久久婷婷| 日本综合在线| 日韩电影大片中文字幕| 国产免费一区二区三区最新不卡 | 久久激情五月婷婷| 男人插女人视频在线观看| 成人一区二区| 美日韩免费视频| 奇米一区二区| 国产精品人成电影在线观看| 2021中文字幕在线| 精品国产一区二区三区在线观看 | 午夜精品久久久久影视| 97在线观看免费视频| 97久久精品人人爽人人爽蜜臀| 天天综合网久久| 久久高清一区| 一卡二卡三卡视频| 91精品国产成人观看| 欧美亚洲另类久久综合| 精品国产午夜肉伦伦影院| 亚洲影院色无极综合| 成人亚洲综合| 国产大片精品免费永久看nba| heyzo高清在线| 欧美成人免费在线视频| 欧美性videos| 搡老女人一区二区三区视频tv| 人人九九精品| 精品国产乱码久久久久久久| 男人天堂视频网| 日韩欧美久久| 亚洲精品影视在线观看| wwwxxxx国产| 欧美一区二区三区在线观看| 中文字幕在线播放av| 国产综合网站| 亚洲国产欧美日韩| 国产欧美一区二区三区精品观看| 国产精品国产精品国产专区不卡| 国产一区一区| 国产成人精品免高潮费视频| 美女的胸无遮挡在线观看| 久久久久久久色| 人人超在线公开视频| 欧美成人午夜剧场免费观看| 久cao在线| 美乳少妇欧美精品| 日本性爱视频在线观看| 欧美人与性动交| 久久国产精品黑丝| 久久久久久久久久久免费| 538在线观看| 777午夜精品福利在线观看| 理论片午夜视频在线观看| 91av视频在线播放| www.成人爱| 国产精品福利无圣光在线一区| 欧美va在线观看| 国产美女主播一区| 久久久久久爱| 鬼打鬼之黄金道士1992林正英| 国产精品xxx在线观看| 精品国产一区二区三区四区精华 | 黄色国产精品| 人人妻人人澡人人爽欧美一区| 天天久久综合| 天堂av在线中文| 中国成人一区| 欧美 丝袜 自拍 制服 另类| 久久青草久久| 日本国产一级片| 国产.精品.日韩.另类.中文.在线.播放| 老司机av网站| 91蜜桃免费观看视频| 免费人成又黄又爽又色| 专区另类欧美日韩| 国产一级在线观看视频| 欧美色欧美亚洲高清在线视频| 亚洲永久精品一区| 日韩欧美卡一卡二| 日韩中文字幕免费在线观看| 亚洲人成在线免费观看| 日本成人网址| 国产69精品99久久久久久宅男| 中文字幕人成乱码在线观看| 国产精品入口尤物| eeuss鲁片一区二区三区| 日本一区二区在线| 亚洲欧美综合国产精品一区| 午夜肉伦伦影院| 激情av综合网| 欧美特级黄色录像| 亚洲女爱视频在线| 亚洲精品1区2区3区| 717成人午夜免费福利电影| 五月天久久久久久| 久久精品成人动漫| 色在线免费观看| 91久久精品国产91久久性色tv| 在线精品免费视| 亚洲欧美日韩久久| 国产成人愉拍精品久久| 这里只有精品免费| 色视频在线看| 欧美日韩福利电影| 成人啊v在线| 99久久国产免费免费| 国产欧美日韩| 丁香花在线影院观看在线播放 | 久久视频在线看| 最新日韩精品| 国产乱子伦精品| 91成人免费| 手机版av在线| 久久精品亚洲国产奇米99| 国产性70yerg老太| 91精品欧美福利在线观看 | 日韩电影第一页| 欧美人与牲禽动交com| 成人网在线观看| 欧美午夜精彩| 成人一级片网站| eeuss国产一区二区三区| 久久久www成人免费毛片| 在线免费观看成人短视频| 黄色美女一级片| 国模视频一区二区| 91蝌蚪精品视频| 色哟哟免费网站| 国产美女视频一区| 久久人妻无码aⅴ毛片a片app | 免费在线观看的av网站| 成人午夜激情片| 久久精品国产亚洲AV无码麻豆| 欧美一区二区三区在线观看| 黄色网页在线看| 国产一区二区在线播放| 91视频综合| 五月婷婷之婷婷| 欧美国产精品v| 中文字幕免费视频观看| 中文欧美日本在线资源| 97欧美成人| 亚洲不卡1区| 美女看a上一区| 国产精品理论在线| 9191成人精品久久| av网址在线免费观看| 国产日韩亚洲欧美| 中文字幕一区二区av| 国产又粗又猛大又黄又爽| 亚洲一区二区在线观看视频 | 欧美精品一区二区三区在线看午夜| 国产精品亚洲欧美| 中文精品在线观看| 欧美性色视频在线| av电影在线观看| 国产色视频一区| 国产一区清纯| 99re久久精品国产| 日本乱人伦一区| 一区二区三区视频在线观看视频| 91视频-88av| 精品成人免费| 亚洲最大成人网站| 欧美视频在线一区| 波多一区二区| 日韩欧美亚洲日产国| 国产.精品.日韩.另类.中文.在线.播放| 国产性猛交╳xxx乱大交| 操日韩av在线电影| 一区二区三区四区在线看| 亚洲图色中文字幕| 欧美视频国产精品| 成人欧美在线| 日韩免费三级| 成人国产精品免费观看| 一区两区小视频| 欧美一区二区三区精品电影|