C# winform 模拟键盘输入自动接入访问网络的实例

2019-12-30 14:44:38王振洲

背景:

由于所在办公室网络限制,笔者每天都使用网络都要先连接无线网。如下图,输入授权用户信息登录后才能使用WIFI。

丧心病狂的是该网页Cookie 过期时间为24小时,所以每天重复以下动作:打开浏览器 -> 手动输入 工号密码、密码 -> 点击“登录”按钮。

作为一个懒出天际的程序员,逃避这种重复劳动是必须滴~~winform,键盘输入,模拟键盘按键,c#模拟键盘输入,回车

解决方案:

创建一个C# 应用程序,使用WebBrowser控件加载该页面,模拟键盘输入账号、密码,把用户配置分别赋值给两个控件,然后调用按钮的点击事件。

具体步骤:

1. 打开登录页面,按F12查看网页源码,可以看到2个输入控件名分别为 "user", "password",登录按钮名为"Login",如下图:winform,键盘输入,模拟键盘按键,c#模拟键盘输入,回车

2. 模拟事件

模拟过程具体又可分为以下4个步骤:

step 1. 读取配置文件中的 登录网址

step 2. 加载网页

step 3. 模拟键盘操作

step 4. 退出程序

关键部分代码


/// <summary>
/// 加载网页,模拟登录动作处理
/// </summary>
private void ProcessLogin()
{
  // 验证配置文件
  if (string.IsNullOrEmpty(url))
  {
    ShowMsg("配置文件错误");
    return;
  }
 
  ShowMsg("正在加载登录网页...");
  // 加载网页
  webBrowser1.Navigate(url);
  //等待浏览器控件加载完成
  while (webBrowser1.ReadyState != WebBrowserReadyState.Complete)
  {
    Application.DoEvents();
  }
  ShowMsg("加载完毕!");
  //模拟登录事件
  LoginSimulation(webBrowser1);
}
//模拟登录事件
private void LoginSimulation(WebBrowser wb)
{
  try
  {
    ShowMsg(string.Format("账户名:[{0}],输入账户密码...", userName));
    ShowMsg(string.Format("请确保配置文件中的用户及登录密码准确可用"));
 
    // 网页元素
    HtmlDocument doc = wb.Document;
    HtmlElement emuser = doc.GetElementById("user");
    SetHtmlValue(emuser, userName);//设置账户
    HtmlElement empassword = doc.GetElementById("password");
    SetHtmlValue(empassword, password);//设置密码
    HtmlElement btn = doc.GetElementById("Login");
    InvokeMethod(btn, "click");//调用 登录按钮的 Click 事件 提交配置
 
    ShowMsg("完成!");
    TimeSpan used = DateTime.Now - begin;//用时
    ShowMsg(string.Format("用时: {0}.{1}s" , used.Seconds, used.Milliseconds));
    ShowMsg("即将自动退出...");
 
    //启动计时器,4s 后自动退出当前程序
    Timer timer = new Timer();
    timer.Interval = 4000;
    timer.Tick += new EventHandler(timer_Tick);
    timer.Start();
  }
  catch (Exception ex)
  {
    ShowMsg(ex.Message);
  }
}