最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python中瀏覽器有頭和無頭操作的實戰(zhàn)指南

 更新時間:2026年03月23日 08:55:08   作者:Java后端的Ai之路  
有頭模式就是我們在日常使用瀏覽器時最常見的形式,無頭模式是指瀏覽器在沒有圖形用戶界面(GUI)的環(huán)境下運行,下面小編就和大家詳細介紹一下二者的區(qū)別并給出Python示例代碼,感興趣的小伙伴可以了解下

前言:在這個自動化橫行的時代,瀏覽器也學會了"分身術"

啥是有頭模式?——看得見摸得著的瀏覽器

專業(yè)解釋

有頭模式,就是我們在日常使用瀏覽器時最常見的形式。瀏覽器會以可視化的窗口形式呈現(xiàn)在屏幕上,用戶可以通過鼠標點擊、鍵盤輸入等方式與頁面進行交互。在這種模式下,瀏覽器會渲染所有的視覺元素,包括文字、圖片、動畫等。

大白話解讀

說白了,有頭模式就是你平時用 Chrome、Firefox、Edge 的那種方式。瀏覽器像個人一樣老老實實坐在那里,你想點哪里就點哪里,想看什么就看什么,一切操作都在你的眼皮底下進行,就像是坐在電影院看電影一樣直觀。

生活案例

想象一下,你在奶茶店點單:

有頭模式就像是你在柜臺前點單,你能看到店員的動作,能盯著菜單慢慢選,甚至能看到奶茶制作的整個過程(如果店子是透明廚房的話)。整個過程 真實可見,心里踏實。

Python 代碼示例

from selenium import webdriver
from selenium.webdriver.common.by import By
import time
?
# 創(chuàng)建有頭瀏覽器實例
driver = webdriver.Chrome()
?
try:
    # 打開網(wǎng)頁
    driver.get("https://www.example.com")
    
    # 查找元素并點擊
    search_box = driver.find_element(By.NAME, "q")
    search_box.send_keys("有頭瀏覽器")
    search_box.submit()
    
    # 暫停觀察效果
    time.sleep(3)
    
finally:
    # 關閉瀏覽器
    driver.quit()

三、啥是無頭模式?——隱形的高手

專業(yè)解釋

無頭模式(Headless Mode)是指瀏覽器在沒有圖形用戶界面(GUI)的環(huán)境下運行。在這種模式下,瀏覽器不會渲染任何視覺元素,所有操作都在后臺靜默執(zhí)行,但仍然能夠執(zhí)行 JavaScript、加載頁面、處理 DOM 等核心功能。

大白話解讀

無頭模式就像是瀏覽器學會了"隱身術"。它照樣能干所有活兒,只是你看不見它的操作過程。它在后臺默默幫你把事兒辦了,就像有個隱形人在幫你干活一樣。速度快、省資源、不占屏幕。

生活案例

繼續(xù)用奶茶店的例子:

無頭模式就像是你在 APP 上提前點好單,到店直接拿走。你不需要在柜臺前等待,不需要看店員制作,也不需要占用你的時間和注意力。整個過程對你是"隱形"的,但結果是一樣的——你拿到了奶茶。

Python 代碼示例

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
import time
?
# 配置無頭模式
chrome_options = Options()
chrome_options.add_argument("--headless")  # 啟用無頭模式
chrome_options.add_argument("--disable-gpu")
chrome_options.add_argument("--window-size=1920,1080")
?
# 創(chuàng)建無頭瀏覽器實例
driver = webdriver.Chrome(options=chrome_options)
?
try:
    # 打開網(wǎng)頁(你看不見瀏覽器窗口)
    driver.get("https://www.example.com")
    
    # 截圖驗證(這是你能看到結果的唯一方式)
    driver.save_screenshot("screenshot.png")
    
    # 查找元素并操作
    page_title = driver.title
    print(f"頁面標題: {page_title}")
    
finally:
    # 關閉瀏覽器
    driver.quit()

四、有頭模式 vs 無頭模式:巔峰對決

對比維度有頭模式無頭模式
可見性? 操作過程可見? 后臺靜默執(zhí)行
資源占用? 占用內(nèi)存和顯卡? 資源消耗少
運行速度? 較慢(需要渲染)? 較快(跳過渲染)
調(diào)試體驗? 直觀看到問題? 需要截圖或日志
適用場景開發(fā)調(diào)試、演示自動化測試、爬蟲

五、使用場景:什么時候該選誰

有頭模式的最佳時機

  • 開發(fā)調(diào)試階段:當你需要親眼看到每一步操作的結果,排查問題的時候
  • 演示展示:給老板或客戶展示自動化效果的時候(要有視覺沖擊力)
  • 需要人工干預:有些網(wǎng)站會檢測是否有真實用戶操作,有頭模式更容易通過

無頭模式的最佳時機

  • 自動化測試:CI/CD 流程中需要快速執(zhí)行測試用例
  • 大規(guī)模爬蟲:需要同時運行多個瀏覽器實例
  • 服務器環(huán)境:在沒有圖形界面的 Linux 服務器上運行

Python 代碼示例:根據(jù)環(huán)境自動切換

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
import os
?
def get_driver(headless=False):
    """根據(jù)需求創(chuàng)建有頭或無頭瀏覽器"""
    chrome_options = Options()
    
    if headless:
        chrome_options.add_argument("--headless")
        chrome_options.add_argument("--disable-gpu")
        chrome_options.add_argument("--window-size=1920,1080")
    
    driver = webdriver.Chrome(options=chrome_options)
    return driver
?
# 開發(fā)時用有頭模式
driver = get_driver(headless=False)
?
# 生產(chǎn)環(huán)境用無頭模式
# driver = get_driver(headless=True)
?
try:
    driver.get("https://www.example.com")
    print("頁面加載成功!")
    
finally:
    driver.quit()

六、性能對比:用數(shù)據(jù)說話

測試場景

用 Selenium 打開 10 個網(wǎng)頁并獲取頁面標題,對比兩種模式的耗時:

import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
?
def test_performance(mode, url, iterations=10):
    chrome_options = Options()
    if mode == "headless":
        chrome_options.add_argument("--headless")
        chrome_options.add_argument("--disable-gpu")
    
    driver = webdriver.Chrome(options=chrome_options)
    
    start_time = time.time()
    
    for i in range(iterations):
        driver.get(url)
        title = driver.title
    
    end_time = time.time()
    driver.quit()
    
    return end_time - start_time
?
# 測試有頭模式
headful_time = test_performance("headful", "https://www.example.com", 10)
?
# 測試無頭模式
headless_time = test_performance("headless", "https://www.example.com", 10)
?
print(f"有頭模式耗時: {headful_time:.2f}秒")
print(f"無頭模式耗時: {headless_time:.2f}秒")
print(f"無頭模式快了: {(headful_time - headless_time) / headful_time * 100:.1f}%")

典型測試結果

根據(jù)多次測試,無頭模式通常比有頭模式快 30%-50%。差異的主要原因:

  • 有頭模式需要渲染所有 DOM 元素和 CSS 樣式
  • 無頭模式跳過了視覺渲染,直接執(zhí)行邏輯

七、進階技巧:讓你的瀏覽器操作更專業(yè)

1. 無頭模式下的調(diào)試技巧

問題:無頭模式下看不到操作過程,怎么調(diào)試?

解決方案定期截圖

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
?
def setup_driver():
    chrome_options = Options()
    chrome_options.add_argument("--headless")
    chrome_options.add_argument("--disable-gpu")
    chrome_options.add_argument("--window-size=1920,1080")
    return webdriver.Chrome(options=chrome_options)
?
driver = setup_driver()
?
try:
    driver.get("https://www.example.com")
    
    # 關鍵步驟截圖
    driver.save_screenshot("step1_landing.png")
    
    # 執(zhí)行操作
    search_box = driver.find_element(By.NAME, "q")
    search_box.send_keys("調(diào)試截圖")
    search_box.submit()
    
    # 操作后截圖
    driver.save_screenshot("step2_search_result.png")
    
finally:
    driver.quit()

2. 防檢測技巧

問題:有些網(wǎng)站會檢測無頭瀏覽器并封禁

解決方案偽裝成正常瀏覽器

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
?
def setup_stealth_driver():
    chrome_options = Options()
    chrome_options.add_argument("--headless")
    
    # 添加偽裝參數(shù)
    chrome_options.add_argument("--disable-blink-features=AutomationControlled")
    chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"])
    chrome_options.add_experimental_option('useAutomationExtension', False)
    
    driver = webdriver.Chrome(options=chrome_options)
    
    # 修改navigator.webdriver屬性
    driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
        "source": """
            Object.defineProperty(navigator, 'webdriver', {
                get: () => undefined
            })
        """
    })
    
    return driver

八、常見陷阱與避坑指南

陷阱 1:無頭模式下的元素定位問題

現(xiàn)象:代碼在本地有頭模式運行正常,部署到服務器無頭模式就報錯

原因窗口尺寸不同導致元素位置變化

解決方法

chrome_options.add_argument("--window-size=1920,1080")  # 統(tǒng)一窗口尺寸

陷阱 2:動態(tài)加載內(nèi)容無法獲取

現(xiàn)象:無頭模式下某些動態(tài)加載的內(nèi)容獲取不到

原因無頭模式執(zhí)行速度太快,內(nèi)容還沒加載完

解決方法

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
?
# 等待元素出現(xiàn)
wait = WebDriverWait(driver, 10)
element = wait.until(
    EC.presence_of_element_located((By.ID, "dynamic-content"))
)

陷阱 3:內(nèi)存泄漏

現(xiàn)象:長時間運行后瀏覽器占用內(nèi)存飆升

原因沒有正確關閉瀏覽器實例

解決方法

# 始終使用try-finally確保瀏覽器被關閉
driver = webdriver.Chrome()
try:
    # 你的代碼
    pass
finally:
    driver.quit()  # 確保一定會關閉

九、總結:選對模式,事半功倍

有頭模式和無頭模式各有優(yōu)劣,關鍵在于選擇合適的場景

  • 學習和調(diào)試 → 有頭模式(看得見,心里有數(shù))
  • 自動化測試 → 無頭模式(快速、穩(wěn)定)
  • 數(shù)據(jù)采集 → 無頭模式(高效、省資源)
  • 產(chǎn)品演示 → 有頭模式(有視覺沖擊力)

記住:沒有最好的模式,只有最適合的模式。根據(jù)你的實際需求靈活選擇,才能發(fā)揮瀏覽器的最大威力!

到此這篇關于Python中瀏覽器有頭和無頭操作的實戰(zhàn)指南的文章就介紹到這了,更多相關Python瀏覽器操作內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 8種常用的Python工具

    8種常用的Python工具

    這篇文章主要介紹了8種常用的Python工具,幫助大家更好的學習Python,感興趣的朋友可以了解下
    2020-08-08
  • Python中操作Redis的常用方法小結

    Python中操作Redis的常用方法小結

    這篇文章主要為大家詳細介紹了Python中操作Redis的常用方法,文中的示例代碼簡潔易懂,具有一定的借鑒價值,有需要的小伙伴可以了解一下
    2025-02-02
  • Python實現(xiàn)批量翻譯的示例代碼

    Python實現(xiàn)批量翻譯的示例代碼

    這篇文章主要為大家詳細介紹了如何利用Python語言實現(xiàn)批量翻譯的功能,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2022-09-09
  • Django的restframework接口框架自定義返回數(shù)據(jù)格式的示例詳解

    Django的restframework接口框架自定義返回數(shù)據(jù)格式的示例詳解

    這篇文章主要介紹了Django的restframework接口框架自定義返回數(shù)據(jù)格式,本文介紹了通過Django的restframework接口框架自定義Response返回對象來自定義返回數(shù)據(jù)格式,本文通過示例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2022-07-07
  • 利用Python制作一個簡單的天氣播報系統(tǒng)

    利用Python制作一個簡單的天氣播報系統(tǒng)

    最近天氣的多變,好幾次出門半路天氣轉(zhuǎn)變。本文將利用python整個天氣爬蟲來獲取天氣情況。這樣也好可以進行一個提前預防,感興趣的可以動手試一試
    2022-05-05
  • python數(shù)組中的?k-diff?數(shù)對例題解析

    python數(shù)組中的?k-diff?數(shù)對例題解析

    這篇文章主要介紹了python數(shù)組中的?k-diff?數(shù)對例題解析,文章根據(jù)題目內(nèi)容對其進行分析以此展開主題內(nèi)容,感興趣的小伙伴可以參考一下下面文章詳情
    2022-06-06
  • Python輕量級定時任務調(diào)度APScheduler的使用

    Python輕量級定時任務調(diào)度APScheduler的使用

    Apscheduler是一個基于Quartz的python定時任務框架,本文主要介紹了Python輕量級定時任務調(diào)度APScheduler的使用,具有一定的參考價值,感興趣的可以了解一下
    2024-02-02
  • python列表操作實例

    python列表操作實例

    這篇文章主要介紹了python列表操作方法,實例分析了Python針對列表操作的插入、刪除等各種操作技巧,需要的朋友可以參考下
    2015-01-01
  • python如何刪除文件中重復的字段

    python如何刪除文件中重復的字段

    這篇文章主要為大家詳細介紹了python如何刪除文件中重復的字段,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • django框架模板中定義變量(set variable in django template)的方法分析

    django框架模板中定義變量(set variable in django template)的方法分析

    這篇文章主要介紹了django框架模板中定義變量(set variable in django template)的方法,結合實例形式分析了Django框架實現(xiàn)模板中定義變量與變量賦值相關操作技巧,需要的朋友可以參考下
    2019-06-06

最新評論

扎鲁特旗| 临猗县| 蒙自县| 临西县| 曲阳县| 房山区| 宁安市| 阿瓦提县| 阜新市| 札达县| 宁都县| 修水县| 新安县| 栾城县| 福建省| 五指山市| 松原市| 泰和县| 泸定县| 曲阜市| 阿坝县| 礼泉县| 和静县| 遵化市| 白银市| 阿拉善右旗| 弋阳县| 临澧县| 杭州市| 响水县| 同江市| 云南省| 上饶市| 长阳| 杂多县| 化隆| 龙山县| 嘉禾县| 承德市| 上思县| 贺兰县|