首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >木偶表演者使用浏览器的不同行为

木偶表演者使用浏览器的不同行为
EN

Stack Overflow用户
提问于 2020-10-27 07:11:46
回答 1查看 254关注 0票数 0

在控制台中的querySelector命令和nodejs上的等效木偶剧代码之间,我得到了不同的结果。我使用的是无头铬和木偶人-额外插件-隐形,所以它可能不是验证码或其他什么。相反,它似乎是某种类型的广告重定向,把一切都搞得一团糟。

使用控制台上的querySelector,我可以点击我想要的按钮。

代码语言:javascript
运行
复制
document.querySelectorAll("button[class*=OfferCta__]")[1].click()

这将在同一页上打开一个模式。有时,它还会打开另一个网站的新标签。

不幸的是,当我通过nodejs在puppeteer上运行等效项时:

代码语言:javascript
运行
复制
    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" });

所有显示的都是一个广告,后面有很多空格,没有其他的东西:

我要抓取的页面是https://www.retailmenot.com/view/myntra.com

编辑:我在日志中发现了一些有趣的东西。在日志中可以看到,每隔两分钟,puppeteer就会重新启动。它像往常一样在前几次失败,但在第五次重启时,在我运行代码十分钟后,它正常运行,我用“完成检索”表示。我有一种感觉,这意味着成功的条件,无论是什么,都是随机的?

编辑:它在时间上看起来确实是随机的。我打开了一个headful={false}实例,这样我就可以看到发生了什么。在空格上方的单独广告接管之前,Puppeteer会得到不同阶段的正确结果(登录页面、点击前的页面、成功点击后的页面)。

奇怪的是,url仍然显示了正确的地址,所以它也不是一个重定向,即使它只显示一个广告,而不显示其他任何内容。非常奇怪。

我有一种下沉的感觉,这可能是一个反机器人功能。探测到机器人吗?切换到广告,没有内容。如果是这样的话,也许我可以尝试一下时间延迟,看看什么是有效的。

我猜是一个javascript脚本把事情搞砸了。我在puppeteer中禁用了javascript,它停止给我提供广告。不幸的是,这也破坏了我最初需要的按钮按下功能,所以...我会看看我是否能找到有问题的脚本。

我已经找到了有问题的脚本:

https://www.retailmenot.com/tng/_next/static/chunks/34.c2f99cfb33704560c5d7.jshttps://www.retailmenot.com/tng/_next/static/chunks/35.f67d49e4abce303212c6.js

用开发者工具阻止他们的请求阻止了广告。如你所见,它们都来自同一站点,所以这是故意的。混蛋..。发牢骚。

现在,如何通过编程阻止这些……

不过,早些时候我注意到了一些奇怪的事情。脚本仅在我稍微移动鼠标时运行。当puppeteer运行正常时,不应该发生这种情况?有没有什么办法可以让木偶表演者的鼠标不被检测到?

脚本似乎在启动时运行,当鼠标移动时也会运行,所以这就解释了上面的情况。我写了一个请求拦截器,去掉了一大堆涉及广告的第三方脚本。让我们看看它是否有效。

编辑:已工作。

EN

回答 1

Stack Overflow用户

发布于 2020-10-28 02:58:55

原来是网页上的一个脚本让它的行为有所不同。我最终使用以下代码阻止了所有第三方脚本:

代码语言:javascript
运行
复制
    page.on("request", (request) => {
      request.abort();
    });

因为操作我需要的按钮的脚本嵌入在html中,所以这没问题。如果你需要在你的请求阻塞中更细粒度,你可以这样做:

代码语言:javascript
运行
复制
    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();
      }
    });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64546228

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档