<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Selenium 最強反反爬方案來了!

          共 2515字,需瀏覽 6分鐘

           ·

          2020-12-04 11:32

          在前天的公眾號文章《別去送死了。Selenium 與 Puppeteer 能被網(wǎng)站探測的幾十個特征》中,我們提到目前網(wǎng)上的反檢測方法幾乎都是掩耳盜鈴,因為模擬瀏覽器有幾十個特征可以被檢測,僅僅隱藏 webdriver 這一個值是沒有任何意義的。

          今天我們就來說說應該如何正確解決這個問題

          我們首先給出解決方案,然后再說明這個解決方案,我是通過什么方式找到的

          解決這個問題的關鍵,就是一個 js 文件,叫做stealth.min.js,稍后我會說明如何生成這個文件

          我們需要設定,讓 Selenium 或者 Pyppeteer 在打開任何頁面之前,先運行這個 Js 文件

          這里,我以 Selenium 為例來說明如何操作,我們編寫如下代碼:

          import?time
          from?selenium.webdriver?import?Chrome
          from?selenium.webdriver.chrome.options?import?Options

          chrome_options?=?Options()
          chrome_options.add_argument("--headless")
          chrome_options.add_argument('user-agent=Mozilla/5.0?(Macintosh;?Intel?Mac?OS?X?10_15_7)?AppleWebKit/537.36?(KHTML,?like?Gecko)?Chrome/86.0.4240.198?Safari/537.36')

          driver?=?Chrome('./chromedriver',?options=chrome_options)

          with?open('/Users/kingname/test_pyppeteer/stealth.min.js')?as?f:
          ????js?=?f.read()

          driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument",?{
          ??"source":?js
          })
          driver.get('https://bot.sannysoft.com/')
          time.sleep(5)
          driver.save_screenshot('walkaround.png')

          #?你可以保存源代碼為?html?再雙擊打開,查看完整結果
          source?=?driver.page_source
          with?open('result.html',?'w')?as?f:
          ????f.write(source)

          運行截圖如下:

          可以看到,雖然我使用的是無頭模式,但是能夠被識別的特征都被成功隱藏。大家還可以雙擊打開保存下來的 html 文件,看看是不是結果跟普通瀏覽器幾乎一樣。

          如果你使用的是 Pyppeteer,那么可以根據(jù)我上面文章中給出的方法,試著加載一下這個 js 文件,看看是不是也能成功隱藏特征。

          那么,這個stealth.min.js文件是怎么來的呢?這就要說到puppeteer了。我們知道,Python 版本的pyppeteer已經很久沒有人維護了,但是Node.js 版本的 puppeteer持續(xù)有人維護,并且在持續(xù)更新,生態(tài)也越來越好。

          有開發(fā)者給 puppeteer 寫了一套插件,叫做puppeteer-extra。其中,就有一個插件叫做puppeteer-extra-plugin-stealth[1]。這個東西,就來專門用來讓 puppeteer 隱藏模擬瀏覽器的指紋特征。

          這個東西是專門給 puppeteer 用的。所以,如果你使用的是 puppeteer,那么你可以根據(jù)它的 Readme說明,直接使用。

          那么,我們用 Python 的人怎么辦呢?實際上也有辦法。就是把其中的隱藏特征的腳本提取出來,做成一個單獨的 js 文件。然后讓 Selenium 或者 Pyppeteer 在打開任意網(wǎng)頁之前,先運行一下這個 js 文件里面的內容。

          puppeteer-extra-plugin-stealth的作者還寫了另外一個工具,叫做extract-stealth-evasions[2]。這個東西就是用來生成stealth.min.js文件的。

          如果你在國外,并且網(wǎng)速足夠快的話。那么你根據(jù)它的 Readme,首先安裝 Node.js,然后安裝 Npm,接著運行如下命令:

          npx?extract-stealth-evasions

          就會在你執(zhí)行命令的文件夾下面生成一個stealth.min.js文件。然后你就可以正常使用了。

          如果你在國內,那么執(zhí)行這個命令的過程中,會有一個下載 Chromium 的過程,速度非常慢,雖然只有130MB,但是可能會下載好幾個小時。

          此時,你需要把它的package.jsonindex.js兩個文件保存到本地。然后打開package.json文件,修改其中的dependencies這一項,把里面的puppeteer改成puppeteer-core,如下圖所示:

          然后修改index.js,給.launch()函數(shù)增加一個參數(shù)executablePath,指向你電腦上的 Chrome 瀏覽器,如下圖所示:

          修改完成以后。首先執(zhí)行yarn install安裝依賴包。然后執(zhí)行node index.js運行程序。1秒鐘以后就會生成stealth.min.js了。

          我已經將這個文件上傳到公眾號后臺,回復關鍵字?stealth?即可獲??!

          如果你覺得文章還不錯,請大家?點贊、分享、留言?下,因為這將是我持續(xù)輸出更多優(yōu)質文章的最強動力!



          推薦閱讀


          Python 爬蟲,推薦一款簡單的抓包工具

          帶你用 Python 實現(xiàn)自動化群控(入門篇)

          別去送死了!爬蟲使用 Selenium 與 Puppeteer 能被網(wǎng)站探測的幾十個特征



          瀏覽 79
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  操骚逼黄色网址 | 亚洲国产精品久久久久久 | 大香蕉伊人婷婷 | 久草久热精品视频 | 婷婷黄色 |