Javascript 木偶演员与浏览器的不同行为
我在控制台中的querySelector命令和NodeJ上的等效木偶程序代码之间得到了不同的结果。我使用的是无头铬和木偶演员额外的隐形插件,所以它可能不是验证码或其他东西。相反,它似乎是某种类型的广告重定向,把一切都搞砸了 使用控制台上的querySelector,我可以单击所需的按钮Javascript 木偶演员与浏览器的不同行为,javascript,node.js,web-scraping,automation,Javascript,Node.js,Web Scraping,Automation,我在控制台中的querySelector命令和NodeJ上的等效木偶程序代码之间得到了不同的结果。我使用的是无头铬和木偶演员额外的隐形插件,所以它可能不是验证码或其他东西。相反,它似乎是某种类型的广告重定向,把一切都搞砸了 使用控制台上的querySelector,我可以单击所需的按钮 document.querySelectorAll("button[class*=OfferCta__]")[1].click() 这将在同一页面上打开一个模式。有时它还会打开另一个网站的新
document.querySelectorAll("button[class*=OfferCta__]")[1].click()
这将在同一页面上打开一个模式。有时它还会打开另一个网站的新标签
不幸的是,当我通过nodejs在puppeter上运行等效程序时:
const buttons = await page.$$("button[class*=OfferCta__]");
await page.waitFor(2000);
await buttons[1].click();
await page.waitFor(6000);
await page.screenshot({ path: "screenshot.png" });
出现的只是一则广告,后面是大量空白,没有其他内容:
我要刮的那一页是
编辑:我在日志中发现了一些有趣的东西。每两分钟,木偶演员似乎就会重新开始,如日志所示。前几次它像往常一样失败,但在第五次重新启动时,在我运行代码十分钟后,它运行正常,我用“完成检索”表示。我觉得这意味着成功的条件,不管是什么,都是随机的
编辑:它似乎在时间上是随机的。我打开了一个headful={false}实例,以便观察发生了什么。在空白上方的单独广告接管之前,傀儡玩家可以获得不同阶段的正确结果(登录页面、点击前的页面、甚至成功点击后的页面)
奇怪的是,url仍然显示正确的地址,因此它也不是重定向,即使它显示的是广告而不是其他内容。很奇怪
我觉得这可能是一个反机器人的功能。检测机器人?切换到广告和没有内容。如果是这样的话,也许我可以利用时间延迟,看看什么是有效的
我猜是javascript脚本把事情搞砸了。我在Puppeter中禁用了javascript,它停止了给我广告。不幸的是,这也破坏了我最初需要的按键功能,所以…我会看看是否能找到有问题的脚本
我发现了令人不快的脚本:
https://www.retailmenot.com/tng/_next/static/chunks/34.c2f99cfb33704560c5d7.js
和https://www.retailmenot.com/tng/_next/static/chunks/35.f67d49e4abce303212c6.js
使用开发者工具阻止它们的请求阻止了广告。正如你所看到的,它们都来自同一个站点,所以这是故意的。混蛋。。。发牢骚
现在,如何通过编程阻止这些
不过,早些时候我注意到了一些奇怪的事情。只有当我稍微移动鼠标时,脚本才会运行。这不应该发生在木偶演员正在奔跑的时候,对吗?是否有一个选项,我可以检查,使木偶鼠标检测不到
脚本似乎在开始时以及鼠标移动时运行,因此可以解释上述内容。我已经写了一个请求拦截器,并且去掉了一大堆涉及广告的第三方脚本。让我们看看它是否有效
编辑:成功。结果是网页上的一个脚本使其表现不同。我最终用以下代码阻止了所有第三方脚本:
page.on("request", (request) => {
request.abort();
});
因为操作我需要的按钮的脚本被嵌入到html中,这很好。如果您需要在请求阻塞中更加细粒度,可以执行以下操作:
page.on("request", (request) => {
const url = request.url();
const filters = [
"https://www.retailmenot.com/tng/_next/static/chunks/",
"https://www.retailmenot.com/thumbs/ops/promoContent/Site_SavingsEducation_StickyBanner_200x100.png",
"btstatic",
"googleadservices",
"doubleclick",
"idsync",
"quant",
"facebook",
"amazon",
"tracking",
"taboola",
".gif",
"google-analytics",
"forter",
];
const shouldAbort = filters.some(
(urlPart) => url.includes(urlPart) && !url.includes("https://www.retailmenot.com/tng/_next/static/chunks/commons.")
);
//'https://www.retailmenot.com/tng/_next/static/chunks/34.c2f99cfb33704560c5d7.js'
if (shouldAbort) request.abort();
else {
//console.log(url);
request.continue();
}
});