Npm 我怎样才能自动接受任何URL的cookie同意提示?

Npm 我怎样才能自动接受任何URL的cookie同意提示?,npm,puppeteer,google-chrome-headless,Npm,Puppeteer,Google Chrome Headless,使用Pupeter拍摄网站截图时,会显示cookie同意提示。在截图之前,我想取消或接受这些提示。我面临的问题是,大多数网站以不同的方式呈现cookie提示,因此很难将它们分离出来 如何使用pupeter最好地定位并消除这些提示?我不相信有一种通用的方法可以做到这一点,因为这些提示与页面中的其他元素一样。话虽如此,仍有一些尝试通过扩展或过滤器列表阻止它们,您可以尝试: 我没有测试过任何一种,也不知道它们是否有效 请记住,无头镀铬不支持扩展。木偶演员中的加载扩展: const browse

使用Pupeter拍摄网站截图时,会显示cookie同意提示。在截图之前,我想取消或接受这些提示。我面临的问题是,大多数网站以不同的方式呈现cookie提示,因此很难将它们分离出来


如何使用pupeter最好地定位并消除这些提示?

我不相信有一种通用的方法可以做到这一点,因为这些提示与页面中的其他元素一样。话虽如此,仍有一些尝试通过扩展或过滤器列表阻止它们,您可以尝试:

我没有测试过任何一种,也不知道它们是否有效

请记住,无头镀铬不支持扩展。木偶演员中的加载扩展:

const browser=wait puppeter.launch({
无头:是的,
args:[
“--禁用扩展,除了=/path/to/manifest/folder/”,
“--加载扩展=/path/to/manifest/folder/”,
]
});

我不相信有一种通用的方法可以做到这一点,因为这些提示与页面中的其他元素类似。话虽如此,仍有一些尝试通过扩展或过滤器列表阻止它们,您可以尝试:

我没有测试过任何一种,也不知道它们是否有效

请记住,无头镀铬不支持扩展。木偶演员中的加载扩展:

const browser=wait puppeter.launch({
无头:是的,
args:[
“--禁用扩展,除了=/path/to/manifest/folder/”,
“--加载扩展=/path/to/manifest/folder/”,
]
});

更新:与无头木偶演员作战的更通用方法

这种方法也远未完成,但显示了一种以不太具体的方式消除cookie同意弹出窗口的有效方法。它使用语言和通用选择器来检测同意按钮和链接,而不是仅仅依赖每个网站的精确选择器

在下面的示例中,我将目标锁定在容器中的元素
a,button
,该容器在
id,class
中使用名称cookie。我在这个上下文中限制了按钮,所以我不会在网站上随意点击

此外,它还使用正则表达式来识别按钮文本,该文本通常用于接受cookies,可以替换为
^(全部接受|接受|我理解|同意|好|好)$
,或翻译为您选择的任何语言(不区分大小写)

等待页面。评估(\u=>{
函数xcc_包含(选择器、文本){
var元素=document.querySelectorAll(选择器);
返回Array.prototype.filter.call(元素,函数(元素){
返回RegExp(text,“i”).test(element.textContent.trim());
});
}
var xcc;
_xcc=xcc|u包含“[id*=cookie]a、[class*=cookie]a、[id*=cookie]按钮、[class*=cookie]按钮”、“^(Alle akzeptieren | akzeptieren | Verstanden | Zustimmen | OK | OK)$”;
如果(xcc!=null&&xcc.length!=0){uxcc[0]。单击()
});
旧答案:

确实没有通用的方法来处理cookie同意弹出窗口,因为它们差异很大,甚至chrome扩展也不能处理所有的问题。但是,您可以复制扩展的功能并管理自己的列表,方法是在截图之前评估目标站点上的JS代码

在我的情况下,我只是接受他们所有,试图在无头模式。在识别选择器时添加更多选择器。如果您愿意,您可以使用Disclose按钮选择器

接下来,您将发现一些真实世界的场景,这些场景将有助于您继续前进:

  • 处理ID、类和自定义数据属性
  • 隐藏iframes,因为无法计算不同域上的代码
等待页面。评估(\u=>{
var xcc
//身份证
变量xcc\u id=[
“borlabsCookieOptionAll”,
“cookie全部应用”,
“cookie设置全部”,
//在此处添加ID
];
for(设i=0;i1){xcc[1].style.display='none';}
});
确实有一种更优雅的方法可以做到这一点,但通过这种方法,我可以快速组织我的列表,动态地进行更改,通过将重复项保持为一行或数组,在代码编辑器中排序和删除重复项

或者,只需使用
{headless:false}
选项,并按照建议加载一个为您执行此操作的扩展。干杯

旁注:如果页面重新加载(页面导航错误),与cookie同意弹出窗口的交互可能会导致代码中断。为了避免这种情况,我在
等待页面后使用3000-4000毫秒的固定时间延迟

constdelay=(ms)=>newpromise(resolve=>setTimeout(resolve,ms));
等待延迟(3500);
它还捕获了大量的元刷新,JS重定向并提供一些ext