請教各位大神
在撰寫 python playwright 時
使用 cookie 驗證的功能
並希望操作記錄使用 tracing 儲存
以下代碼使用 playwright show-trace trace.zip 查看時
只有記錄到 bing 的日誌,但沒有 msn 的操作記
試了許久還是一頭悶
所以,想來請教應如何修改,才能在加載不同的 cookie 時,tracing 也能記錄到二個網站的操作記錄,謝謝
from playwright.sync_api import Playwright, sync_playwright
def run(playwright: Playwright) -> None:
browser = playwright.chromium.launch(headless=False)
context = browser.new_context(storage_state="bing.json")
context.tracing.start(name="trace", screenshots=True, snapshots=True, sources=True)
page = context.new_page()
page.goto("https://www.bing.com/")
page = browser.new_page(storage_state="msn.json")
page.goto("https://www.msn.com/zh-tw")
context.tracing.stop(path = "./log/trace.zip")
with sync_playwright() as playwright:
run(playwright)
感覺你搞混了你的架構。
你在 context = browser.new_context(storage_state="bing.json")
新增一個 BrowserContext
類別的實例(暫時暱稱 BContext_A
), 並欲對其操作, 例如:
context.tracing.start(...)
: 啟動 BContext_A
下的 Tracing
。page = context.new_page()
: 在 BContext_A
下新增一個 Page
類別的實例。後續,你在 page = browser.new_page(storage_state="msn.json")
新增一個 Page
類別的實例; 而依據 這裡 所言: Creates a new page in a new browser context.
, 表示你的 page = browser.new_page(...)
之 page 是新 BrowserContext
(暫時暱稱 BContext_B
)內的新 Page
。
程式碼的這裡之後的 page 之操作, 就一直是針對 BContext_B
的 Page
而不是 BContext_A
的 Page
; 而在 BContext_B
的操作自然不會紀錄於 BContext_A
下的 Tracing
。
至於你的「加載不同的 cookie 時,tracing 也能記錄到二個網站的操作記錄」, 我頂多只有看到 add_cookies() 這種手段 (就是你在 討論 補充說明的那個方式)。