分类目录归档:C#

cefsharp 使用代理切换ip

1.Program.cs 设置不代理

settings.CefCommandLineArgs.Add("no-proxy-server", "1");//不使用代理

2.编写方法:

async private void SetProxy(ChromiumWebBrowser cwb, string Address)

{

await Cef.UIThreadTaskFactory.StartNew(delegate

{

var rc = cwb.GetBrowser().GetHost().RequestContext;

var v = new Dictionary();

v[“mode”] = “fixed_servers”;

v[“server”] = Address;

string error;

bool success = rc.SetPreference(“proxy”, v, out error);

});

}

然后每次更新换代理ip时调用该方法就可以,如下:

SetProxy(CefBrowser, 新代理ip及端口);

CefSharp.CefSharpSettings.Proxy = new CefSharp.ProxyOptions(新代理ip, 端口, 用户名,密码);

c# 通过npoi操作excel汇总

1:新建工程,使用nuget添加引用

2:读取文件时,需要判断后缀

static DataTable ReadExcel(string filename)
{
DataTable dtTable = new DataTable();
List<string> rowList = new List<string>();
ISheet sheet;
string fileExt = Path.GetExtension(filename).ToLower();
IWorkbook workbook;

using (var fs = new FileStream(filename, FileMode.Open))
{
if (fileExt == “.xlsx”) { workbook = new XSSFWorkbook(fs); } else if (fileExt == “.xls”) { workbook = new HSSFWorkbook(fs); } else { workbook = null; }
if (workbook == null) { return null; }

sheet = workbook.GetSheetAt(0);
IRow headerRow = sheet.GetRow(0);
int cellCount = headerRow.LastCellNum;
for (int j = 0; j < cellCount; j++)
{
ICell cell = headerRow.GetCell(j);
if (cell == null || string.IsNullOrWhiteSpace(cell.ToString())) continue;
{
dtTable.Columns.Add(cell.ToString());
}
}
for (int i = (sheet.FirstRowNum + 1); i <= sheet.LastRowNum; i++)
{
IRow row = sheet.GetRow(i);
if (row == null) continue;
if (row.Cells.All(d => d.CellType == CellType.Blank)) continue;
for (int j = row.FirstCellNum; j < cellCount; j++)
{
if (row.GetCell(j) != null)
{
if (!string.IsNullOrEmpty(row.GetCell(j).ToString()) && !string.IsNullOrWhiteSpace(row.GetCell(j).ToString()))
{
rowList.Add(row.GetCell(j).ToString());
}
}
}
if (rowList.Count > 0)
dtTable.Rows.Add(rowList.ToArray());
rowList.Clear();
}
}
// return JsonConvert.SerializeObject(dtTable);
return dtTable;
}

 

打脸记

折腾几个小时,记录下,

今天例行检查之前做的cefsharp的自动登陆的程序,发现一个网站没有自动登陆,调试发现,网站改版了,

麻烦的是用了之前各种获取控件的方法,因为标签是做了随机数,每次刷新登陆的标签都会改变.

尝试了各种办法不行,本想实在不行就用新的cefsharp的postdata测试.于是随手输入了几个值点了提交

才发现,这么忠厚老实的wika,居然用的是明文传输.直接明文传到登陆的校验接口.

真是神奇的操作,然后用正式的数据测试,直接get到返回的登陆成功的信息

这网站的安全设定也是醉了,相当于买了扇顶级安全的门,钥匙挂在上面…

 

使用JavaScript为react的页面的控件赋值

因为使用cefsharp做的自动登陆程序,涉及到一部分为控件的赋值,最近遇到一个使用react写的页面.没法直接用abc.value=’123’的方式直接赋值,经研究可以使用一下代码

var ev = new Event(‘input’, { bubbles: true});
ev.simulated = 
true;
abc.value = 
‘ 123‘;
abc.dispatchEvent(ev);

 

 

 

 


最新更新, 使用一下代码

https://raw.githubusercontent.com/nullQ/js/main/js_setvalue_input_via_react

 

使用cefsharp中调用JavaScript脚本的promise的实例

function c1(){setTimeout(“var sec=’header-account mobile-hide’;document.getElementsByClassName(sec)[0].firstChild.click()”, 1300 );}
function c2(){setTimeout(“var sec=’btn btn-primary’;document.getElementsByClassName(sec)[0].click()”, 1300 );}
function c3(){var list=document.getElementsByTagName(“input”);
for(var i=0;i<list.length && list[i];i++)
{
if(list[i].type==”email”)
{
list[i].value=’aaa’;
list[i].dispatchEvent(new Event(‘input’))
}
else if(list[i].type==”password”)
{
list[i].value=’bbb’;
list[i].dispatchEvent(new Event(‘input’))
}
}
var bts=’btn btn-primary’;bt=document.getElementsByClassName(bts)[0];bt.click();}
function c4(){setTimeout(“window.location.href=\”https://visaya.solutions/de/\”;”,1000)}
new Promise(resolve => {
setTimeout(() => {
c1();
resolve(1);
}, 1500);
}).then((val) => {

new Promise(resolve => {
setTimeout(() => {
c2();
resolve(2);
}, 1500);
}).then(val => {
setTimeout(() => {
c3();
}, 1500);
}).then(val => {
setTimeout(() => {
c4();
}, 1000);
});

});

未在本地计算机上注册“microsoft.ACE.oledb.12.0″提供程序

针对部分WIN11操作系统,直接下载64位,下载:https://download.microsoft.com/download/2/4/3/24375141-E08D-4803-AB0E-10F2E3A07AAA/AccessDatabaseEngine_X64.exe

update:2023-03-06

下载64位的版本,下载好之后用命令提示符安装,下载路径\AccessDatabaseEngine_X64.exe\passive

 

 

winform操作excel时报错:未在本地计算机上注册“microsoft.ACE.oledb.12.0

未在本地计算机上注册“microsoft.ACE.oledb.12.0
解决方案:

下载:https://www.microsoft.com/en-us/download/Confirmation.aspx?ID=13255

本错误是由于你使用了ACCESS2007版本建立的数据库,但服务器中没有相配合使用的程序,所以出错.

未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序。

说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.InvalidOperationException: 未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序。

C# webBrowser 打开 json 弹出下载框问题解决方案

        private bool SetRegistery()
        {
            try
            {
                using (var hklm = RegistryKey.OpenBaseKey(RegistryHive.ClassesRoot, RegistryView.Registry64))
                {
                    using (RegistryKey key = hklm.OpenSubKey(@"MIME\Database\Content Type\application/json", true))
                    {
                        if (key != null)
                        {
                            key.SetValue("CLSID", "{25336920-03F9-11cf-8FD0-00AA00686F13}");
                            key.SetValue("Encoding", new byte[] { 0x80, 0x00, 0x00, 0x00 });
                        }
                    }
                }
                return true;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            return false;
        }

使用时:SetRegistery();注意使用时需要管理员运行