首先,为我糟糕的英语道歉
我想用剧作家来得到饼干,但我不能。我试了三种方法,我发现,但没有得到。
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
解析后的!Thx用于@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.使用JS
cookie = page.evaluate('console.log(document.cookie)')
print(cookie)
>>>
None
我从Chromium页面打开了网络选项卡,在Requests的头中有我想要的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()
1条答案
按热度按时间luaexgnf1#
在第二个方法中,将
cookies = context.cookies
更改为cookies = context.cookies()
。这是一个方法,您需要调用它。请查看文档:另外,像第一个方法那样做也是不可取的。这是因为即使你从响应中得到了
Cookie
头,你也不能在其他地方存储和使用它,除非你使用一个工厂函数或一个全局变量。此外,当BrowserContext
有一个专门的方法时,为什么要这样做呢:)编辑
第一种方法看起来不起作用的原因是它返回了请求和响应的标题。Cookie也可以通过页面本身的javascript创建,这些可能根本不会显示在标题中。
第二,从你为问题中的第一个方法打印出的头文件来看,它似乎只是针对一个请求。运行你的代码后,收到了更多的请求和响应,这就打印出了更多的头文件。特别是从响应中,你可以通过搜索头文件
'set-cookie'
来检索服务器设置的cookie。