为什么我无法在剧作家中获得 cookie 值?



首先,抱歉我的英语很差

我想用剧作家饼干,但我不能。我试了三种方法,但都没用。

  1. 使用page.on
page.on('request',get_cookie)
page.on('response',get_cookie)
def get_cookie(request):
allheaders = request.all_headers()
print(allheaders)

>>>
{'accept-ranges': 'bytes', 'age': '9576', 'cache-control': 'max-age=600', 'content-length': '6745', 'content-type': 'image/png', 'date': 'Thu, 30 Jun 2022 01:09:20 GMT', 'etag': '"206578bcab2ad71:0"', 'expires': 'Thu, 30 Jun 2022 01:19:20 GMT', 'last-modified': 'Tue, 06 Apr 2021 06:11:52 GMT', 'server': 'NWS_SPMid', 'x-cache-lookup': 'Cache Hit', 'x-daa-tunnel': 'hop_count=1', 'x-nws-log-uuid': '16892018456232999193', 'x-powered-by': 'ASP.NET'}
{'accept-ranges': 'bytes', 'age': '9576', 'cache-control': 'max-age=600', 'content-length': '6745', 'content-type': 'image/png', 'date': 'Thu, 30 Jun 2022 01:09:20 GMT', 'etag': '"206578bcab2ad71:0"', 'expires': 'Thu, 30 Jun 2022 01:19:20 GMT', 'last-modified': 'Tue, 06 Apr 2021 06:11:52 GMT', 'server': 'NWS_SPMid', 'x-cache-lookup': 'Cache Hit', 'x-daa-tunnel': 'hop_count=1', 'x-nws-log-uuid': '16892018456232999193', 'x-powered-by': 'ASP.NET'}
...(and more like this)

返回了一些东西,但是这里没有cookie


  1. 使用browser_context.cookies已解决!谢谢@Charchit
context = browser.new_context();
page = context.new_page()
page.goto(url)
cookies = context.cookies
print(cookies)
>>>
<bound method BrowserContext.cookies of <BrowserContext browser=<Browser type=<BrowserType name=chromium executable_path=/Users/swong/Library/Caches/ms-playwright/chromium-1005/chrome-mac/Chromium.app/Contents/MacOS/Chromium> version=102.0.5005.40>>>

  1. Using
cookie = page.evaluate('console.log(document.cookie)')
print(cookie)
>>>
None

我从Chromium页面打开网络选项卡,在请求头中有我想要的cookie。

请帮助我,谢谢大家!

下面是我的代码示例。这个网站是中文的,希望你不要介意。这只是一个简单的登录页面。
from playwright.sync_api import sync_playwright
url = 'https://so.gushiwen.cn/user/login.aspx'
def get_cookie(request_or_reqponse):
headersArray = request_or_reqponse.headers_array()
print('「headersArray」:', headersArray)

with sync_playwright() as p:
browser = p.chromium.launch(headless=False)
context = browser.new_context();
page = context.new_page()
page.goto(url)
page.fill('#email','6j3y4ecy@spymail.one')
page.fill('#pwd', '6j3y4ecy@spymail.one')
page.wait_for_timeout(5000) # imput the captcha code manually
page.on('request',get_cookie)
page.on('response',get_cookie)
print('loging in...')
page.click('#denglu')
page.wait_for_timeout(50000) # wait for nothing
browser.close()

在第二种方法中,将cookies = context.cookies更改为cookies = context.cookies()。它是一个方法,你需要调用它。查看文档:

context = browser.new_context();
page = context.new_page()
page.goto(url)
cookies = context.cookies()
print(cookies)

同样,采用第一种方法也是不可取的。这是因为即使您从响应中获得Cookie标头,您也不能真正存储和使用它,除非您使用工厂函数或全局变量。此外,当BrowserContext有专门的方法时,为什么要这样做呢?)

编辑

第一个方法似乎不起作用的原因是因为它返回请求和响应的标头。cookie也可以通过javascript在页面上创建,这些cookie可能根本不会显示在标题中。

其次,从您在问题中为第一个方法打印出的标题来看,似乎它仅适用于单个请求。在运行代码之后,接收到更多的请求和响应,这些请求和响应相应地打印出更多的头文件。特别是从响应中,您可以通过搜索标题'set-cookie'来检索服务器设置的cookie。

它适合我

browser = playwright.chromium.launch()
page = browser.new_page()
page.goto('https://stackoverflow.com')
cookies = page.context.cookies()
print(cookies)

相关内容

  • 没有找到相关文章

最新更新