You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB.net使用HttpWebRequest爬取网页遇JS检测的无WebBrowser绕过方案咨询

可行替代方案

你遇到的是目标站点JS型WAF校验(你返回结果中的vddosw3data.js是典型vDDoS防护脚本),核心逻辑是首次请求返回JS脚本,客户端执行完成后生成校验Cookie,后续请求携带正确Cookie即可拿到正常内容,完全不需要调用完整浏览器控件,以下是可直接落地的方法:

方案1:搭配轻量JS引擎执行校验逻辑(内存占用最低)

不用加载完整浏览器内核,仅执行返回的JS代码拿到校验值即可,.NET生态可选用Jint或ClearScript这类轻量JS执行组件:

  • 首先给你的HttpWebRequest添加CookieContainer属性,你原有代码缺失这部分,校验生成的Cookie无法存储传递,自然永远过不了校验
  • 首次请求拿到返回的HTML后,提取页面里的JS代码(包括外链的vddosw3data.js和内联JS逻辑)
  • 调用JS引擎执行提取到的JS,拿到生成的校验Cookie键值对,写入到CookieContainer中
  • 再次用携带Cookie的HttpWebRequest发起请求,即可拿到正常页面内容
    这个方案内存占用基本和原生HttpWebRequest一致,执行百次请求也不会超过百MB级别。

参考代码片段(VB.net):

' 全局复用Cookie容器即可
Dim cookieContainer As New CookieContainer()

' 首次请求代码修改
Dim Request As HttpWebRequest = HttpWebRequest.Create(TextBox1.Text)
Request.Proxy = Nothing
Request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:92.0) Gecko/20100101 Firefox/92.0"
Request.CookieContainer = cookieContainer ' 新增Cookie容器
Request.AllowAutoRedirect = True ' 允许自动跳转

' 拿到返回HTML后提取JS执行,以Jint为例
Dim engine As New Jint.Engine()
engine.Execute(提取到的JS代码)
' 获取JS生成的校验Cookie,vDDoS默认生成的Cookie名为__vddos
Dim vddosVal As String = engine.GetValue("对应Cookie的JS变量名").AsString()
cookieContainer.Add(New Uri(TextBox1.Text), New Cookie("__vddos", vddosVal))

' 再次发起请求即可拿到正常内容

方案2:使用轻量化无头浏览器(开发成本最低)

如果不想逆向JS逻辑,可以用PuppeteerSharp或者Selenium的无头浏览器模式,通过配置关闭不必要的资源加载大幅降低内存占用:

  • 启动时添加参数禁用图片、CSS、字体、插件加载,关闭GPU加速
  • 全局复用浏览器实例,不要每次请求都新开浏览器进程
    按上述配置后18次请求内存占用可控制在300MB以内,远低于WebBrowser的3GB占用。

方案3:逆向JS逻辑原生实现(性能最高)

如果请求量很大,可以直接逆向vDDoS的JS校验逻辑,用VB.net原生代码写对应的计算方法,连JS引擎都不需要调用,性能最高,长期维护成本也最低。

内容的提问来源于stack exchange,提问作者Break Inside

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 01:24:03