乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

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

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

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

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

      未聞Code

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

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

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

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

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

      圖片

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

      你還可以通過JavaScript自動點擊按鈕,實現自動翻頁。所以你只需要把網頁打開,啟動插件,然后他就能自動刷新,自動獲取數據了。

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

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

      圖片

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

      圖片

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

      圖片

      為什么網站知道我在用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也可以實現:

        document.querySelector("button").addEventListener("click"function( event {
          if (event.isTrusted) {
              alert('主人你好,歡迎回家!')
           } else {
              this.spider = true
           }
        }, false);

      那么如何繞過這個event.isTrusted呢?其實很簡單,你使用Selenium/Puppeteer,天然就能繞過它。

      看到這里,大家肯定發(fā)現一個很好笑的問題,Selenium/Puppeteer不能解決的問題,用JavaScript輕松就能解決。但JavaScript解決不了的問題,用Selenium/Puppeteer又完全沒有問題。

      這就像是貓吃老鼠,老虎吃貓,大象吃老虎,但是老鼠可以吃大象。寸有所長,必有所短,寸有所短,也可能有所長。

      參考文獻

      [1] Event.isTrusted - Web API 接口參考 | MDN: https://developer.mozilla.org/zh-CN/docs/Web/API/Event/isTrusted

      圖片

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

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多