請教各位大神
在撰寫 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() 這種手段 (就是你在 討論 補充說明的那個方式)。