Playwright Python添加Cookie至BrowserContext后浏览器不显示问题
我用Python的Playwright给浏览器Context添加了Cookie,打印Context的Cookie能看到新增的条目,但在浏览器DevTools里看不到这个Cookie。请问怎么让浏览器同步Context中的Cookie?
我的代码如下:
from playwright.sync_api import sync_playwright with sync_playwright() as p: browser = p.chromium.launch(headless = False,devtools=True) context = browser.new_context() page = context.new_page() page.goto("https://crawler-test.com/") # 定义测试Cookie cookies = [{'name': 'temp', 'value': 'temp', 'domain': 'temp.com', 'path': '/'}] # 给Context添加Cookie context.add_cookies(cookies) # 打印Context中的Cookie print(context.cookies()) browser.close()
终端输出:
[{'name': '_ga_78MMTFSGVB', 'value': 'GS1......', 'domain': '.crawler-test.com', 'path': '/', 'expires': 1, 'httpOnly': False, 'secure': False, 'sameSite': 'Lax'}, {'name': '_ga', 'value': 'GA1......', 'domain': '.crawler-test.com', 'path': '/', 'expires': 1, 'httpOnly': False, 'secure': False, 'sameSite': 'Lax'}, {'name': '_gid', 'value': 'GA1.......', 'domain': '.crawler-test.com', 'path': '/', 'expires': 1, 'httpOnly': False, 'secure': False, 'sameSite': 'Lax'}, {'name': '_gat_UA-7097885-11', 'value': '1', 'domain': '.crawler-test.com', 'path': '/', 'expires': 1, 'httpOnly': False, 'secure': False, 'sameSite': 'Lax'}, {'name': 'temp', 'value': 'temp', 'domain': 'temp.com', 'path': '/', 'expires': -1, 'httpOnly': False, 'secure': False, 'sameSite': 'Lax'}]
从输出能看到temp Cookie已经成功添加到Context,但浏览器DevTools里看不到它。
原因分析
问题出在Cookie的domain设置上:你添加的Cookie域名是temp.com,但当前页面访问的是crawler-test.com。浏览器的安全机制决定了,DevTools只会显示当前页面域名(及其父域名)对应的Cookie,跨域名的Cookie不会在当前页面的DevTools中展示——但这个Cookie确实存在于Context中,只是当前页面无权访问,所以看不到。
解决方法
方法1:修改Cookie的域名匹配当前页面
把Cookie的domain改成当前页面的域名(或其父域名),这样添加后就能在当前页面的DevTools里看到了。同时建议加个延迟,避免浏览器过快关闭来不及查看:
from playwright.sync_api import sync_playwright with sync_playwright() as p: browser = p.chromium.launch(headless=False, devtools=True) context = browser.new_context() page = context.new_page() page.goto("https://crawler-test.com/") # 将域名改为当前页面的域名 cookies = [{'name': 'temp', 'value': 'temp', 'domain': '.crawler-test.com', 'path': '/'}] context.add_cookies(cookies) print(context.cookies()) # 停留10秒方便查看DevTools page.wait_for_timeout(10000) browser.close()
方法2:访问Cookie对应的域名页面
如果确实需要给temp.com添加Cookie,那添加后访问temp.com(或其子域名)的页面,此时在该页面的DevTools里就能看到这个Cookie了:
from playwright.sync_api import sync_playwright with sync_playwright() as p: browser = p.chromium.launch(headless=False, devtools=True) context = browser.new_context() page = context.new_page() # 先添加Cookie cookies = [{'name': 'temp', 'value': 'temp', 'domain': 'temp.com', 'path': '/'}] context.add_cookies(cookies) # 访问Cookie对应的域名页面 page.goto("https://temp.com") print(context.cookies()) page.wait_for_timeout(10000) browser.close()
内容的提问来源于stack exchange,提问作者Mohsen_Fatemi
相关产品推荐
相关产品推荐

