新聞中心
這個方法理論上說是萬能的,因為注入的JavaScript能夠獲取當(dāng)前Dom樹,任何接口簽名都無法攔截到自己注入的JavaScript代碼,如下圖所示:

創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比浉河網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式?jīng)负泳W(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋浉河地區(qū)。費用合理售后完善,10多年實體公司更值得信賴。
而Chrome插件訪問自己的服務(wù)器后端是沒有跨域問題的,完全可以讓插件獲取到數(shù)據(jù)以后,發(fā)送給自己的服務(wù)器,這樣就可以把數(shù)據(jù)收入囊中了。
你還可以通過JavaScript自動點擊按鈕,實現(xiàn)自動翻頁。所以你只需要把網(wǎng)頁打開,啟動插件,然后他就能自動刷新,自動獲取數(shù)據(jù)了。
這個方法看起來非常萬能,而且無法被防御……
事實真的是這樣嗎?我寫了一個Demo來做測試。Demo頁面長下面這樣:
當(dāng)我手動點擊點擊我按鈕的時候,會彈出一個框:
現(xiàn)在,我使用JavaScript來選擇這個按鈕,然后點擊它:
為什么網(wǎng)站知道我在用JavaScript點擊了按鈕呢?其實只要我給你看這個頁面的HTML,你就知道了:
Test Event
你這個狗爬蟲
關(guān)鍵的點就是這個event.isTrusted。它是瀏覽器的一個功能,如果這個事件是人通過鼠標點擊的,那么它是true。如果事件是通過JavaScript觸發(fā)的,那么它是false。
關(guān)于這個屬性,你可以查看Event.isTrusted - Web API 接口參考 | MDN[1]。這個例子里面,我用的是Vue來操作頁面,但實際上event是瀏覽器的特性,使用原生JavaScript也可以實現(xiàn):
document.querySelector("button").addEventListener("click", function( event ) {
if (event.isTrusted) {
alert('主人你好,歡迎回家!')
} else {
this.spider = true
}
}, false);
那么如何繞過這個event.isTrusted呢?其實很簡單,你使用Selenium/Puppeteer,天然就能繞過它。
看到這里,大家肯定發(fā)現(xiàn)一個很好笑的問題,Selenium/Puppeteer不能解決的問題,用JavaScript輕松就能解決。但JavaScript解決不了的問題,用Selenium/Puppeteer又完全沒有問題。
這就像是貓吃老鼠,老虎吃貓,大象吃老虎,但是老鼠可以吃大象。寸有所長,必有所短,寸有所短,也可能有所長。
參考文獻
[1] Event.isTrusted - Web API 接口參考 | MDN: https://developer.mozilla.org/zh-CN/docs/Web/API/Event/isTrusted
本文轉(zhuǎn)載自微信公眾號「未聞Code」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系未聞Code公眾號。
分享題目:你以為的萬能爬蟲方法,其實一行代碼就能識別!
URL鏈接:http://www.dlmjj.cn/article/djdjgcc.html


咨詢
建站咨詢
