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

C#程序无法登录网页问题求助(附代码)

修复使用HtmlAgilityPack和HttpClient登录bryx911的问题

你的代码核心问题出在三个地方,按以下步骤修改就能解决:

1. 修正登录表单的字段名

你代码里写的"Email..."和"Password..."是占位符,实际需要从登录页面的HTML源码里获取正确的输入框name属性值:

  • 打开https://app.bryx911.com/login,右键选择「查看页面源码」
  • 找到用户名和密码对应的输入框,比如类似<input name="Email" type="email">或<input name="Username" type="text">的标签
  • 把代码里的"Email..."替换成实际的name值(比如"Email"),"Password..."替换成密码框的name值(比如"Password")

2. 调整登录后的请求逻辑

登录成功后,服务器通常会跳转到主页,你现在登录后又请求登录页面,自然找不到目标关键词。应该:

  • 登录请求发送后,直接请求登录后的目标页面(比如主页,地址可以看登录成功后浏览器的地址栏)
  • 确保HttpClientHandler开启自动跳转(默认是开启的,显式设置AllowAutoRedirect = true更稳妥)

3. 补充表单验证令牌(可选但关键)

很多ASP.NET类型的网站会要求提交__RequestVerificationToken才能通过表单验证,否则登录会被拒绝。需要先获取登录页面的这个令牌,再加入表单数据。

修改后的完整代码

using HtmlAgilityPack;
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        string loginUrl = "https://app.bryx911.com/login";
        string homeUrl = "https://app.bryx911.com"; // 替换成登录后实际跳转的页面地址
        string[] keywords = { "M02", "E56", "L25" };
        string username = "**********";
        string password = "*******";

        using (var handler = new HttpClientHandler 
        { 
            CookieContainer = new CookieContainer(), 
            UseCookies = true,
            AllowAutoRedirect = true
        })
        {
            using (HttpClient client = new HttpClient(handler))
            {
                // 先获取登录页面,提取验证令牌
                var loginPageResponse = await client.GetAsync(loginUrl);
                var loginPageContent = await loginPageResponse.Content.ReadAsStringAsync();
                HtmlDocument loginDoc = new HtmlDocument();
                loginDoc.LoadHtml(loginPageContent);

                var tokenNode = loginDoc.DocumentNode.SelectSingleNode("//input[@name='__RequestVerificationToken']");
                string verificationToken = tokenNode?.GetAttributeValue("value", "");

                // 构造正确的表单数据
                var formData = new List<KeyValuePair<string, string>>
                {
                    new KeyValuePair<string, string>("Email", username), // 替换成实际的用户名输入框name值
                    new KeyValuePair<string, string>("Password", password), // 替换成实际的密码输入框name值
                };
                if (!string.IsNullOrEmpty(verificationToken))
                {
                    formData.Add(new KeyValuePair<string, string>("__RequestVerificationToken", verificationToken));
                }

                var loginContent = new FormUrlEncodedContent(formData);

                // 发送登录请求
                var loginResult = await client.PostAsync(loginUrl, loginContent);

                if (loginResult.IsSuccessStatusCode)
                {
                    // 请求登录后的主页
                    var homeResponse = await client.GetAsync(homeUrl);
                    var responseContent = await homeResponse.Content.ReadAsStringAsync();

                    HtmlDocument doc = new HtmlDocument();
                    doc.LoadHtml(responseContent);

                    foreach (string keyword in keywords)
                    {
                        if (doc.DocumentNode.InnerText.Contains(keyword))
                        {
                            Console.WriteLine($"找到关键词 '{keyword}'");
                        }
                        else
                        {
                            Console.WriteLine($"未找到关键词 '{keyword}'");
                        }
                    }
                }
                else
                {
                    Console.WriteLine($"登录失败,状态码:{(int)loginResult.StatusCode}");
                }
            }
        }
    }
}

额外说明

  • 把代码里的homeUrl替换成你登录后实际进入的页面地址
  • 如果你的控制台版本不支持async Main,可以改回同步调用,但建议用异步版本避免阻塞问题

内容的提问来源于stack exchange,提问作者ワッツアンドレ

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 00:35:49