如何在魔鏡歌詞網複製歌詞

Chen Li-Chi (陳立其)
3 min readJun 10, 2019

--

我發現在我的 Mac 上面的 Chrome 無法複製魔鏡歌詞網的內容,原本以為他是鎖起來不想讓人複製,可是我試著用手機打開,發現居然可以用手機複製。這也太奇怪了吧,於是就檢查看看有沒有什麼方便的方法可以用電腦複製。

我覺得這可能是歌詞網故意的行為,不想要讓別人太容易複製他們家的內容。可是問題是這妨礙到的是一般的使用者,這些使用者的複製行為,理論上不影響歌詞網的獲利。再說,真的要拷貝這種歌詞網來獲利的話,用爬蟲弄不是比較快嗎,才不會一個一個用滑鼠複製貼上呢。因此我認爲這只是單方面傷害到喜歡歌詞網的用戶而已。

這篇文章是教學用途,如果魔鏡歌詞網盈利 (歌詞網怎麼盈利我也很好奇) 受到影響想請我下架這篇文章也行,我想喝清心福全。

Photo by Lee Campbell on Unsplash

一個複製歌詞的方法

其實我也不知道他們是怎麼做到不讓人選取的的 (我只看到有些詭異的 event listener 被加在 <body> ,例如 onCopy),如果有人知道細節歡迎留言討論。但是根據觀察,可以知道這東西不是圖片,也就是說文字還在,依然有機會可以不透過 OCR 把歌詞抓下來的。方法不唯一,我這裡使用的是 innerText 這個 property 來完成。

  • 對著歌詞點下右鍵
  • 按下 inspect 或檢查
  • 在跳出來的視窗的最下方,在 console 裡面打入 $0.innerText ,然後按下 enter
  • 歌詞就會在 console 裡面出現,你就可以在 console 裡面複製了

實際上就像是下面這張圖這樣操作。

copy from Mogim

原理

$0 的可以利用 JavaScript 讀出目前滑鼠選到的物件,在這裡指的是 <dl> 這個在網頁上裝歌詞的容器,一旦選到後就可以使用 .innerText 把此容器內的文字印出。

事實上你也可以參考上次在兩倍速任意影片中所提到的選取法,也就是先使用 DevTool 左上角的箭頭選取工具選好,接著使用$0.innerText

目前在這個歌詞網上,我注意到歌詞的部分是整個網頁中的 <dl> 元素中排第四個的 <dl> ,所以你可以使用下列指令在 console 上直接印出歌詞。唯一的風險是,我們不能保證網頁結構在未來不會改變,歌詞的 <dl> 元素永遠排在第四個。

$$('dl')[4].innerText

--

--