首页 > 解决方案 > C# 以任何方式减慢 HtmlWeb.Load() 加载或绕过验证码的速度吗?

问题描述

我正在尝试抓取一些网页,但因为 HtmlWeb.Load() 非常快(我相信)它阻止了我并要求我做一个验证码。有时我可以加载它,有时我不能。

我想知道是否有任何方法可以减慢速度(也许 htmlweb 有一些内置的方法/属性可以做到这一点?或者也许有一种方法可以限制我的应用程序的资源,因此它故意运行缓慢?)。如果这不可能,是否有一种简单的方法可以绕过验证码?任何提示/帮助将不胜感激,谢谢。

    <p>
    As you were browsing, something about your browser made us think you might be a bot. There are a few reasons this might happen, including:
  </p>
  <ul>
    <li>You're a power user moving through this website with super-human speed</li>
    <li>You've disabled JavaScript and/or cookies in your web browser</li>
    <li>A third-party browser plugin is preventing JavaScript from running.</li>
  </ul>

标签: c#html-agility-pack

解决方案


您认为这是因为您加载单个页面的速度太快了,但这根本不是他们告诉您的。您在页面之间切换的速度太快了,无法成为人类。和/或者,正如我怀疑您的应用程序可能正在做的那样,您没有在程序中加载 JavaScript。和/或您没有处理 cookie。

这三件事中的任何一个或全部都可能是机器人活动的迹象。顺便说一句,你是哪个。所以他们抛出一个验证码,因为他们不希望机器人试图爬取他们的网站。你肯定不会轻易绕过验证码,所以最好的办法是解决他们在消息中列出的实际问题。

  • 减慢页面加载之间的时间,使其更适合人类浏览。但是,如果您以非人类的方式浏览他们的整个网站,您可能仍然会被卡住。
  • 处理他们尝试设置的任何 cookie,以便您看起来像普通用户。从同一 IP 对站点的几次连续无 cookie 访问可能不会引发标志,但几十到数百次会。
  • 如果这些不起作用,也许他们真的坚持在他们的网站上加载 JavaScript 元素,你必须找到一种方法让你的应用程序运行 JavaScript 片段,这样它就不会看起来像你机器人。

但总而言之,你是一个机器人,他们的系统正在按预期工作。


推荐阅读