尝试使用Chrome扩展程序从页面获取所有Cookie。
例如页面os https://ya.ru。
这是我的代码:
chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
var domain = getDomain(tabs[0].url);
chrome.cookies.getAll({
domain: domain
}, function(cookies) {
console.log(cookies);
});
});
此代码将返回域ya.ru的所有cookie(8)。 但问题是当我打开浏览器控制台时,我不仅看到了ya.ru域名的cookie:
谷歌和其他网站的情况相同。所以我在一个页面上有多个域cookie。如何在页面上获取所有cookie?
感谢您的时间。
答案 0 :(得分:2)
Devtools显示页面请求的所有资源URL(source code)的Cookie,因此我们可以通过访问我们将在页面中执行的内容脚本代码中的Performance API来执行相同操作:
chrome.tabs.executeScript({
code: 'performance.getEntriesByType("resource").map(e => e.name)',
}, data => {
if (chrome.runtime.lastError || !data || !data[0]) return;
const urls = data[0].map(url => url.split(/[#?]/)[0]);
const uniqueUrls = [...new Set(urls).values()].filter(Boolean);
Promise.all(
uniqueUrls.map(url =>
new Promise(resolve => {
chrome.cookies.getAll({url}, resolve);
})
)
).then(results => {
// convert the array of arrays into a deduplicated flat array of cookies
const cookies = [
...new Map(
[].concat(...results)
.map(c => [JSON.stringify(c), c])
).values()
];
// do something with the cookies here
console.log(uniqueUrls, cookies);
});
});
重要说明:
您的manifest.json应该在"<all_urls>"
中有"permissions"
或明确的网址匹配模式列表,以便在chrome.cookies.getAll中显示相应的结果。
当有数千个Cookie时,上面的Cookie重复数据删除代码可能会很慢。
我们正在为网址而非域名阅读Cookie,因为它是获取包含cookie(imgur.com)的唯一可靠方式,例如i.stack.imgur.com