久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

你以為的萬能爬蟲方法,,其實一行代碼就能識別,!

 風聲之家 2022-06-15 發(fā)布于江蘇

Python綠色通道 2022-06-09 08:30 發(fā)表于廣東

以下文章來源于未聞Code ,作者kingname

未聞Code

博主喜歡Python和爬蟲,,已經(jīng)出了兩本書,。這里是他靈感的發(fā)源地。關注這個公眾號,,你的生產(chǎn)效率在三天內(nèi)就會得到提高,。P.S.: 這個公眾號日更。

↑ 關注 + 星標 ,,每天學Python新技能

后臺回復【大禮包】送你Python自學大禮包

Selenium/Puppeteer/Pyppeteer有很多特征可以被網(wǎng)站檢測到,。于是,有些同學想到了另一個方法,,就是自己寫一個Chrome插件,,在網(wǎng)站打開的時候,注入到頁面中,,然后通過這個注入的JavaScript代碼來操作頁面,,獲取數(shù)據(jù)。

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

圖片

而Chrome插件訪問自己的服務器后端是沒有跨域問題的,,完全可以讓插件獲取到數(shù)據(jù)以后,,發(fā)送給自己的服務器,這樣就可以把數(shù)據(jù)收入囊中了,。

你還可以通過JavaScript自動點擊按鈕,,實現(xiàn)自動翻頁。所以你只需要把網(wǎng)頁打開,,啟動插件,,然后他就能自動刷新,自動獲取數(shù)據(jù)了,。

這個方法看起來非常萬能,,而且無法被防御……

事實真的是這樣嗎?我寫了一個Demo來做測試,。Demo頁面長下面這樣:

圖片

當我手動點擊點擊我按鈕的時候,,會彈出一個框:

圖片

現(xiàn)在,我使用JavaScript來選擇這個按鈕,,然后點擊它:

圖片

為什么網(wǎng)站知道我在用JavaScript點擊了按鈕呢,?其實只要我給你看這個頁面的HTML,你就知道了:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Test Event</title>
    </head>
    <body>
        <div id="app">
            <template v-if="spider">
                <div>你這個狗爬蟲</div>
            </template>
            <template v-else>
                <button v-on:click="check">點擊我</button>
            </template>
          </div>
        <script src="./vue.min.js"></script>
        <script>
            var example2 = new Vue({
            el'#app',
            data: {
                spiderfalse
            },
            methods: {
                checkfunction (event{
                    if (event.isTrusted) {
                        alert('主人你好,歡迎回家,!')
                    } else {
                        this.spider = true
                    }
                }
            }
            })
        </script>

    </body>
</html>

關鍵的點就是這個event.isTrusted,。它是瀏覽器的一個功能,如果這個事件是人通過鼠標點擊的,,那么它是true。如果事件是通過JavaScript觸發(fā)的,,那么它是false,。

關于這個屬性,你可以查看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

圖片

    本站是提供個人知識管理的網(wǎng)絡存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導購買等信息,,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報,。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多