一日一技:在網頁上如何獲取滑鼠當前指向的元素

2021-02-24 腳本之家

開發爬蟲的同學肯定用過 Chrome 開發者工具自動定位頁面元素對應的 HTML 標籤的功能,如下圖所示:

那麼有沒有同學思考過,這個功能,如果用 JavaScript 怎麼實現呢?

顯然,隨著滑鼠的移動,滑鼠指向的頁面元素是不斷變化的,我們需要知道滑鼠當前指向了哪一個頁面元素。

在 JavaScript 中,有一個函數叫做document.elementFromPoint(x, y),輸入頁面坐標,返回該坐標上的頁面元素。而坐標可以通過滑鼠的事件來獲得。

於是,我們可以寫出如下的 JavaScript 代碼:

 function get_current_element(event){
        var x = event.clientX, y = event.clientY,
        element = document.elementFromPoint(x, y);
        return element
    }

function track_mouse(event){
        var elementMouseIsOver = get_current_element(event)
        console.log('當前滑鼠指向的元素是:', elementMouseIsOver)
    }

window.onmousemove = track_mouse

這樣,當滑鼠移動時,可以實時獲得當前滑鼠指向的元素。

但是,如果你直接使用上面的代碼,那麼你會被列印出來的信息刷屏,因為滑鼠一旦移動就會有數據列印出來。所以我們需要做一個限制,當滑鼠在元素內部移動的時候,不列印數據。track_mouse修改為:

var last_element = null
function track_mouse(event){
        var elementMouseIsOver = get_current_element(event)
        if (elementMouseIsOver === last_element) {
            return
        }
        console.log(elementMouseIsOver)
        last_element = elementMouseIsOver
    }

我們在 Chrome 的控制臺運行看看效果:

這樣直接列印元素可能不太好查看,我們再加個元素邊框的功能。增加兩個函數:

function highlight(element){
    element.style.outline = '#f00 solid 2px'
    }
function remove_hightlight(element){
        element.style.removeProperty('outline')
    }

修改track_mouse代碼為:

function track_mouse(event){
        var elementMouseIsOver = get_current_element(event)
        if (elementMouseIsOver === last_element) {
            return
        }
        if (last_element != null) {
            remove_hightlight(last_element)
        }
        highlight(elementMouseIsOver)
        last_element = elementMouseIsOver
    }

運行效果如下面的動圖所示。

有了這個功能以後,只要我們再稍稍修改一下代碼,就可以實現自動獲取滑鼠指向位置的 XPath 了。

相關焦點

  • 經驗分享:如何複製韓國網頁上的圖片和文字?
    韓國網站的加密技術很強,經常是禁止右鍵,導致我們無法複製網頁上的文字,也無法快速的保存圖片。遇到這種情況怎麼做呢?
  • 子元素 scroll 父元素容器不跟隨滾動 JS 實現
    在網頁中,滾動條的滾動行為也是類似的調調,如果頁面出現多個內嵌滾動條,則行為表現是:子元素滾,子元素滾,子元素滾完父元素滾;父元素滾,父元素滾,父元素滾完容器滾……比方說下面:在妹子臉上滾,先是妹子滾,妹子滾完主頁面滾,對吧~//zxx: 別問為什麼不使用張含韻,因為張妹子照片是橫的,滾動空間小,曉得伐~這是瀏覽器的默認行為
  • 一日一技:在Selenium中如何縮放網頁(不是窗口)
    放大的效果如下圖所示。execute_script來運行:driver.execute_script("document.body.style.zoom='0.5'") #縮小driver.execute_script("document.body.style.zoom='1.7'") #放大大家還可以嘗試一下,是否能夠通過模擬按鍵,發送 Ctrl和加號減號來縮放網頁
  • 幾個超級無聊的網頁,真的很無聊
    就是我在發呆時對著屏幕的這些網頁。。。想選題的時候就會對著電腦屏幕,滑著滑鼠滾輪,一直滑啊!滑啊!因為小狐知道這個網頁劃不到盡頭。在滑動滑鼠滾輪的過程中,能給予小狐部分解壓和靈感!總覺得手動一下才踏實!
  • XPath Helper: 快速高效從網頁中抽取內容
    寫過爬蟲的應該了解,大部分工作其實在對網頁進行解析並提取相關的內容,而 xpath 是定位網頁中內容的一種非常便捷的方法。使用瀏覽器選中相應的元素也能直接複製出 xpath 路徑。但是有一個問題,原生的瀏覽器工具支持更多的是用來定位元素,如果我要實際提取網頁中的內容,需要下載網頁然後通過程式語言來執行相應的
  • 一日一技:讓Tmux完美支持滑鼠,不記憶任何快捷鍵(僅限macOS)
    此時,即時網絡斷開或者直接關閉終端窗口,遠程伺服器上的代碼也不受影響,重新ssh登錄上去以後可以繼續查看。但是,Tmux有一個非常麻煩的地方,就是它的快捷鍵很奇怪,大部分命令都需要 Ctrl+B 一起按,然後鬆開,然後再按另一個鍵。而且默認情況下在Tmux的窗口裡面沒有辦法使用滑鼠滾動屏幕。如果開啟滑鼠模式滾動屏幕,又不能選中並複製。
  • iOS 14教程:Safari瀏覽器如何翻譯網頁?
    藉助新的網頁翻譯功能,Safari 會根據設備的首選語言列表自動檢測書否需要翻譯訪問的網頁內容,以便繼續閱讀。在翻譯時,支持英語、西班牙語、簡體中文、法語、德語等。如何在 iOS 14 中的 Safari 瀏覽器翻譯網頁?
  • 面試官:你可以用純 CSS 判斷滑鼠進入的方向嗎?
    CSS 滑鼠事件首先根據題幹,我們知道這題是需要用到滑鼠操作的,JS 裡我們有各種mouse事件,但同樣的,CSS 我們也有:hover。這題我們需要利用到的選擇器就是:hover了判斷方向判斷方向 的功能便是本題的核心。從題圖上來看,其實已經給了我們方向的指引,就是告訴我們滑鼠要通過四個箭頭的方向進入。
  • 擋風玻璃驚現賭博滑鼠墊 警方提示:這是網絡騙局
    市民陳先生前天上午剛要開車時,發現汽車前擋風玻璃上放著一塊印有賭博網站宣傳標語的滑鼠墊。
  • 2017年網頁設計的趨勢與特點!
    01半扁平化設計過去純粹的扁平化設計幾乎統治了整個網頁設計市場,但今年由於具體化設計的影響,今年的網頁設計會變得更加趨向於立體化
  • 網頁設計:字體怎麼設置才能讓網頁更美觀個性
    但是,如果你不好好設計網頁,只是隨隨便便替換下圖片和文字就發布上線了,那就很難把網站做出自己的個性。網站字體是網站個性的一個重要展現形式,字體獨特的話,也能給訪客留下深刻印象。如何設置一個獨特的字體呢?你可以利用「上線了」sxl.cn建站的「上傳自定義字體」功能實現這個效果。
  • 千呼萬喚:星光秀場網頁版上線!
    QQ飛車星光秀場網頁版上線啦!想要隨時欣賞到賽事大佛、技巧達人、萌妹帥哥帶來的精彩直播嗎?接下來,小編將教大家玩轉網頁版星光秀場!  在進入頁面後,大家可以通過主頁推薦的直播間和導航欄中的「直播」觀看直播。
  • 隱寫術:如何正確保護文章的版權?
    from itertools import cyclesignature = '我是青南'text = '一日一技是一個每天更新的欄目,希望做到在每天幾分鐘讓你獲得提高。'import cyclesignature_bin_list = ['110001000010001',                      '110011000101111',                      '1001011101010010',                      '101001101010111']text = '一日一技是一個每天更新的欄目
  • 小tip: 如何讓contenteditable元素只能輸入純文本
    實際上,控制contenteditable元素只能輸入純文本是有體驗比較好的方法的。二、與contenteditable屬性無關的CSS控制法一個div元素,要讓其可編輯,也就是可讀寫,contenteditable屬性是最常用方法,做前端的基本上都知道。但是,知道CSS中有屬性可以讓普通元素可讀寫的的同學怕是就少多了。
  • 2017年網頁抓取:先進的Headless Chrome技巧
    這篇文章,將告訴你如何快速入門Headless Chrome生態系統,並展示從已經抓取數百萬網頁中學到的經驗。文章摘要:1. 有很多庫可以控制Chrome,可以根據自己的喜歡選擇。2. 使用Headless Chrome進行網頁抓取非常簡單,掌握下面的技巧之後更是如此。3. Headless瀏覽器訪客可以被檢測到,但沒人這麼做。
  • 火車退票+在12306上選擇上中下臥鋪,方法很絕!
    就是說你的退票手續費是1.76%,比5%還少!!!☆怎麼選擇上中下臥鋪簡單四步搞定!前提:使用除IE以外的任意瀏覽器第一步:進入預定界面,如下圖:第二步:滑鼠放在硬臥(或軟臥)上,單擊滑鼠右鍵,在下拉菜單中選擇審查元素,然後會出現如下界面:
  • 潮來潮趣 偷買的這款滑鼠墊被媽媽發現了,你是猴子請來的?
    相信不少網友都知道「沒有極限」的日本人設計出一款感覺極度色情的「胸部滑滑鼠墊」,利用滑鼠墊需要撐住手的突起靠墊部分,製造出胸部的模樣。引起許多網友搶購各種動漫人物的「胸部滑鼠墊」,許多網友買來拆箱之後,第一秒就是拍打看看試手感!▼另外一款滑鼠墊,光是把手放上去就讓你感覺到情色了。
  • ODiN:科幻片裡的雷射投影滑鼠真的來啦!
    如何才能避免這些問題的出現呢,除了應該在使用數碼產品時保持正確的姿勢、注意休息、不能過度勞累之外,還可以選擇一些數碼周邊配件,從而改變傳統操作習慣,希望可以杜絕問題出現。日前一款名為ODiN的雷射投影滑鼠亮相正在中國臺北舉行的《臺北國際計算機展》,早前這款ODiN也曾經登陸過眾籌網站Kickstarter進行資金籌集,計劃籌集資金5萬美元,眾籌網站上的早鳥價格為49美元(約合人民幣304