欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Selenium模擬用戶進行操作網(wǎng)頁的最全指南

 更新時間:2025年05月07日 10:54:49   作者:翠花上酸菜  
這篇文章主要為大家詳細介紹了使用selenium怎么模仿人類行為,去操作網(wǎng)頁的頁面呢,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下

看到有朋友評論問,用selenium怎么模仿人類行為,去操作網(wǎng)頁的頁面呢?

我想了想,這確實是一個很大的點,不應(yīng)該是一段代碼能解決的,

就像是,如果讓程序模擬人類的行為。例如模擬人類買菜,做飯,吃飯,聊天,蹲坑等

這個過程中最重要的不是結(jié)果,不是程序能不能完成這些事,而是做這些事的時候,能不能盡可能地像個人在做的,然后盡力躲過網(wǎng)絡(luò)警察的審查。

selenium的優(yōu)勢是在于它的休眠機制、可以模擬真實的瀏覽器指紋,模擬鼠標移動的行為軌跡、處理復雜交互等,可以降低被檢測和封鎖的風險。

具體的模擬應(yīng)該要分不同的情況來,以下是一些整理:

1. 配置selenium的瀏覽器界面

在運行下面的方法前,先把selenium 配置好,盡量多一些selenium的配置,用來繞過監(jiān)測,下面的簡單的寫法,嚴謹一點的話,可以如2、3、4的寫法,加上用戶代理和禁用自動化特征、防檢測的header頭寫法等:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()
options.add_argument("--window-size=1920,1080")  # 設(shè)置瀏覽器窗口大小
options.add_argument("--disable-blink-features=AutomationControlled")  # 禁用自動化控制特征
options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36")  # 設(shè)置用戶代理
driver = webdriver.Chrome(options=options)

#加上頭的寫法

2. 使用代理IP

我們在訪問其他網(wǎng)站的時候,使用自己的服務(wù)器地址,向?qū)Ψ降木W(wǎng)站打個招呼,這個時候會暴露自己的IP地址,就像打電話給別人一樣,我們的電話號碼也會暴露給了對方。如果頻繁地向?qū)Ψ揭恢贝蛘泻簦腿菀妆粚Ψ揭曌骼柎a一樣拉黑

這就跟被人標記成垃圾號碼一樣被對方封了,這個是封IP;現(xiàn)在很多人會用虛擬號碼去頻繁地打電話給別人,哪怕別人拉黑了這個號碼,也拉黑不了下一個。因為每次打出去的號碼都是新的虛擬的號

做代理IP就像是給自己的電腦IP,包裝多個虛擬號碼一樣的外殼, 這樣可以保障自己在頻繁地訪問一個網(wǎng)站的時候,不會輕易被拉黑了。

from selenium import webdriver

PROXY = "123.456.789.012:8080"  # 示例代理

options = webdriver.ChromeOptions()
options.add_argument(f'--proxy-server={PROXY}')
driver = webdriver.Chrome(options=options)

這個代理ip有付費的網(wǎng)站,也有免費的網(wǎng)站,如果有需要,后期我會再整理各類的網(wǎng)站出來

3. 禁用自動化特征

有時候爬取的時候,會顯示這樣一行字,下面的方法是可以取消這行字的顯示,將瀏覽器包裝成非自動化測試的外殼。

options = Options()
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)
driver = webdriver.Chrome(options=options)

4. selenium上構(gòu)造安全頭header

請求頭把自己的瀏覽器信息發(fā)送給對方服務(wù)器,有點像是給對方服務(wù)器遞了個名片過去。

單一的header頭,也會受到對方服務(wù)器的檢測,有時候我們也可以有選擇地構(gòu)建安全頭內(nèi)容。

4.1 方法1:通過 add_argument 設(shè)置基礎(chǔ) Headers(簡單但有限)

適用于修改 User-Agent 等基礎(chǔ)頭信息:

from selenium import webdriver

options = webdriver.ChromeOptions()
options.add_argument("--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36")
options.add_argument("--accept-language=en-US,en;q=0.9")

driver = webdriver.Chrome(options=options)

局限性:僅支持部分預定義頭(如 User-Agent、Accept-Language),無法添加自定義頭(如 Authorization)。

4.2 方法2:使用 DevTools Protocol(推薦,完整控制)

動態(tài)的header構(gòu)建,通過 Chrome DevTools 的 Network.setExtraHTTPHeaders 方法,注入任意 Headers:

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()

# 定義自定義 Headers
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)",
    "Accept": "text/html,application/xhtml+xml",
    "Authorization": "Bearer token123",  # 示例自定義頭
    "X-Custom-Header": "MyValue"
}

# 通過 DevTools 注入 Headers
driver.execute_cdp_cmd("Network.enable", {})
driver.execute_cdp_cmd("Network.setExtraHTTPHeaders", {"headers": headers})

driver.get("https://example.com")

優(yōu)點:支持所有自定義 Headers,適用于需要 Cookie、Referer 等復雜場景。

4.3 進階的header頭:使用undetected-chromedriver來構(gòu)建

反爬會對部分網(wǎng)站會檢測 Sec- 開頭的安全頭(如 Sec-Ch-Ua),需用 undetected-chromedriver 規(guī)避。

5.模擬鼠標移動與點擊

我們在點擊網(wǎng)頁后,如果有一些交互的按鈕,例如要移動到某個位置再點擊之類的,我們可能會用find_element 定位元素再進行點擊,

但是如果在防檢測比較嚴格的情況下,例如對方瀏覽器對鼠標進行監(jiān)控計算,會監(jiān)測用戶是鼠標是不是在移動,如果是上面的方法,這種就沒法做到,這時候可以用到ActionChains來處理:

from selenium.webdriver.common.action_chains import ActionChains
import random
import time

element = driver.find_element_by_id("some-id")

# 模擬人類移動鼠標
actions = ActionChains(driver)
actions.move_to_element(element).perform()

# 添加隨機延遲
time.sleep(random.uniform(0.5, 2.5))

# 模擬人類點擊(先移動再點擊)
actions.click(element).perform()

但是這種方法會一直占用鼠標的使用的,導致我們爬蟲之余沒法做其他的事情,處于下策,能不用就盡量不用。

6.模擬鼠標滾動的行為

我們在瀏覽頁面的時候,會有滾動鼠標,看下滑的頁面,下滑不是一直滑,而是會停一會,再下拉頁面一會

即模擬人的人眼在看到頁面后的反應(yīng),腦子會對眼球的視覺信息做處理,停留思考一會,這時候會有一個間隔的空隙,

這個空隙可以用隨機休眠的方法處理:

import random

# 隨機滾動頁面
scroll_pause_time = random.uniform(0.5, 1.5)
scroll_height = random.randint(200, 800)

for i in range(random.randint(1, 5)):
    driver.execute_script(f"window.scrollBy(0, {scroll_height});") #用js模擬滾動鼠標的操作
    time.sleep(scroll_pause_time) #間隔休眠的時間

7.模擬瀏覽頁面時,停留一些時間

人在瀏覽網(wǎng)頁的時候,不會一直都無停留地一直切換不同的瀏覽器的網(wǎng)頁,我們在不同的網(wǎng)頁間切換,要隨機增加一些睡眠,原理同上

import random

# 不同頁面間的隨機等待
wait_times = [1, 1.5, 2, 2.5, 3, 4, 5]

driver.get(url_1)
time.sleep(random.choice(wait_times))
driver.get(url_2)
time.sleep(random.choice(wait_times))

8. 模擬在輸入框里輸入文字的行為

在模擬人在手敲鍵盤的時候,模擬一個字一個字得打出來,

這個一字一頓,得用到字與字輸出的休眠

這種方法的實現(xiàn)是for循環(huán)里打出一堆字的時候,在每個字之間增加隨機的休眠,如:

from selenium.webdriver.common.keys import Keys

text_field = driver.find_element_by_id("search-box")

# 模擬人類打字速度
text_to_type = "example search query"
for char in text_to_type:
    text_field.send_keys(char)
    time.sleep(random.uniform(0.1, 0.3))  # 隨機輸入間隔
    
# 隨機等待后按回車
time.sleep(random.uniform(0.5, 1.5))
text_field.send_keys(Keys.RETURN)

9. 模擬人類錯誤與糾正

我們在打字的時候,有時候會寫錯字,需要刪除內(nèi)容,然后再重新輸入

這個模擬寫錯又糾錯的過程,如下:

# 模擬輸入錯誤并糾正
search_box = driver.find_element_by_name("q")

# 故意輸入錯誤
search_box.send_keys("mistake")
time.sleep(random.uniform(0.5, 1.5))

# 模擬退格刪除
for _ in range(3):
    search_box.send_keys(Keys.BACK_SPACE)
    time.sleep(random.uniform(0.1, 0.3))

# 輸入正確內(nèi)容
search_box.send_keys("correct term")

10. 標簽頁與窗口行為模擬

如果爬取時間比較長的話,我們一直在一個標簽頁的窗口上一直操作,也不太合理,要時不時打開新的標簽頁,進行處理

下面的方法是用概率來限制打開標簽頁的次數(shù):

# 隨機打開新標簽頁
if random.random() > 0.7:  # 30%概率打開新標簽
    driver.execute_script("window.open('https://example.com');")
    time.sleep(random.uniform(1, 3))
    
    # 切換回原標簽頁
    driver.switch_to.window(driver.window_handles[0])
    time.sleep(random.uniform(0.5, 1.5))

11. 操作順序隨機化

一些可以點擊的元素,不要按順序一個個順著去點,要調(diào)換順序,隨機去點,例如:

寫法:

actions = [
    lambda: driver.execute_script("window.scrollBy(0, 200);"),
    lambda: driver.find_element_by_link_text("About").click(),
    lambda: driver.back(),
    lambda: time.sleep(random.uniform(1, 2))
]

random.shuffle(actions)
for action in actions[:random.randint(1, 3)]:
    action()
    time.sleep(random.uniform(0.5, 1.5))

12. 下載文件時,模擬網(wǎng)絡(luò)條件限定速度

下載一些文件的時候,模擬網(wǎng)絡(luò)的狀態(tài),設(shè)置下載的速度,不要太快,或者太頻繁下載:

from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

???????caps = DesiredCapabilities.CHROME
caps['goog:loggingPrefs'] = {'performance': 'ALL'}
caps['networkConditions'] = {
    'offline': False,
    'latency': 100,  # 額外延遲(ms)
    'download_throughput': 500 * 1024,  # 最大下載速度
    'upload_throughput': 500 * 1024  # 最大上傳速度
}
driver = webdriver.Chrome(desired_capabilities=caps)

到此這篇關(guān)于Selenium模擬用戶進行操作網(wǎng)頁的最全指南的文章就介紹到這了,更多相關(guān)Selenium操作網(wǎng)頁內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用python的pexpect模塊,實現(xiàn)遠程免密登錄的示例

    使用python的pexpect模塊,實現(xiàn)遠程免密登錄的示例

    今天小編就為大家分享一篇使用python的pexpect模塊,實現(xiàn)遠程免密登錄的示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-02-02
  • python元類編程的基本使用

    python元類編程的基本使用

    本文主要介紹了python元類編程的基本使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-02-02
  • python ftfy庫處理金融方面文件編碼錯誤實例詳解

    python ftfy庫處理金融方面文件編碼錯誤實例詳解

    這篇文章主要為大家介紹了使用python ftfy庫處理金融方面文件編碼錯誤實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2024-01-01
  • PyQt5每天必學之切換按鈕

    PyQt5每天必學之切換按鈕

    這篇文章主要為大家詳細介紹了PyQt5每天必學之切換按鈕的相關(guān)資料,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • Python數(shù)據(jù)可視化處理庫PyEcharts柱狀圖,餅圖,線性圖,詞云圖常用實例詳解

    Python數(shù)據(jù)可視化處理庫PyEcharts柱狀圖,餅圖,線性圖,詞云圖常用實例詳解

    這篇文章主要介紹了Python數(shù)據(jù)可視化處理庫PyEcharts柱狀圖、餅圖、線性圖常用實例詳解,需要的朋友可以參考下
    2020-02-02
  • Python3離線安裝Requests模塊問題

    Python3離線安裝Requests模塊問題

    這篇文章主要介紹了Python3離線安裝Requests模塊問題,本文實例代碼給大家介紹的非常詳細,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-10-10
  • python使用matplotlib繪制折線圖

    python使用matplotlib繪制折線圖

    這篇文章主要為大家詳細介紹了python使用matplotlib繪制折線圖,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • 簡單了解Python matplotlib線的屬性

    簡單了解Python matplotlib線的屬性

    這篇文章主要介紹了簡單了解Python matplotlib線的屬性,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-06-06
  • Python 使用 Redis 作為緩存的操作方法

    Python 使用 Redis 作為緩存的操作方法

    在現(xiàn)代Web應(yīng)用和數(shù)據(jù)密集型服務(wù)中,使用Redis作為緩存可以提升性能和響應(yīng)速度,Redis是一個高性能的內(nèi)存中數(shù)據(jù)結(jié)構(gòu)存儲系統(tǒng),支持多種數(shù)據(jù)結(jié)構(gòu)如字符串、哈希、列表等,并提供持久性和分布式支持,本文給大家介紹Python 使用 Redis 作為緩存的操作方法,感興趣的朋友一起看看吧
    2024-10-10
  • python實現(xiàn)集中式的病毒掃描功能詳解

    python實現(xiàn)集中式的病毒掃描功能詳解

    這篇文章主要介紹了python實現(xiàn)集中式的病毒掃描功能,結(jié)合實例形式分析了Python集中式的病毒掃描相關(guān)原理、實現(xiàn)方法與操作注意事項,需要的朋友可以參考下
    2019-07-07

最新評論