国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Selenium webdriver的無頭模式(headless)可能導(dǎo)致cookies內(nèi)容缺失,以及解決措施

這篇具有很好參考價值的文章主要介紹了Selenium webdriver的無頭模式(headless)可能導(dǎo)致cookies內(nèi)容缺失,以及解決措施。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

無頭模式(headless)是selenium的webdriver瀏覽器驅(qū)動的一項功能,允許瀏覽器不出現(xiàn)而仍可訪問網(wǎng)頁,并與之交互,這對于運行自動化測試或網(wǎng)絡(luò)抓包大有用處,因為運行速度更快、占用資源更少。

但是筆者發(fā)現(xiàn)在無頭模式下運行時,瀏覽器訪問某些網(wǎng)站產(chǎn)生的cookies內(nèi)容可能與在正常模式(非無頭模式)下略有不同。因為某些網(wǎng)站使用技術(shù)來檢測是否被無頭瀏覽器訪問,并可能通過設(shè)定不同的 cookie 或以其他方式表現(xiàn)不同來做出響應(yīng)。

為了說明這種差異,我們可以使用 Python 中的 Selenium WebDriver 庫運行一個簡單的實驗。 首先,我們將創(chuàng)建兩個 Chrome 瀏覽器實例——一個在無頭模式下,另一個在正常模式下:

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


# 初始化無頭模式(headless)的webdriver
options = Options()
options.add_argument('--headless')
driver_headless = webdriver.Chrome(options=options)
# 設(shè)置window.navigator.webdriver為false
driver_headless.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {"source": "Object.defineProperty(navigator, 'webdriver', {get: () => False}) "})
# 打開一個網(wǎng)站,輸出cookies
driver_headless.get('http://。。。。。。')
sleep(3)
cookies_headless = driver_headless.get_cookies()
keys_headless = set([cookie['name'] for cookie in cookies_headless])
driver_headless.quit()


# 初始化正常模式的webdriver
options2 = Options()
# 取消chrome受自動控制提示
options2.add_experimental_option('useAutomationExtension', False)
options2.add_experimental_option('excludeSwitches', ['enable-automation'])
driver_normal = webdriver.Chrome(options=options2)
# 設(shè)置window.navigator.webdriver為false
driver_normal.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {"source": "Object.defineProperty(navigator, 'webdriver', {get: () => False}) "})
# 打開同一個網(wǎng)站,輸出cookies
driver_normal.get('http://。。。。。。')
sleep(3)
cookies_normal = driver_normal.get_cookies()
keys_normal = set([cookie['name'] for cookie in cookies_normal])
driver_normal.quit()


# 兩相比較
keys_only_in_headless = keys_headless - keys_normal
keys_only_in_normal = keys_normal - keys_headless

if keys_only_in_headless:
    print(f'無頭模式(headless)多出來的Cookie名稱是: {keys_only_in_headless}')
if keys_only_in_normal:
    print(f'正常模式多出來的Cookie名稱是: {keys_only_in_normal}')
if not keys_only_in_headless and not keys_only_in_normal:
    print('無頭模式和正常模式的cookies都一樣。')

運行結(jié)果截圖:

Selenium webdriver的無頭模式(headless)可能導(dǎo)致cookies內(nèi)容缺失,以及解決措施

我測試了分別采用無頭模式和正常模式訪問同一個網(wǎng)站的鏈接,得出的cookies不一樣。無頭模式情況下的cookies比正常模式缺失兩項內(nèi)容:AlteonP、JSessionID。

我后續(xù)的操作是需要把selenium的cookies內(nèi)容導(dǎo)出至requests庫的session使用,若使用無頭模式下的cookie,再用requests庫的get、post訪問該網(wǎng)站時都報錯(status_code會出現(xiàn)400、403、412等非正常代碼)。

眾所周知requests庫的get、post訪問一個網(wǎng)站鏈接獲取得到的cookies內(nèi)容本來就稀缺,只有selenium的webdriver打開網(wǎng)站才能得到豐富的cookies,因此要從selenium的cookies導(dǎo)出cookies給requests庫使用是非常有必要的。要讓selenium的無頭模式也能獲取正常模式的cookies,下面是我的兩個解決思路:

1、添加user-agent

在options那幾行里插入下面兩行代碼:

user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36'
options.add_argument(f'user-agent={user_agent}')

也許大家和我一樣都覺得Selenium的webdriver已經(jīng)自動附帶user-agent而不需要重復(fù)添加。但意想不到的是,無頭模式訪問某些網(wǎng)站,網(wǎng)站仍會檢測到selenium是在做爬蟲動作,故給出的cookies內(nèi)容少之又少,跟requests的get獲取的cookies相差無幾。所以在嘗試手動添加user-agent后,無頭模式獲取的cookies內(nèi)容變得豐富起來,這個辦法看似老土,但非常管用。

2、設(shè)置瀏覽器窗口大小

如果第一個解決方法行不通,可試試設(shè)置瀏覽器窗口大小,盡管無頭模式下瀏覽器是無形的,但也許通過設(shè)置窗口大小可以瞞過某些網(wǎng)站的檢測。

options.add_argument("--window-size=1920,1050") 

接下來就可以導(dǎo)出Selenium的cookies給requests使用了。文章來源地址http://www.zghlxwxcb.cn/news/detail-401899.html

from requests.cookies import RequestsCookieJar

cookies = driver.get_cookies()
jar = RequestsCookieJar()
for cookie in cookies:
    jar.set(cookie['name'], cookie['value'])

se = requests.Session()
se.cookies = jar
se.headers.update({'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36'})

res = se.get('http://。。。。。。', headers=headers)
assert res.status_code==200
res.encoding = 'utf-8'
print(res.text)

到了這里,關(guān)于Selenium webdriver的無頭模式(headless)可能導(dǎo)致cookies內(nèi)容缺失,以及解決措施的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • linux centos安裝google chrome瀏覽器使用headless無頭模式 制作docker鏡像

    chromedriver 驅(qū)動下載地址: https://npm.taobao.org/mirrors/chromedriver/ linux centos安裝google chrome瀏覽器使用headless無頭模式 用java開發(fā)爬蟲,或者需要java操作控制瀏覽器來渲染頁面,抓取頁面元素,都需要在linux安裝google chrome瀏覽器,然后就可以通過chrome driver來連接操作chrome瀏覽器了,

    2024年02月09日
    瀏覽(107)
  • selenium無頭模式

    Selenium可以在無頭模式下運行,即在后臺執(zhí)行自動化測試任務(wù),不需要打開瀏覽器窗口。無頭模式可以提高測試效率,減少資源消耗,適合在服務(wù)器上運行自動化測試任務(wù)。以下是在Selenium中使用無頭模式的方法: 1. 安裝Headless Chrome或Firefox 無頭模式需要使用Headless Chrome或Fi

    2024年02月08日
    瀏覽(19)
  • selenium 無頭模式截屏

    原文鏈接: selenium 無頭模式截屏 上一篇: wecode 生日賀卡 flask 服務(wù)端 下一篇: wecode 圖片查看組件 截取百度首頁,保存為圖片 砸死ubuntu環(huán)境中,可能會出現(xiàn)中文亂碼問題,目前沒有得到解決。。。。

    2023年04月09日
    瀏覽(41)
  • Selenium chrome headless模式下加載擴展的問題

    Selenium headless是比較常用的自動化測試手段,但是在很長一段時間無法加載擴展。本文將介紹Selenium chrome如何加載擴展以及headless模式下加載擴展的問題及解決方式。 推薦使用第三種方式。 另外chrome安裝的插件在C:Users(username)AppDataLocalGoogleChromeUser DataDefaultExtensions 下可找

    2024年02月13日
    瀏覽(62)
  • k8s 中的無頭服務(wù) (Headless Services)

    ????????有時候我們不需要負載均衡,以及單獨的 Service IP。 遇到這種情況,可以通過指定 Cluster IP(spec.clusterIP)的值為 \\\"None\\\" 來創(chuàng)建無頭服務(wù)。通過無頭服務(wù)的標(biāo)簽選擇器(Label Selector)可以將后端的 Pod 列表返回給調(diào)用的客戶端。 ????????對于無頭服務(wù),不會為其分

    2024年02月15日
    瀏覽(20)
  • Python Headless Chrome(無頭谷歌瀏覽器)

    Python Headless Chrome(無頭谷歌瀏覽器)

    在我們使用Selenium驅(qū)動ChromeDriver時,可以彈出谷歌瀏覽器,模擬人為操作谷歌瀏覽器,這就是自動化測試。雖然很厲害,但是也有一個很現(xiàn)實的問題,因為是要真實加載完整網(wǎng)頁,導(dǎo)致效率低。在自動化測試時,我們其實只需要知道是測試完成還是未完成,至于能否看到完整

    2024年02月05日
    瀏覽(20)
  • 無頭模式下selenium實現(xiàn)長截圖(Java版本)

    無頭模式下使用selenium截圖時經(jīng)常遇到有滾動條的界面內(nèi)容截不全的問題,通過各種渠道找到了解決方案,現(xiàn)記錄如下

    2024年02月12日
    瀏覽(21)
  • 【Chrome】使用k8s、docker部署無頭瀏覽器Headless,Java調(diào)用示例

    【Chrome】使用k8s、docker部署無頭瀏覽器Headless,Java調(diào)用示例

    無頭瀏覽器是一種沒有圖形用戶界面的瀏覽器。無頭瀏覽器不通過其圖形用戶界面( GUI )控制瀏覽器的操作,而是使用命令行。 Chrome Headless 用于抓取(谷歌)、測試(開發(fā)者)和黑客(黑客)。 搜索引擎,使用它來呈現(xiàn)頁面、生成動態(tài)內(nèi)容和索引來自單頁 Web 應(yīng)用程序的數(shù)據(jù)。 SEO 工

    2024年02月08日
    瀏覽(20)
  • Python selenium無界面headless

    視頻版教程:一天掌握python爬蟲【基礎(chǔ)篇】 涵蓋 requests、beautifulsoup、selenium Chrome-headless 模式, Google 針對 Chrome 瀏覽器 59版 新增加的一種模式,可以讓你不打開UI界面的情況下使用 Chrome 瀏覽器,所以運行效果與 Chrome 保持完美一致,因此速度快與要打開界面的selenium,其使用

    2024年02月05日
    瀏覽(18)
  • selenium無頭瀏覽器

    無頭瀏覽器,也是通過selenium操作瀏覽器,但是瀏覽器不彈出來的意思 需要用到這個:

    2024年02月11日
    瀏覽(83)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包