博客 / 詳情

返回

小技巧:如何突破某些網站只能登陸後才能進行文字拷貝的限制

我寫公眾號文章時,經常需要從一些網站的文章上查閲一些資料。比如我想把這個網頁上的一個標題“SAP Fiori 2.0用户體驗設計概念獲紅點大獎”進行拷貝。

然而當我按了鍵盤上的拷貝快捷鍵Ctrl C後,卻收到這個提示,告訴我只有登陸後才能夠進行復制操作。

可是為了登陸我得先註冊,有點麻煩。如果趕時間的話,可以使用這篇文章的小技巧,達到不用先註冊再登陸,也能任意拷貝網頁文字的效果。

下面是詳細步驟。

1. 和往常一樣打開您想複製文字的網頁,先不忙按Ctrl C。按F12打開Chrome瀏覽器的開發者工具。

切換到Network標籤頁。為了避免干擾,先點Clear按鈕把Network標籤頁下的網絡請求全部清除掉。最後如下圖所示:

2. 和往常一樣,點擊複製的快捷鍵Ctrl C。此時看到了意料之中的登陸框。然而我們關心的是:到底是哪一行JavaScript代碼觸發了這個登陸框?

從Chrome開發者工具的Network標籤頁裏,我們找到了答案。

首先在Network標籤頁裏我們找到了登錄對話框的實現文件artlogin.html。接着,把鼠標放到下圖標註了“2”的VN1134:1,Chrome開發者工具就會自動在一個懸浮窗口裏顯示出到底是哪一行JavaScript產生了artlogin.html的加載。答案就是標註了“3”的幾個函數。這幾個函數是以調用棧的方式顯示的。

最底層的調用棧裏的函數是DisplayPageinfo.document.body.oncopy。做過前端開發的朋友們只要看到這個oncopy,心中就有數了:這就是該網站處理用户按了Ctrl+C進行文字拷貝的處理函數,oncopy又會調用copyArt函數。

現在我們就進入copyArt函數一探究竟。果然,下圖第3961行試圖讀取用户對於當前網站的cookie信息。如果cookie為空,那麼進入第3962行if語句的第一個分支:第3970行的$("#LayerLogin").load("/artlogin.html")負責的正是登陸對話框的加載。

講到這裏,解決方案已經很清楚了:在執行第3962行代碼判斷網站cookie之前,我們隨便給變量CurUserNameCookiescgcg賦上一些內容,讓它的值不為空,確保進入IF的ELSE分支就行了。

如下圖,在Chrome開發者工具的Console標籤頁裏給Cookie變量賦值:

於是進入了我們期望的ELSE分支,此時,我在網頁上選中的文本“SAP Fiori 2.0用户體驗設計概念獲紅點大獎”已經成功寫入JavaScript變量selhtml中,請大家看代碼第3986行。

直接點Chrome開發者工具的"Continue"按鈕結束調試,打開記事本按粘貼的快捷鍵Ctrl+V,成功了。

要獲取更多Jerry的原創技術文章,請關注公眾號"汪子熙"或者掃描下面二維碼:

user avatar dengjijie 頭像
1 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.