首先,抱歉我的英语很差
我想用剧作家饼干,但我不能。我试了三种方法,但都没用。
- 使用
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
- 使用
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>>>
- 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)