Python自動化測試 之 DrissionPage 的下載、安裝、基本使用詳解

Python自動化測試 之 DrissionPage 使用詳解

    • 🏡前言:
    • 一、??DrissionPage的基本概述
    • 二、 🗺?環境安裝
      • 2.1 ???運行環境
      • 2.2 ???一鍵安裝
    • 三、🗺?快速入門
      • 3.1 頁面類
        • 🛰?ChromiumPage
        • 🛫 SessionPage
        • 🔎WebPage
      • 3.2 🌏 準備工作
        • 3.2.1 嘗試啟動瀏覽器
        • 3.2.2 設置瀏覽器驅動路徑
        • 3.2.3 🌏?控制瀏覽器
      • 3.3 收發數據包
      • 3.4 模式切換
    • 四、🗺?ChromiumPage詳解
      • 4.1 啟動和接管瀏覽器
        • 4.1.1 啟動瀏覽器
        • 4.1.2 接管瀏覽器
        • 4.1.3 多瀏覽器共存
      • 4.2 頁面交互
      • 4.3 查找元素
      • 4.4 獲取元素信息的常用屬性或方法
    • 五、🗺?SessionPage詳解
      • 5.1 get請求
      • 5.2 post請求
      • 5.3 page對象常用屬性
    • 六、🗺?WebPage詳解
    • 擴展
      • ?下載文件
      • 🥬設置 cookies
      • ? 常見問題

🏡前言:

之前分享過一篇關于 自動化測試框架 Selenium 使用的文章: Python自動化測試 環境搭建 Selenium、WebDriver下載、安裝、配置、基本使用詳解,雖然 Selenium也很強大,但在使用下來后,感覺DrissionPage操作更簡單、功能更強大一些(不像Selenium 會擔心WebDriver版本對不上無法運行等情況),尤其是對新手入門來講,DrissionPage是非常值得推薦學習的。

一、??DrissionPage的基本概述

DrissionPage 是一個基于 python 的網頁自動化工具。它既能控制瀏覽器,也能像requests一樣收發數據包,更重要的是還能把兩者合二為一。因此,簡單來說DrissionPage可兼顧瀏覽器自動化的便利性和 requests 的高效率。
DrissionPage功能強大,內置無數人性化設計和便捷功能。并且它的語法簡潔而優雅,代碼量少,對新手友好。

drissionpage

🚀官網:https://drissionpage.cn/

📚文檔:https://drissionpage.cn/browser_control/intro

💖 特性:
??? 強大的自研內核

  • 不依賴 webdriver
  • 無需為不同版本的瀏覽器下載不同的驅動
  • 運行速度更快
  • 可以跨 iframe 查找元素,無需切入切出
  • 可同時操作多個標簽頁,無需切換
  • 方便好用的數據包監聽功能
  • 可處理非open狀態的 shadow-root

??? 極簡的定位語法

  • 制定了一套簡潔高效的查找元素語法,支持鏈式操作,支持相對定位。
  • 每次查找內置等待,可以獨立設置每次查找超時時間。

??? 更多便捷的功能

  • 可對整個網頁截圖,包括視口外的部分
  • 每次運行程序可以反復使用已經打開的瀏覽器,無需每次從頭運行
  • s 模式訪問網頁時會自動糾正編碼,無需手動設置
  • s 模式在連接時會自動根據當前域名自動填寫Host和Referer屬性
  • 下載工具支持多種方式處理文件名沖突、自動創建目標路徑、斷鏈重試等
  • 支持直接獲取after和before偽元素的內容
  • 上傳文件可直接攔截文件選擇框并輸入路徑,無需依靠 GUI 或查找元素輸入

二、 🗺?環境安裝

2.1 ???運行環境

操作系統:Windows、Linux 或 Mac。

python 版本:3.6 及以上

支持瀏覽器:Chromium 內核(如 Chrome 和 Edge)

2.2 ???一鍵安裝

使用 pip 安裝 DrissionPage:

# 安裝最新版本
pip install DrissionPage# 如果已安裝,可以在命令后面加上 --upgrade 參數 升級到最新版本
pip install DrissionPage --upgrade# 指定版本升級
pip install DrissionPage==4.0.0b17

三、🗺?快速入門

3.1 頁面類

在DrissionPage框架中,有一個非常重要的工具叫做“頁面類”,主要用于控制瀏覽器 和 收發數據包。DrissionPage 包含三種主要頁面類。我們可以根據自己的需要選擇使用。

🛰?ChromiumPage

如果只要控制瀏覽器,導入ChromiumPage

from DrissionPage import ChromiumPage
🛫 SessionPage

如果只要收發數據包,導入SessionPage

from DrissionPage import SessionPage
🔎WebPage

WebPage是功能最全面的頁面類,既可控制瀏覽器,也可收發數據包。

from DrissionPage import WebPage

3.2 🌏 準備工作

如果只使用收發數據包功能,無需任何準備工作。
如果要控制瀏覽器,需設置瀏覽器路徑。程序默認設置控制 Chrome,所以下面用 Chrome 演示。

開始前,我們先設置一下瀏覽器路徑。
程序默認控制 Chrome,所以下面用 Chrome 演示。 如果要使用 Edge 或其它 Chromium 內核瀏覽器,設置方法是一樣的。

3.2.1 嘗試啟動瀏覽器

默認狀態下,程序會自動在系統內查找 Chrome 路徑。
執行以下代碼,瀏覽器啟動并且訪問了相關網站,如果訪問執行成功說明可直接使用,跳過后面的步驟即可。

from DrissionPage import ChromiumPagepage = ChromiumPage()
page.get('https://www.baidu.com')
3.2.2 設置瀏覽器驅動路徑

如果上面的步驟提示出錯,說明程序沒在系統里找到 Chrome 瀏覽器。
可用以下其中一種方法設置,設置會持久化記錄到默認配置文件,之后程序會使用該設置啟動。
在這里插入圖片描述

  • 📌方法1

    • 新建一個臨時 py 文件,并輸入以下代碼,填入您電腦里的 Chrome 瀏覽器可執行文件路徑,然后運行。

      from DrissionPage import ChromiumOptionspath = r'D:\Chrome\Chrome.exe'  # 請改為你電腦內Chrome可執行文件路徑
      ChromiumOptions().set_browser_path(path).save()
      

      這段代碼會把瀏覽器路徑記錄到配置文件,今后啟動瀏覽器皆以新路徑為準。
      另外,如果是想臨時切換瀏覽器路徑以嘗試運行和操作是否正常,可以去掉 .save(),以如下方式結合第1??步的代碼。

      from DrissionPage import ChromiumPage, ChromiumOptionspath = r'C:\Users\Administrator\AppData\Local\Google\Chrome SxS\Application\chrome.exe'  # 請改為你電腦內Chrome可執行文件路徑
      co = ChromiumOptions().set_browser_path(path)
      page = ChromiumPage(co)
      page.get('http://DrissionPage.cn')
      
  • 📌方法2

    • 在命令行輸入以下命令(路徑改成自己電腦里的):

      dp -p C:\Users\Administrator\AppData\Local\Google\Chrome SxS\Application\chrome.exe
      

      ??注意命令行的 python 環境與項目應是同一個
      ??注意要先使用 cd 命令定位到項目路徑

現在,請重新執行第1??步的代碼,如果正確訪問了目標網址,說明已經設置完成。

from DrissionPage import ChromiumPagepage = ChromiumPage()
page.get('https://www.baidu.com')

??? OK,當您完成以上準備工作以后,無需關閉瀏覽器,后面的上手示例可繼續接管當前瀏覽器。

3.2.3 🌏?控制瀏覽器

現在,我們通過一些例子,來直觀感受一下 DrissionPage 的工作方式。

本示例演示使用ChromiumPage控制瀏覽器登錄 gitee 網站。

from DrissionPage import ChromiumPage# 創建頁面對象,并啟動瀏覽器
page = ChromiumPage()
# 跳轉到登錄頁面
page.get('https://gitee.com/login')# 定位到賬號文本框,獲取文本框元素
ele = page.ele('#user_login')
# 輸入對文本框輸入賬號  
ele.input('你的賬號')
# 定位到密碼文本框并輸入密碼
page.ele('#user_password').input('你的密碼')
# 點擊登錄按鈕:@attrName=value,這是根據屬性和屬性值進行標簽定位的方式
page.ele('@value=登 錄').click()

注意:ele()方法用于查找元素,它返回一個ChromiumElement對象,用于操作元素。值得一提的是,ele()內置了等待,如果元素未加載,它會執行等待,直到元素出現或到達時限。默認超時時間 10 秒。

3.3 收發數據包

本示例演示用SessionPage已收發數據包的方式采集 gitee 網站數據。這個示例的目標,要獲取所有庫的名稱和鏈接,為避免對網站造成壓力,我們只采集 3 頁。網址:https://gitee.com/explore/all

from DrissionPage import SessionPage# 創建頁面/請求對象
page = SessionPage()# 爬取3頁
for i in range(1, 4):# 訪問某一頁的網頁page.get(f'https://gitee.com/explore/all?page={i}')# 獲取所有開源庫<a>元素列表(所有庫的鏈接的a標簽的class屬性值都是一樣的)links = page.eles('.title project-namespace-path')# 遍歷所有<a>元素for link in links:# 打印鏈接信息:print(link.text, link.link)

.text獲取元素的文本,.link獲取元素的hrefsrc屬性。

3.4 模式切換

這個示例演示WebPage如何切換控制瀏覽器和收發數據包兩種模式。
通常,切換模式是用來應付登錄檢查很嚴格的網站,可以用控制瀏覽器的形式處理登錄,再轉換模式用收發數據包的形式來采集數據。

實例:基于瀏覽器控制模式進行gitee的登陸,登錄成功后切換模式基于收發數據包的性質訪問該賬戶的個人主頁,獲取該賬戶主頁左下角所有的組織名稱。

from DrissionPage import ChromiumOptions
from DrissionPage import WebPage# 創建頁面對象
page = WebPage()
# 訪問網址,進行登錄
page.get('https://gitee.com/login?redirect_to_url=%2F')
# 定位到賬號文本框,獲取文本框元素
ele = page.ele('#user_login')
# 輸入對文本框輸入賬號
ele.input('你的賬號')
# 定位到密碼文本框并輸入密碼
page.ele('#user_password').input('你的密碼')
# 點擊登錄按鈕:@attrName=value,這是根據屬性和屬性值進行標簽定位的方式
page.ele('@value=登 錄').click()# 切換到收發數據包模式
page.change_mode() #切換的時候程序會在新模式重新訪問當前 url。
#切換模式后,重新訪問基于登錄狀態后新的url(個人主頁)
page.get('https://gitee.com/muguilin')# 根據class屬性值獲取div標簽,然后將該div下面class為item的元素標簽批量獲取
items = page.ele('.ui middle aligned list').eles('.item')
# 遍歷獲取到的元素
for item in items:# 打印元素文本print(item('.content').text)

四、🗺?ChromiumPage詳解

顧名思義,ChromiumPage是 Chromium 內核瀏覽器的頁面,使用它,我們可與網頁進行交互,如調整窗口大小、滾動頁面、操作彈出框等等。還可以跟頁面中的元素進行交互,如輸入文字、點擊按鈕、選擇下拉菜單、在頁面或元素上運行 JavaScript 代碼等等。

可以說,操控瀏覽器的絕大部分操作,都可以由ChromiumPage及其衍生的對象完成,而它們的功能,還在不斷增加。除了與頁面和元素的交互,ChromiumPage還扮演著瀏覽器控制器的角色,可以說,一個ChromiumPage對象,就是一個瀏覽器。

4.1 啟動和接管瀏覽器

ChromiumPage()創建頁面對象。根據不同的配置,可以接管已打開的瀏覽器,也可以啟動新的瀏覽器。程序結束時,被打開的瀏覽器不會主動關閉,以便下次運行程序時使用(由 VSCode 啟動的會被關閉)。

4.1.1 啟動瀏覽器

這種方式代碼最簡潔,程序會使用默認配置,自動生成頁面對象。創建ChromiumPage對象時會在指定端口啟動瀏覽器。默認情況下,程序使用 9222 端口。

from DrissionPage import ChromiumPagepage = ChromiumPage()

指定端口啟動瀏覽器:

# 啟動9333端口的瀏覽器,如該端口空閑,啟動一個瀏覽器
page = ChromiumPage(9333)
4.1.2 接管瀏覽器

當頁面對象創建時,只要指定的端口port已有瀏覽器在運行,就會直接接管。無論瀏覽器是哪種方式啟動的。比如:先通過如下代碼啟動一個端口為8888的瀏覽器

from DrissionPage import ChromiumPagepage = ChromiumPage(666)

在啟動的端口為8888的瀏覽器中,手動訪問百度頁面,然后使用如下程序測試是否可以接管該瀏覽器:

from DrissionPage import ChromiumPagepage = ChromiumPage(666)
#打印接管瀏覽器的page標題和訪問的url
print(page.title,page.url)
4.1.3 多瀏覽器共存

如果想要同時操作多個瀏覽器,或者自己在使用其中一個上網,同時控制另外幾個瀏覽器跑自動化,就需要給這些被程序控制的瀏覽器設置單獨的端口用戶文件夾,否則會造成沖突。

from DrissionPage import ChromiumPage, ChromiumOptions# 創建多個配置對象,每個指定不同的端口號和用戶文件夾路徑
do1 = ChromiumOptions().set_paths(local_port=9111, user_data_path=r'D:\data1')
do2 = ChromiumOptions().set_paths(local_port=9222, user_data_path=r'D:\data2')# 創建多個頁面對象
page1 = ChromiumPage(addr_or_opts=do1)
page2 = ChromiumPage(addr_or_opts=do2)# 每個頁面對象控制一個瀏覽器
page1.get('https://www.baidu.com')
page2.get('http://www.163.com')

4.2 頁面交互

  • get():該方法用于跳轉到一個網址。當連接失敗時,程序會進行重試。

    page.get('https://www.baidu.com')
    
  • back():此方法用于在瀏覽歷史中后退若干步。

    page.back(2)  # 后退兩個網頁
    
  • forward():此方法用于在瀏覽歷史中前進若干步。

    page.forward(2)  # 前進兩步
    
  • refresh():此方法用于刷新當前頁面。

    page.refresh()  # 刷新頁面
    
  • run_js():此方法用于執行 js 腳本。

    # 用傳入參數的方式執行 js 腳本顯示彈出框顯示 Hello world!
    #參數1:執行的js腳本。參數2:*args表示給js腳本傳遞的參數
    page.run_js('alert(arguments[0]+arguments[1]);', 'Hello', ' world!')
    
  • run_js_loaded():此方法用于運行 js 腳本,執行前等待頁面加載完畢。

    page.run_js_loaded('alert(arguments[0]+arguments[1]);', 'Hello', ' world!')
    
  • scroll.to_bottom():此方法用于滾動頁面到底部,水平位置不變。

    page.scroll.to_bottom()
    

4.3 查找元素

本節介紹 DrissionPage 自創的查找元素語法。
查找語法能用于指明以哪種方式去查找指定元素,定位語法簡潔明了,熟練使用可大幅提高程序可讀性。

🔦 更多頁面或元素內查找:https://drissionpage.cn/browser_control/get_elements/find_in_object

以下使用這個頁面進行講解test.html(可以在pycharm中使用chrome打開該頁面獲取頁面鏈接):

<html>
<body>
<div id="one"><p class="p_cls" id="row1" data="a">第一行</p><p class="p_cls" id="row2" data="b">第二行</p><p class="p_cls">第三行</p>
</div>
<div id="two">第二個div
</div>
</body>
</html>

基本定位語法:注意下面的ele和eles

page.ele:只能定位滿足要求第一次出現的標簽

page.eles:定位到滿足要求所有的標簽

from DrissionPage import ChromiumPagepage = ChromiumPage()
page.get('http://localhost:63342/Code/test.html?_ijt=chuqtur5cikh95asobefg123mf')
#id屬性定位
tag1 = page.ele('@id=one')  # 獲取第一個id為one的元素#文本定位
tag2 = page.ele('@text()=第一行')  # 獲取第一個文本為“第一行”的元素#當需要多個條件同時確定一個元素時,每個屬性用'@@'開頭。
tag3 = page.ele('@@class=p_cls@@text()=第三行')  # 查找class為p_cls且文本為“第三行”的元素#當需要以或關系條件查找元素時,每個屬性用'@|'開頭。
tag4 = page.eles('@|id=row1@|id=row2')  # 查找所有id為row1或id為row2的元素#表示模糊匹配,匹配含有指定字符串的文本或屬性。
tag5 = page.eles('@id:ow')  # 獲取id屬性包含'ow'的元素#表示匹配開頭,匹配開頭為指定字符串的文本或屬性。
tag6 = page.eles('@id^row')  # 獲取id屬性以'row'開頭的元素#表示匹配結尾,匹配結尾為指定字符串的文本或屬性。
tag7 = page.ele('@id$w1')  # 獲取id屬性以'w1'結尾的元素print(tag7)

選擇器定位語法

id選擇器定位:

ele1 = page.ele('#one')  # 查找id為one的元素
ele2 = page.ele('#=one')  # 和上面一行一致
ele3 = page.ele('#:ne')  # 查找id屬性包含ne的元素
ele4 = page.ele('#^on')  # 查找id屬性以on開頭的元素
ele5 = page.ele('#$ne')  # 查找id屬性以ne結尾的元素

class選擇器定位:

e1 = page.ele('.p_cls')  # 查找class屬性為p_cls的元素
e2 = page.ele('.=p_cls')  # 與上一行一致
e3 = page.ele('.:_cls')  # 查找class屬性包含_cls的元素
e4 = page.ele('.^p_')  # 查找class屬性以p_開頭的元素
e5 = page.ele('.$_cls')  # 查找class屬性以_cls結尾的元素

文本選擇器定位:

element1 = page.ele('text=第二行')  # 查找文本為“第二行”的元素
element2 = page.ele('text:第二')  # 查找文本包含“第二”的元素
element3 = page.ele('第二')  # 與上一行一致

標簽選擇器定位:

ele1 = page.ele('tag:div')  # 查找第一個div元素
ele2 = page.ele('tag:p@class=p_cls')  # 與單屬性查找配合使用
ele3 = page.ele('tag:p@@class=p_cls@@text()=第二行')  # 與多屬性查找配合使用

xpath定位:

eles = page.eles('xpath://div/p[@id="row1"]')

🚀查看更多語法:https://drissionpage.cn/browser_control/get_elements/sheet

4.4 獲取元素信息的常用屬性或方法

屬性或方法說明
html此屬性返回元素的 HTML 文本(不包括<iframe>內容)
inner_html此屬性返回元素內部的 HTML 文本
tag此屬性返回元素的標簽名
text此屬性返回元素內所有文本組合成的字符串
texts()此方法返回元素內所有直接子節點的文本(列表)
attrs此屬性以字典形式返回元素所有屬性及值
attr('attrName')此方法返回元素某個 attribute 屬性值
link此方法返回元素的 href 屬性或 src 屬性
xpath此屬性返回當前元素在頁面中 xpath 的絕對路徑

元素列表中批量獲取信息

eles()等返回的元素列表,自帶get屬性,可用于獲取指定信息。

from DrissionPage import SessionPagepage = SessionPage()
page.get('https://www.baidu.com')
eles = page.ele('#s-top-left').eles('t:a')
print(eles.get.texts())  # 獲取所有元素的文本
print(eles.get.links())  # 獲取所有元素的鏈接
print(eles.get.attrs("class"))  # 獲取所有元素的指定屬性值

五、🗺?SessionPage詳解

顧名思義,SessionPage是一個使用Session(requests 庫)對象的頁面,且它還封裝了網絡連接和 html 解析功能,使收發數據包也可以像操作頁面一樣便利。
并且,由于加入了本庫獨創的查找元素方法,使數據的采集便利性遠超 requests + beautifulsoup 等組合。

🚀了解更多:https://drissionpage.cn/SessionPage/intro
獲取 gitee 推薦項目第一頁所有項目。

# 導入
from DrissionPage import SessionPage
# 創建頁面對象
page = SessionPage()
# 訪問網頁
page.get('https://gitee.com/explore/all')
# 在頁面中查找元素
items = page.eles('tag:h3')
# 遍歷元素
for item in items[:-1]:# 獲取當前<h3>元素下的<a>元素lnk = item('tag:a')# 打印<a>元素文本和href屬性print(lnk.text, lnk.link)

5.1 get請求

get()方法語法與 requests 的get()方法一致,在此基礎上增加了連接失敗重試功能。與 requests 不一樣的是,它不返回Response對象,而是返回一個bool值,表示請求是否成功。

示例:請求51游戲指定關鍵字對應的搜索結果頁面

from DrissionPage import SessionPagepage = SessionPage()
url = 'https://game.51.com/search/action/game/'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36'}
cookies = {'name': 'value'}
# proxies = {'http': '127.0.0.1:1080', 'https': '127.0.0.1:1080'}
param = {"q":'傳奇'}
page.get(url, headers=headers, cookies=cookies,params=param,proxies=None)
print(page.html,page.title)

其他參數:

在這里插入圖片描述

5.2 post請求

請求:中國人事考試網—站內搜索:http://www.cpta.com.cn/category/search.html

from DrissionPage import SessionPagepage = SessionPage()
url = 'http://www.cpta.com.cn/category/search'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36'}
cookies = {'name': 'value'}
# proxies = {'http': '127.0.0.1:1080', 'https': '127.0.0.1:1080'}
data = {"keywords":'財務','搜索':'搜索'}
page.post(url, headers=headers, cookies=cookies,data=data,proxies=None)
print(page.html,page.title)

注意:在get和post請求中,headers中的User-Agent可以不寫,因為SessionPage和WebPage在創建頁面對象時會自動加載一個ini的配置文件,該配置文件中已經存在了User-Agent。

ini 文件初始內容如下:

......
[session_options]
headers = {'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/603.3.8 (KHTML, like Gecko) Version/10.1.2 Safari/603.3.8', 'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'connection': 'keep-alive', 'accept-charset': 'GB2312,utf-8;q=0.7,*;q=0.7'}[timeouts]
base = 10
page_load = 30
script = 30[proxies]
http =
https = [others]
retry_times = 3
retry_interval = 2

5.3 page對象常用屬性

url:此屬性返回當前訪問的 url。
title:此屬性返回當前頁面title文本。
raw_data:此屬性返回訪問到的二進制數據,即Response對象的content屬性。
html:此屬性返回當前頁面 html 文本。
json:此屬性把返回內容解析成 json。比如請求接口時,若返回內容是 json 格式,用html屬性獲取的話會得到一個字符串,用此屬性獲取可將其解析成dict。

六、🗺?WebPage詳解

WebPage覆蓋了ChromiumPage所有功能,并且增加了切換模式功能,創建的標簽頁對象為MixTab。

from DrissionPage import WebPagepage = WebPage()page.get('https://gitee.com/login')# 定位到賬號文本框,獲取文本框元素
ele = page.ele('#user_login')# 輸入對文本框輸入賬號
ele.input('你的賬號')# 定位到密碼文本框并輸入密碼
page.ele('#user_password').input('你的密碼')# 點擊登錄按鈕
page.ele('@value=登 錄').click()"""
登錄成功后,就可以進行相應的請求發送了
"""
# 模式切換 https://drissionpage.cn/get_start/examples/switch_mode
page.change_mode()# 獲取個人主頁的推薦項目
self_page = 'https://gitee.com/muguilin'
page.get(self_page)# 獲取所有行元素
items = page.ele('#popular-pinned-projects').eles('.ui card fluid')
# 遍歷獲取到的元素
for item in items:# 打印元素文本# print(item('t:h3').text)print(item('.content').text)print()

擴展

?下載文件

DrissionPage 帶一個簡便易用的下載器,一行即可實現下載功能。

from DrissionPage import SessionPageurl = 'https://www.baidu.com/img/flexible/logo/pc/result.png'
save_path = r'C:\download'page = SessionPage()
page.download(url, save_path)

🥬設置 cookies

🥦 設置 cookieshttps://drissionpage.cn/tutorials/functions/set_cookies
頁面對象中設置

任意頁面對象都有set.cookies()方法,用于設置 cookies。
該方法接收多種格式的 cookies 信息,可設置一個或多個 cookies。
使用瀏覽器時,任意頁面對象設置的 cookies 是所有標簽頁共用的(由new_tab(new_context=True)創建的標簽頁除外)。

示例:

from DrissionPage import Chromiumtab = Chromium().latest_tab
cookies = 'name1=value1; name2=value2; path=/; domain=.example.com;'tab.set.cookies(cookies)

刪除 cookies
頁面對象用set.cookies.remove()和set.cookies.clear()刪除和清空 cookies。
SessionOptions對象用set_cookies(None)清空 cookies。
具體用法詳見使用文檔有關章節。

? 常見問題

? 如何禁用保存密碼、恢復頁面等提示氣泡?
瀏覽器提示氣泡出現時可以手動關閉,不關閉也不影響自動操作,在代碼中阻止其顯示也是可以的。 加一些瀏覽器配置代碼即可禁止相應的氣泡顯示,需要添加下面這樣的代碼:

co = ChromiumOptions()# 阻止“自動保存密碼”的提示氣泡
co.set_pref('credentials_enable_service', False)# 阻止“要恢復頁面嗎?Chrome未正確關閉”的提示氣泡
co.set_argument('--hide-crash-restore-bubble')

? 如何使用啟動參數、用戶配置、實驗項等功能?
arguments 啟動參數

  • 使用參考:http://DrissionPage.cn/ChromiumPage/browser_opt#-set_argument

  • 參數詳見:https://peter.sh/experiments/chromium-command-line-switches/
    prefs 用戶配置

  • 使用參考:http://DrissionPage.cn/ChromiumPage/browser_opt#-set_pref

  • 參數詳見:https://src.chromium.org/viewvc/chrome/trunk/src/chrome/common/pref_names.cc
    flags 實驗項

  • 使用參考:http://DrissionPage.cn/ChromiumPage/browser_opt#-set_flag

  • 參數詳見:chrome://flags

🚀更多常見問題https://drissionpage.cn/tutorials/QandA

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/73254.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/73254.shtml
英文地址,請注明出處:http://en.pswp.cn/web/73254.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【操作系統安全】任務3:Linux 網絡安全實戰命令手冊

目錄 一、基礎網絡信息獲取 1. 網絡接口配置 2. 路由表管理 3. 服務端口監控 二、網絡監控與分析 1. 實時流量監控 2. 數據包捕獲 3. 網絡協議分析 三、滲透測試工具集 1. 端口掃描 2. 漏洞利用 3. 密碼破解 四、日志審計與分析 1. 系統日志處理 2. 入侵檢測 3…

社群經濟4.0時代:開源鏈動模式與AI技術驅動的電商生態重構

摘要&#xff1a;在Web3.0技術浪潮與私域流量紅利的雙重驅動下&#xff0c;電商行業正經歷從"流量收割"到"用戶深耕"的范式轉變。本文基于社群經濟理論框架&#xff0c;結合"開源鏈動21模式"、AI智能名片、S2B2C商城小程序源碼等創新工具&#x…

從技術架構和生態考慮,不是單純的配置優化,還有哪些方式可以提高spark的計算性能

從技術架構和生態系統層面提升Spark的計算性能&#xff0c;可采取以下核心策略&#xff1a; 一、計算模型重構與執行引擎升級 1. 彈性分布式數據集&#xff08;RDD&#xff09;的血統優化 通過RDD的Lineage&#xff08;血統&#xff09;機制實現容錯時&#xff0c;采用增量式…

AI對軟件工程(software engineering)的影響在哪些方面?

AI對軟件工程&#xff08;software engineering&#xff09;的影響是全方位且深遠的&#xff0c;它不僅改變了傳統開發流程&#xff0c;還重新定義了工程師的角色和軟件系統的構建方式。以下是AI影響軟件工程的核心維度&#xff1a; 一、開發流程的智能化重構 需求工程革命 ? …

數據庫取證分析

目錄 一.多表關聯 1.一對多聯結 2.子查詢 二.數據庫示例分析 1.多表關聯 三.選擇SQL分析的原因 四.數據庫概述 五.SQL語言 一.多表關聯 1.一對多聯結 2.子查詢 二.數據庫示例分析 1.多表關聯 三.選擇SQL分析的原因 四.數據庫概述 五.SQL語言 1.select 字段

Docker 部署 Graylog 日志管理系統

Docker 部署 Graylog 日志管理系統 前言一、準備工作二、Docker Compose 配置三、啟動 Graylog 服務四、訪問 Graylog Web 界面總結 前言 Graylog 是一個開源的日志管理平臺&#xff0c;專為實時日志收集、分析和可視化設計。它支持強大的搜索功能&#xff0c;并且與 Elastics…

Matlab2024a免費版下載教程

Matlab是一個高性能的數學計算與仿真軟件&#xff0c;廣泛應用于科學計算、數據分析、算法開發以及工程繪圖等多個領域。它提供了強大的矩陣運算能力、豐富的內置函數庫以及靈活的編程環境&#xff0c;使得用戶能夠高效地解決復雜的數學問題。本文&#xff0c;我將為大家詳細介…

網絡運維學習筆記(DeepSeek優化版) 022 HCIP-Datacom路由概念、BFD協議詳解與OSPF第一課

文章目錄 路由概念、BFD協議詳解與OSPF第一課一、路由協議優先級與選路原則1.1 路由協議優先級對照表1.2 路由選路核心原則 二、BFD&#xff08;Bidirectional Forwarding Detection&#xff0c;雙向轉發檢測&#xff09;的配置與應用2.1 雙向心跳探測&#xff08;雙端配置&…

【基礎】Windows 中通過 VSCode 使用 GCC 編譯調試 C++

準備 安裝 VSCode 及 C 插件。通過 MSYS2 安裝 MinGW-w64 工具鏈&#xff0c;為您提供必要的工具來編譯代碼、調試代碼并配置它以使用IntelliSense。參考&#xff1a;Windows 中的 Linux 開發工具鏈 驗證安裝&#xff1a; gcc --version g --version gdb --version三個核心配…

python機器學習——新手入門學習筆記

一&#xff0c;概論 1.什么是機器學習 定義&#xff1a; 機器學習是從數據中自動分析獲得模型&#xff0c;并利用模型對未知數據進行預測。 其實就是通過問題和數據&#xff0c;發現規律&#xff0c;并進行預測&#xff0c;與人腦相似。目的就是從歷史數據當中獲得規律&#x…

Jackson使用ArrayNode對象實現JSON列表數據(二):增、刪、改、查

JSON數據的操作,系列文章: 《Jackson的核心類與API方法:ObjectMapper、JsonNode、ObjectNode、ArrayNode》 《Jackson的使用與創建Jackson工具類》 《Jackson使用ObjectNode對象實現JSON對象數據(一):增、刪、改、查》 《Jackson使用ArrayNode對象實現JSON列表數據(二)…

Packaging Process

Packaging Process 軟包裝流程&#xff0c;在我們自動化設備的情況下&#xff0c;最后實現自動化工具 一小盒2袋&#xff0c;一大盒3小盒&#xff0c;一大盒6袋

地理信息系統(GIS)在智慧城市中的40個應用場景案例

在智慧城市發展進程中&#xff0c;地理信息系統&#xff08;GIS&#xff09;作為關鍵技術之一&#xff0c;正扮演著不可或缺的角色&#xff0c;堪稱智慧城市的神經中樞。通過空間數據分析優化城市管理&#xff0c;GIS技術為智慧城市的構建提供了強大的支持。 本文分享了GIS在智…

在 Jenkins Pipeline 中利用 Groovy 的閉包特性創建自定義語法糖

在 Jenkins Pipeline 中利用 Groovy 的閉包特性創建自定義語法糖&#xff0c;可以讓流水線代碼更簡潔易讀。以下是實現思路和示例&#xff1a; 1. 基礎閉包方法定義 // 定義一個優雅的 stage 語法 def elegantStage(String name, Closure body) { stage(name) { ec…

【藍橋杯】每日練習 Day11 逆序對問題和多路歸并

目錄 前言 超快速排序 分析 代碼 小朋友排隊 分析 代碼 魚塘釣魚 分析 代碼 前言 本來計劃今天寫五道題的&#xff0c;結果計劃趕不上變化&#xff0c;誰能告訴我我的時間都去哪了。。。 今天給大家帶來三道題目&#xff0c;兩道逆序對問題&#xff0c;分別用歸并排…

OpenCV 圖像基本操作

之前幾篇文章介紹了OpenCV的一些模塊概念,并沒有細說每個模塊具體的方法和使用。接下來就會詳細介紹每個模塊模塊包含的方法和使用。 本文將詳細介紹圖像的四種基本操作:訪問和修改像素值、圖像 ROI (Region of Interest) 操作、圖像通道分離與合并、以及圖像的縮放、旋轉、…

酷淘商場項目【從零到一詳解】Web端

?博客主頁&#xff1a; https://blog.csdn.net/m0_63815035?typeblog &#x1f497;《博客內容》&#xff1a;.NET、Java.測試開發、Python、Android、Go、Node、Android前端小程序等相關領域知識 &#x1f4e2;博客專欄&#xff1a; https://blog.csdn.net/m0_63815035/cat…

Gemini 2.0 Flash 圖片去水印測試

Gemini 2.0 Flash 模型不僅會生成包含名人和受版權保護角色的圖像&#xff0c;還會去除現有照片中的水印。 據 X 和 Reddit 上的多位用戶指出&#xff0c;Gemini 2.0 Flash 模型不僅會去除水印&#xff0c;還會嘗試填補因水印刪除而產生的空白區域。其他基于人工智能的工具也能…

STM32學習筆記之keil使用記錄

&#x1f4e2;&#xff1a;如果你也對機器人、人工智能感興趣&#xff0c;看來我們志同道合? &#x1f4e2;&#xff1a;不妨瀏覽一下我的博客主頁【https://blog.csdn.net/weixin_51244852】 &#x1f4e2;&#xff1a;文章若有幸對你有幫助&#xff0c;可點贊 &#x1f44d;…

MQTT消息服務器新玩法:EMQX結合內網穿透的實戰配置指南

文章目錄 前言1. 查看EMQX本地WS端口2. Linux安裝Cpolar工具3. 配置WS公網連接地址4. WS公網地址連接測試5. 配置WSS公網連接地址6. WSS公網地址連接測試 前言 隨著物聯網技術的不斷發展&#xff0c;MQTT作為一種輕量級的消息發布/訂閱協議&#xff0c;在物聯網通信中扮演著越…