搬瓦工MiniBox和BigBox邀请码网上有大量邀请码,但很多已经被使用过了,为此做了个批量查询邀请码查询使用情况的软件
运行环境需求:
程序基于net8.0编写,若你的windows电脑未安装 .NET 8.0 SDK,需先安装在运行
下载链接
使用教程:
- 将你需要查询的网址输入到程序内查询网址的TXT文件里,默认已填写BigBox的地址
- 将你需要查询的邀请码输入到程序内邀请码库的TXT文件里,一行一个邀请码
- 运行邀请码查询.exe文件
- 等待一段时间后运行结束会输出个查询结果.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;
}
}
}