C# 使用CefSharp完成自动签到
1首先新建项目,右键项目选择管理NuGet 程序包,在浏览中搜索CefSharp.Winfrom ,点击安装,会自动安装相应的包。因为CefSharp是不能以AnyCPU的模式运行所以需要修改配置,有两种方式右键选择
(1) 右键解决方案选择配置管理器,把活动解决方案平台改成x86即可。
(2)打开app.config 文件添加配置 ,下边红色的字
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="x86"/>
</assemblyBinding>
</runtime>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.2" />
</startup>
</configuration>
点击项目,右键卸载项目 ,右键选择编辑XXXXX.csproj 添加红色字配置
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\packages\CefSharp.WinForms.79.1.360\build\CefSharp.WinForms.props" Condition="Exists('..\packages\CefSharp.WinForms.79.1.360\build\CefSharp.WinForms.props')" />
<Import Project="..\packages\CefSharp.Common.79.1.360\build\CefSharp.Common.props" Condition="Exists('..\packages\CefSharp.Common.79.1.360\build\CefSharp.Common.props')" />
<Import Project="..\packages\cef.redist.x86.79.1.36\build\cef.redist.x86.props" Condition="Exists('..\packages\cef.redist.x86.79.1.36\build\cef.redist.x86.props')" />
<Import Project="..\packages\cef.redist.x64.79.1.36\build\cef.redist.x64.props" Condition="Exists('..\packages\cef.redist.x64.79.1.36\build\cef.redist.x64.props')" />
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<CefSharpAnyCpuSupport>true</CefSharpAnyCpuSupport>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
。。。。。。。。。。。。。。
完成基本配置
2 首先添加一个窗体Form1 添加如下控件

后台代 #region 声明变 /// <summary> /// 声明根目录的地址
/// </summary>
string StrPath = AppDomain.CurrentDomain.BaseDirectory + "MobileData.xml";
/// <summary>
/// 实例化XML文档
/// </summary>
XmlDocument XmlDoc = new XmlDocument();
/// <summary>
/// 声明谷歌浏览器
/// </summary>
public ChromiumWebBrowser chromeBrowser;
/// <summary>
/// 创建一个线程
/// </summary>
Thread childThread = new Thread(new ThreadStart(()=>{}));
[System.Runtime.InteropServices.DllImport("user32")]
private static extern IntPtr GetActiveWindow();//获取当前窗体的活动状态
// 判断当前窗口是否处于活动状态的方法
private bool ThisIsActive() { return (GetActiveWindow() == this.Handle); }
int SuccessCount = 0;
string userinfo = "";
#endregion #region 窗体初始化
public Form1()
{
InitializeComponent();
}
/// <summary>
/// 初始化浏览器以及用户数据
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Form1_Load(object sender, EventArgs e)
{
var setting = new CefSettings();
// 设置语言
setting.Locale = "zh-CN";
//cef设置userAgent
setting.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36";
//配置浏览器路径
setting.BrowserSubprocessPath = @"x86\CefSharp.BrowserSubprocess.exe";
Cef.Initialize(setting, performDependencyCheck: true, browserProcessHandler: null);
chromeBrowser = new ChromiumWebBrowser("http://baidu.com");
panel1.Controls.Add(chromeBrowser);
chromeBrowser.Dock = DockStyle.Fill;
BindListBox();
}
#endregion #region 创建线程调用签到方法 /// <summary>
/// 创建工作线程
/// </summary>
public void CreateWorkThread()
{
childThread = new Thread(new ThreadStart(SetAuto));
childThread.Start();
}
#endregion #region 签到方法
public void SetAuto()
{
SuccessCount = 0;
userinfo = "";
string user = "";
string js = "";
for (int i = 0; i < txt_Users.Items.Count; i++)
{
chromeBrowser.Load("http://baidu.com");
user = txt_Users.Items[i].ToString();
Thread.Sleep(3500);
ExecuteJs(chromeBrowser, "网页中的js或者自己写的");
Thread.Sleep(3000);
ExecuteJs(chromeBrowser, "网页中的js或者自己写的");
Thread.Sleep(1500);
js = $"document.getElementsByName('文本框名称')[0].value = '{user.Split(':')[0]}';document.getElementsByName('文本框名称')[0].value = '{user.Split(':')[1]}'; ";
ExecuteJs(chromeBrowser, js);
Thread.Sleep(1500);
js = "document.querySelector('[type=submit]').click();";
ExecuteJs(chromeBrowser, js);
Thread.Sleep(3000);
ExecuteJs(chromeBrowser, "网页中的js或者自己写的"); //执行js,
Thread.Sleep(1500);
if (chromeBrowser.Address == "www.baidu.com\ok")//判断是否已签到成功
{
ExecuteJs(chromeBrowser, "网页中的js或者自己写的");
Thread.Sleep(2500);
}
js = @"document.getElementsByClassName('提交按钮')[0].click(); ";
ExecuteJs(chromeBrowser, js);
Thread.Sleep(3000);
if (chromeBrowser.Address == "www.baidu.com\ok")//如果签到成功获取当前签到用户并记录个数和名称
{
js = @"(function (){ return document.querySelectorAll('a')[0].innerHTML})(); ";
chromeBrowser.EvaluateScriptAsync(js).ContinueWith(x =>
{
var response = x.Result;
if (response.Success && response.Result != null)//判断结果是否返回成功并且结果不为空
{
userinfo += response.Result.ToString().Trim().Split(':')[1].Substring(0, 3) + " ";//截取用户名
}
});
SuccessCount += 1;//添加个数
}
Thread.Sleep(1200);
}
if (SuccessCount != txt_Users.Items.Count)
{
CreateWorkThread();
}
else {
writeLog($"在{DateTime.Now}时,已自动签到{SuccessCount}个,用户:{userinfo}");
MessageBox.Show($"在{DateTime.Now}时,已自动签到{SuccessCount}个,用户:{userinfo}");
childThread.Abort();
}
} /// <summary>
/// 手动签到
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Btn_Auto_Click(object sender, EventArgs e)
{
CreateWorkThread();
}
/// <summary>
/// 自动签到方法
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void timer1_Tick(object sender, EventArgs e)
{
txt_DQDate.Text = DateTime.Now.Hour + ":" + DateTime.Now.Minute + ":" + DateTime.Now.Second;
if (txt_DQDate.Text== txt_DateQD.Text)
{
if (!ThisIsActive())
{
this.Activate();
//ControlBox = false;
}
this.WindowState = FormWindowState.Normal;
CreateWorkThread();
}
}
#endregion #region 添加用户逻辑
/// <summary>
/// 添加用户方法
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
//Enter键 更新项并隐藏编辑框
if (e.KeyCode == Keys.Enter)
{
if (!textBox1.Text.Contains(":"))
{
MessageBox.Show("不包含':'符号,请重新输入");
textBox1.Text = "";
return;
}
if (textBox1.Text.Split(':')[0].Length!=11)
{
MessageBox.Show("请输入11位手机号");
textBox1.Text = "";
return;
}
if (textBox1.Text.Split(':')[1].Length != 4)
{
MessageBox.Show("请输入身份证号后4位");
textBox1.Text = "";
return;
}
//添加属性
try
{
XmlElement xmlElement = XmlDoc.CreateElement("item");
//将节点加入到指定的节点下
xmlElement.InnerText = textBox1.Text;
XmlDoc.DocumentElement.PrependChild(xmlElement);
XmlDoc.Save(StrPath);
txt_Users.Items.Add(textBox1.Text);
textBox1.Visible = false;
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
//Esc键 直接隐藏编辑框
if (e.KeyCode == Keys.Escape)
textBox1.Visible = false;
}
/// <summary>
/// 显示文本框
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void txt_Users_MouseDoubleClick(object sender, MouseEventArgs e)
{
textBox1.Visible = true;
textBox1.Focus();
}
/// <summary>
/// 加载方法签到用户方法
/// </summary>
public void BindListBox()
{
XmlDoc.Load(StrPath);
XmlNodeList topM = XmlDoc.DocumentElement.ChildNodes;
foreach (XmlNode item in topM)
{
txt_Users.Items.Add(item.InnerXml);
}
}
#endregion #region 其他方法
/// <summary>
/// 关闭窗体时释放资源和线程
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
//把整个浏览器的资源释放掉
Cef.Shutdown();
//强制停止所有线程
Environment.Exit(0);
}
/// <summary>
/// 执行JS
/// </summary>
/// <param name="chromiumWebBrowser">ChromiumWebBrowser</param>
/// <param name="js"></param>
public static void ExecuteJs(ChromiumWebBrowser chromiumWebBrowser, string js)
{
var frame = chromiumWebBrowser.GetMainFrame();
frame.EvaluateScriptAsync(js);
}
/// <summary>
/// 写日志
/// </summary>
/// <param name="str"></param>
static void writeLog(string str)
{
if (!Directory.Exists("Log"))
{
Directory.CreateDirectory("Log");
}
using (StreamWriter sw = new StreamWriter(@"Log\Log.txt", true))
{
sw.WriteLine(str);
sw.WriteLine("---------------------------------------------------------");
sw.Close();
}
}
#endregion
这个程序存在一些问题,例如网络问题,线程问题等等
但作者的水平有限,只能写成这样了,希望多多指点
C# 使用CefSharp完成自动签到的更多相关文章
- python3+任务计划实现的人人影视网站自动签到
python3+任务计划实现的人人影视网站自动签到 这是一个自动化程度较高的程序,运行本程序后会从chrome中读取cookies用于登录人人影视签到, 并且会自动添加一个windows 任务计划,这 ...
- 360每日自动签到,领取积分 (java httpclient4.x)
如何登陆360,并每日自动签到这次的难点主要集中在登陆这里了,开始抓包发现360登陆验证很麻烦,但是后来发现一个简单的方法.因为我安装了360安全卫士,发现点击那个金币的按钮能直接验证登陆,哈哈~所以 ...
- python写的自动签到脚本。
等以后有时间补上. 附上代码: #! /usr/bin/env python # coding:utf-8 #-----------------------------------------学号和密 ...
- 利用Python实现App自动签到领取积分
要自动签到,最简单的是打开页面分析请求,然后我们用脚本实现请求的自动化.但是发现食行没有页面,只有 APP,这不是一个好消息,这意味着需要抓包处理了. 有需要Python学习资料的小伙伴吗?小编整理[ ...
- selenium之数据驱动框架应用WPS个人中心自动签到
wps在注册后,有个每日签到的功能,签到后有几率送wps的专属金币[稻米],为了免费获得,又不想每天都是人工去执行签到动作,所以用selenium写了个小脚本,准备用数据驱动框架来完成这个事情,数据驱 ...
- 自动签到升级版(JS实现的每日定时任务)
公司规定每日签到两次:日子太安逸了,有时候中午居然会忘记签到…… 于是,笔者寻思写一个自动签到的脚本:每天指定两个签到时段,每次打开页面,先检测当前是否为签到时段,如果在签到时段,则检查cookie中 ...
- nodejs什么值得买自动签到自动评论定时任务
本项目是基于nodejs开发,实现的功能是,什么值得买自动签到,自动评论功能,自动发邮件,支持多人多账号运行 目的是为了,解放双手,轻松获取什么值得买的经验和积分,得到更高的等级,从而突破很会员等级限 ...
- Python3编写自动签到服务程序
公司加班的餐补需要登录网站签到领取,有时候会忘记,于是自己用Python写了小程序来自动签到.刚开始只是做了自己用,直接写的黑框程序,后来给同事用,就打包成exe.再后来有人说要写成window服务会 ...
- 孩子王app自动签到送现金券
今天在某商场的孩子王店给小孩买东西时发现,app连续签到3天即可获得一张5元现金券. 回到家中,花几分钟Fiddler抓包分析写了个自动签到的代码. var cookies = new string[ ...
- 对RoboMaster论坛自动签到脚本制作(虽然没什么用)
RoboMaster论坛自动签到,自动浏览刷分 不务正业系列 上完最后一节课,队长跟我们说,RM有个BBS,可以看看,但是下载要金币,这个金币只能做签到等事情才能得到,所以我用python做了一个小程 ...
随机推荐
- linux下安装mysql的方式
总体来说,mysql安装有两种方式,一个是源码安装,另一个是使用官方编译好的二进制文件安装. 1.使用rpm方式安装 原文地址:https://blog.csdn.net/liuxw1/article ...
- js截取数组
在JavaScript中,可以使用 slice() 方法来截取数组的一部分.该方法接受两个参数,第一个参数是截取的起始位置(包括该位置),第二个参数是截取的结束位置(不包括该位置). 例如,假设有一个 ...
- 一篇教会你写90%的shell脚本
原文链接 : https://zhuanlan.zhihu.com/p/264346586 shell是外壳的意思,就是操作系统的外壳.我们可以通过shell命令来操作和控制操作系统,比如Linux ...
- 利用context组件数据传递
react的数据传递 是从父级向子级传递的.通过props.如果是很多组件需要的数据,通过props传递会非常麻烦.这个时候可以使用context. context需要可以类似于store但是也不能滥 ...
- Keil5 STM32 C++开发 ARM V6编译器的使用教程
Keil5更新之后,开始支持ARM V6编译器,新版本的编译器对C++有了更多的支持,在编译方面也做了很多的改善,具体的没有详细了解,本文只是对STM32 开发下,使用V6版本的编译器进行STM32的 ...
- [2015年NOIP提高组] 跳石头
一年一度的"跳石头"比赛又要开始了! 这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石.组委会已经选择好了两块岩石作为比赛起点和终点.在起点和终点之间,有 <spa ...
- 一些sql查询的case
1.单列去重,输出去重后条目数量 select count(distinct(`id`)) from student; 2.根据分数段统计数据条目:利用case when selectcount(ca ...
- kubeadm安装
目录: 环境准备 所有节点安装docker 部署K8s集群 部署Dashboard 安装Harbor私有仓库 安装 master(2C/4G,cpu核心数要求大于2) 192.168.63.100 d ...
- MySQL---MGR保姆版
一.环境清理: 三台机器都做: 1.修改主机名 2.修改/etc/hosts文件 3.关闭和禁用防火墙 4.关闭和禁用SELinux 5.生成密钥对 6.传输密钥对 7.验证免密登陆 yum remo ...
- Dell CS24-SC 服务器详情
详情介绍: https://www.viziotech.com/servers/58-dell-cs24-sc-dual-xeon-quad-core-l5420-25ghz-16gb-4x146gb ...