iT邦幫忙

0

使用 python 撰寫 playwright 在不同的網站分別加載 cookie 後 tracing 失敗問題

  • 分享至 

  • xImage

請教各位大神
在撰寫 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)
newell iT邦新手 3 級 ‧ 2023-05-03 14:55:23 檢舉
又花了許久的時間,還是找不到最優解,
問了下 ChatGPT ,也是回答了一堆錯誤的答案
在某次的回復中,查看到不同的思路
如果 tracing 只能使用同一個 context
那就換個匯入/匯出 cookie 的方式
cookies = context.cookies() # 匯出 cookie
with open('auth/cookies_fishmsg.json', 'w') as f:
json.dump(cookies, f)
with open('auth/cookies_fishmsg.json', 'r') as f:
cookies = json.load(f) # 載入 cookie
context.add_cookies(cookies)

只是不知有何其它方式可使用 context 啊~
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
re.Zero
iT邦研究生 5 級 ‧ 2023-05-03 23:13:36

感覺你搞混了你的架構。

你在 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_BPage 而不是 BContext_APage ; 而在 BContext_B 的操作自然不會紀錄於 BContext_A 下的 Tracing

至於你的「加載不同的 cookie 時,tracing 也能記錄到二個網站的操作記錄」, 我頂多只有看到 add_cookies() 這種手段 (就是你在 討論 補充說明的那個方式)。

我要發表回答

立即登入回答