C# 学校邮箱自动登陆

引言

在平时的工作和学习中,我们需要使用邮箱,在电脑上更多的时候是使用网页版的邮箱登陆界面进行操作,每次都需要输入用户名和密码,略显繁琐,因此,本文设计了自动登陆的解决方案,只需在源代码中添加一次用户名和密码,就可以直接登陆邮箱,接收与发送邮件。
自动登陆的原理十分简单,获取邮箱站点的HTML代码;从代码中分析出账号用户名和密码的元素,设置这两个元素的值为你的用户名和密码;从代码中分析出提交按钮,执行提交按钮的Click方法。

分析邮箱站点结构

用Chrome浏览器打开学校邮箱主页 https://mails.tsinghua.edu.cn/ ,在用户名的输入框里右键->检查元素,可以看到该输入框是一个input元素,记住这个元素的name属性uid;在密码的输入框里右键->检查元素,可以看到该输入框是一个input元素,记住这个元素的name属性password;在登陆按钮上右键->检查元素,可以看到该输入框是一个a元素,记住这个元素有onclick属性,后面根据这三个属性值在HTML代码找到相应的元素。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

创建代码

C#静态网页爬取中我们使用了WebClient类获取网页,但是邮箱登陆不仅要获取网页,更需要可视化网页,因此,需要用到System.Windows.Forms下的WebBrowser控件,为了操作的简化,可以新建一个Windows Form模板工程并添加一个WebBrowser控件,将下面代码中的你的邮箱账号和你的邮箱密码替换为真实账号和密码就可以登录了。

using System;
using System.Windows.Forms;

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        
        public Form1()
        {
            InitializeComponent();
            this.WindowState = FormWindowState.Maximized;
            string url = "https://mails.tsinghua.edu.cn/";
            webBrowser1.Navigate(url);
        }


        private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            Login();
        }

        private void Login()
        {
            var elements = webBrowser1.Document.GetElementsByTagName("input");
            HtmlElement id = null;
            HtmlElement pwd = null;
            HtmlElement btn = null;

            foreach (HtmlElement ele in elements)
            {
                if (ele.GetAttribute("name") == "uid")
                    id = ele;
                if (ele.GetAttribute("name") == "password")
                    pwd = ele;
            }
            elements = webBrowser1.Document.GetElementsByTagName("a");
            foreach (HtmlElement ele in elements)
            {
                if (ele.GetAttribute("onclick") != string.Empty)
                    btn = ele;
            }

            id.SetAttribute("value", "你的邮箱账号");
            pwd.SetAttribute("value", "你的邮箱密码");

            btn.InvokeMember("click");
        }
    }
}

猜你喜欢

转载自blog.csdn.net/Abecedarian_CLF/article/details/83501792