亚洲国产精品乱码一区二区,美景房屋2免费观看,哎呀哎呀在线观看视频高清国语,从镜子里看我是怎么C哭你

Article / 文章中心

最全總結 | 聊聊 Selenium 隱藏瀏覽器指紋特征的幾種方式!

發(fā)布時間:2023-07-03 點擊數(shù):2766

我們使用 Selenium 對網(wǎng)頁進行爬蟲時,如果不做任何處理直接進行爬取,會導致很多特征是暴露的

對一些做了反爬的網(wǎng)站,做了特征檢測,用來阻止一些惡意爬蟲

本篇文章將介紹幾種常用的隱藏瀏覽器指紋特征的方式

1. 直接爬取

目標對象:

aHR0cHM6Ly9xaWthbi5jcXZpcC5jb20vUWlrYW4vU2VhcmNoL0FkdmFuY2U=

我們使用 Selenium 直接爬取目標頁面

# selenium 直接爬取

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
import time

chrome_options = Options()

s = Service(r"chromedriver.exe路徑")

driver = webdriver.Chrome(service=s, options=chrome_options)

driver.get(url='URL')

driver.save_screenshot('result.png')

# 保存
source = driver.page_source
with open('result.html''w'as f:
    f.write(source)

time.sleep(200)

頁面明顯做了反爬,網(wǎng)頁返回直接返回空白內容

2. CDP

CDP 全稱為 Chrome Devtools-Protocol

https://chromedevtools.github.io/devtools-protocol/

通過執(zhí)行 CDP 命令,可以在網(wǎng)頁加載前運行一段代碼,進而改變?yōu)g覽器的指紋特征

比如,window.navigator.webdriver 在 Selenium 直接打開網(wǎng)頁時返回結果為 true;而手動打開網(wǎng)頁時,該對象值為 undefined

因此,我們可以利用 CDP 命令修改該對象的值,達到隱藏指紋特征的目的

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
import time

chrome_options = Options()

s = Service(r"chromedriver.exe路徑")

driver = webdriver.Chrome(service=s, options=chrome_options)

# 執(zhí)行cdp命令,修改(window.navigator.webdriver )對象的值
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
    "source""""
            Object.defineProperty(navigator, 'webdriver', {
              get: () => undefined
            })
            """

})

driver.get(url='URL')

driver.save_screenshot('result.png')

# 保存
source = driver.page_source
with open('result.html''w', encoding='utf-8'as f:
    f.write(source)

time.sleep(200)

需要指出的是,瀏覽器的指紋特征很多,使用該方法存在一些局限性

3. stealth.min.js

該文件包含了常用的瀏覽器特征,我們只需要讀取該文件,然后執(zhí)行 CDP 命令即可

下載地址:

https://github.com/berstend/puppeteer-extra/tree/stealth-js
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
import time

chrome_options = Options()

# 無頭模式
# chrome_options.add_argument("--headless")

# 添加請求頭
chrome_options.add_argument(
    'user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36')

s = Service(r"chromedriver.exe路徑")

driver = webdriver.Chrome(service=s, options=chrome_options)

# 利用stealth.min.js隱藏瀏覽器指紋特征
# stealth.min.js下載地址:https://github.com/berstend/puppeteer-extra/tree/stealth-js
with open('./stealth.min.js'as f:
    driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
        "source": f.read()
    })

driver.get(url='URL')
# driver.get(url='https://bot.sannysoft.com/')

# 保存圖片
driver.save_screenshot('result.png')

time.sleep(200)

4. undetected_chromedriver

這是一個防止瀏覽器指紋特征被識別的依賴庫,可以自動下載驅動配置再運行

項目地址:

https://github.com/ultrafunkamsterdam/undetected-chromedriver

使用步驟也很方便

首先,我們安裝依賴庫

# 安裝依賴
pip3 install undetected-chromedriver

然后,通過下面幾行代碼就能完美隱藏瀏覽器的指紋特征

from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
import time
import undetected_chromedriver as uc

chrome_options = Options()
# chrome_options.add_argument("--headless")

s = Service(r"chromedriver.exe")

driver = uc.Chrome(service=s, options=chrome_options)

driver.get(url='URL')
# driver.get(url='https://bot.sannysoft.com/')

driver.save_screenshot('result.png')
time.sleep(100)

5. 操作已開啟的瀏覽器

最后一種方式上篇文章已經介紹過

如何利用 Selenium 對已打開的瀏覽器進行爬蟲!

我們只需要通過命令行啟動一個瀏覽器

import subprocess

# 1、打開瀏覽器
# 指定端口號為:1234
# 配置用戶數(shù)據(jù)路徑:--user-data-dir
cmd = 'C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe --remote-debugging-port=1234 --user-data-dir="C:\\selenum\\user_data"'

subprocess.run(cmd)

然后,利用 Selenium 直接操作上面的瀏覽器即可模擬正常操作瀏覽器的行為

import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service

# 操作上面已經打開的瀏覽器,進行百度搜索
chrome_options = Options()

# 指定已經打開瀏覽器的地址及端口號
chrome_options.add_experimental_option("debuggerAddress""127.0.0.1:1234")

# 注意:chrome版本與chromedirver驅動要保持一致
# 下載地址:http://chromedriver.storage.googleapis.com/index.html
s = Service(r"chromedriver.exe")

driver = webdriver.Chrome(service=s, options=chrome_options)

# 打開目標網(wǎng)站
driver.get(url="URL")

time.sleep(200)

6. 最后

上面羅列出了多種應對網(wǎng)站反爬的解決方案,大家可以根據(jù)實際需求去選擇適合自己的方案