搬瓦工MiniBox和BigBox邀请码批量查询使用情况

搬瓦工MiniBox和BigBox邀请码批量查询使用情况

spirit_zx
1年前发布

搬瓦工MiniBox和BigBox邀请码网上有大量邀请码,但很多已经被使用过了,为此做了个批量查询邀请码查询使用情况的软件

运行环境需求:
程序基于net8.0编写,若你的windows电脑未安装 .NET 8.0 SDK,需先安装在运行
下载链接

使用教程:

  1. 将你需要查询的网址输入到程序内查询网址的TXT文件里,默认已填写BigBox的地址
  2. 将你需要查询的邀请码输入到程序内邀请码库的TXT文件里,一行一个邀请码
  3. 运行邀请码查询.exe文件
  4. 等待一段时间后运行结束会输出个查询结果.txt文件

下面是程序代码

using System;
using System.Collections.Generic;
using System.IO;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Support.UI;
using System.Linq;
using System.Threading;

class Program
{
    static void Main()
    {
        // 配置文件路径
        string filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "邀请码库.txt");
        string urlsPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "查询网址.txt");

        // 检查文件是否存在
        if (!File.Exists(filePath))
        {
            Console.WriteLine("文件未找到!请检查文件路径。");
            return;
        }

        // 从文件读取邀请码
        List<string> inviteCodes = ReadInviteCodes(filePath);

        // 从文件读取查询网址
        string websiteUrl = ReadWebsiteUrl(urlsPath);
        if (string.IsNullOrEmpty(websiteUrl))
        {
            Console.WriteLine("查询网址文件为空或格式不正确!");
            return;
        }

        // 设置 ChromeDriver 路径(如果必要)
        ChromeOptions options = new ChromeOptions();
        options.AddArgument("--headless"); // 如果你不需要打开浏览器界面,启用无头模式

        // 初始化 WebDriver
        IWebDriver driver = new ChromeDriver(options);

        // 用于存储已使用和未使用的邀请码
        List<string> usedInviteCodes = new List<string>();
        List<string> unusedInviteCodes = new List<string>();

        try
        {
            // 1. 导航到指定网址
            driver.Navigate().GoToUrl(websiteUrl);
            Console.WriteLine("已访问页面: " + websiteUrl);

            // 2. 等待页面加载并点击 "Add to Cart" 按钮
            WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));

            // 等待 "Add to Cart" 按钮加载完成并可点击
            IWebElement addToCartButton = wait.Until(d => d.FindElement(By.XPath("//input[@type='submit' and @value='Add to Cart']")));
            addToCartButton.Click();
            Console.WriteLine("点击 'Add to Cart' 按钮");

            // 3. 等待页面加载完成,等待邀请码输入框变得可见
            wait.Until(d => d.FindElement(By.Name("invite_code")).Displayed);
            Console.WriteLine("页面加载完成,开始查询...");

            // 4. 开始查询
            foreach (var inviteCode in inviteCodes)
            {
                Console.WriteLine($"正在查询邀请码:{inviteCode}");

                // 等待输入框可用
                IWebElement inputBox = wait.Until(d => d.FindElement(By.Name("invite_code")));
                inputBox.Clear();  // 清空输入框
                inputBox.SendKeys(inviteCode);  // 输入邀请码

                // 定位并点击提交按钮
                IWebElement submitButton = wait.Until(d => d.FindElement(By.XPath("//input[@type='submit' and @value='Validate Invite']")));
                submitButton.Click();

                // 等待查询结果加载
                Thread.Sleep(2000); // 等待2秒,确保页面已更新

                // 检查页面是否有 "Remove Invite Code" 链接
                try
                {
                    IWebElement removeLink = driver.FindElement(By.XPath("//a[contains(text(), 'Remove Invite Code')]"));
                    // 如果存在该链接,说明该邀请码未使用
                    unusedInviteCodes.Add(inviteCode);
                    Console.WriteLine($"未使用的邀请码: {inviteCode}");
                }
                catch (NoSuchElementException)
                {
                    // 如果没有该链接,说明该邀请码已使用
                    usedInviteCodes.Add(inviteCode);
                    Console.WriteLine($"已使用的邀请码: {inviteCode}");
                }

                // 等待一段时间,避免请求过于频繁
                Thread.Sleep(2000); // 可调整延时
            }

            // 输出结果
            Console.WriteLine("\n查询完成!");
            Console.WriteLine("\n已使用的邀请码:");
            foreach (var used in usedInviteCodes)
            {
                Console.WriteLine(used);
            }

            Console.WriteLine("\n未使用的邀请码:");
            foreach (var unused in unusedInviteCodes)
            {
                Console.WriteLine(unused);
            }

            // 输出查询结果到文件
            string outputFilePath = Path.Combine(Directory.GetCurrentDirectory(), "查询结果.txt");

            using (StreamWriter writer = new StreamWriter(outputFilePath))
            {
                writer.WriteLine("已使用的邀请码:");
                foreach (var usedCode in usedInviteCodes)
                {
                    writer.WriteLine(usedCode);
                }

                writer.WriteLine("\n未使用的邀请码:");
                foreach (var unusedCode in unusedInviteCodes)
                {
                    writer.WriteLine(unusedCode);
                }
            }

            Console.WriteLine("查询结果已保存到查询结果.txt");

        }
        catch (Exception ex)
        {
            Console.WriteLine($"发生错误:{ex.Message}");
        }
        finally
        {
            // 关闭浏览器
            driver.Quit();

        }
    }

    // 从文件中读取邀请码
    static List<string> ReadInviteCodes(string filePath)
    {
        List<string> inviteCodes = new List<string>();
        try
        {
            foreach (var line in File.ReadLines(filePath))
            {
                inviteCodes.Add(line.Trim());  // 读取每行并去除换行符
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine($"读取文件时发生错误:{ex.Message}");
        }

        return inviteCodes;
    }

    // 从文件中读取查询的网址
    static string ReadWebsiteUrl(string filePath)
    {
        try
        {
            return File.ReadAllText(filePath).Trim();  // 读取网址并去除多余的空格
        }
        catch (Exception ex)
        {
            Console.WriteLine($"读取查询网址文件时发生错误:{ex.Message}");
            return string.Empty;
        }
    }
}
© 版权声明
THE END
喜欢就支持一下吧
点赞 0 分享 收藏
评论 抢沙发
取消
易航博客