python - Python:如何在请求中使用 Chrome cookie
问题描述
我正在寻找一种方法来从我的 chrome 浏览器(默认)获取我的 cookie,并使用请求来使用它。
我当然已经四处搜索,例如找到了这个;如何使用 Python 从网络浏览器获取 cookie? 但这不再起作用了,因为 Chrome 一直在更新。他们在答案中命名的模块最后一次测试是在 2016 年。
所以,他们在答案中给出的代码是+我额外的东西来取回饼干
import win32crypt
import browsercookie
import requests
session = requests.Session()
cj = browsercookie.chrome()
r = session.get("https://stackoverflow.com/", cookies=cj)
print session.cookies.get_dict()
但是当我运行它时(在我的浏览器上登录到 stackoverflow 时),它返回{}
. 这并不多(不是我想要的结果)
解决方案
汤姆斯的回答对我来说效果很好,甚至是我在 Windows 7 中工作以爬取需要登录的网站的唯一方法。但是,对于 Windows 10 和 Chrome 80 cookie 处理(SameSite Cookies),似乎有一种新的加密方式——“get_cookies”方法提供的 cookie 具有所有空值(Python 3)。
现在对我有用的是browser_cookie3(browsercookie 的分支,几天前才更新以与 Chrome 80 一起使用)。我将它与请求和硒一起使用。
在提升的提示符下安装
pip3 install browser-cookie3
使用请求:
import browser_cookie3
cookies = browser_cookie3.chrome(domain_name='.google.com')
response = requests.get('http://www.google.com', verify=False, headers=headers, cookies=cookies, timeout=3)
将 google.com 与您需要的 cookie 的域交换。并确保包含超时参数,否则您的脚本可能会冻结。headers 只是一个包含所有标题的对象,例如
headers = {
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36",
"Accept-Encoding":"gzip, deflate",
"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"DNT":"1",
"Connection":"close",
"Upgrade-Insecure-Requests":"1"
}
或类似的东西。
与硒一起使用:
import browser_cookie3
driver = webdriver.Chrome('./chromedriver')
cookies = browser_cookie3.chrome(domain_name='.google.com')
for c in cookies:
cookie = {'domain': c.domain, 'name': c.name, 'value': c.value, 'secure': c.secure and True or False}
driver.add_cookie(cookie)
driver.get('http://www.google.com')
./chromedriver 是我的 chromedriver.exe 所在的位置。
推荐阅读
- nagios - NRPE:远程不支持版本 3 数据包
- c# - 找不到 BaseCommandModule 类,与正在使用的正确命名空间相反
- excel - 添加个性化右键单击选项后更改工作表
- vba - Excel VBA 宏将当前工作簿的选择作为电子邮件的附件发送
- c# - 使用 Bearer Token 在 C# 中构建 post HttpClient 请求
- python - 如何查看 sqlalchemy 数据库?
- reactjs - React Native WebView 中的 React Facebook 登录
- python - 无法使用 bs4、python 和 selenium 抓取标题
- html - 在线显示 2 个元素,并且仍然可以垂直调整任一元素
- sql - spark.sql() 的 REGEXP_REPLACE