惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

aimingoo的专栏
aimingoo的专栏
Microsoft Security Blog
Microsoft Security Blog
S
SegmentFault 最新的问题
Forbes - Security
Forbes - Security
爱范儿
爱范儿
Stack Overflow Blog
Stack Overflow Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
C
CERT Recently Published Vulnerability Notes
S
Schneier on Security
Scott Helme
Scott Helme
C
Check Point Blog
T
Tenable Blog
博客园 - 三生石上(FineUI控件)
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
L
Lohrmann on Cybersecurity
Google DeepMind News
Google DeepMind News
人人都是产品经理
人人都是产品经理
N
News and Events Feed by Topic
B
Blog
P
Privacy International News Feed
I
Intezer
T
Threatpost
Google DeepMind News
Google DeepMind News
L
LangChain Blog
Last Week in AI
Last Week in AI
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
L
LINUX DO - 最新话题
博客园_首页
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Hacker News - Newest:
Hacker News - Newest: "LLM"
C
Cybersecurity and Infrastructure Security Agency CISA
N
News and Events Feed by Topic
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
N
News | PayPal Newsroom
The Hacker News
The Hacker News
S
Security @ Cisco Blogs
罗磊的独立博客
PCI Perspectives
PCI Perspectives
Y
Y Combinator Blog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
大猫的无限游戏
大猫的无限游戏
U
Unit 42
Hacker News: Ask HN
Hacker News: Ask HN
D
Docker
AI
AI
小众软件
小众软件
博客园 - 叶小钗
H
Help Net Security
TaoSecurity Blog
TaoSecurity Blog
P
Privacy & Cybersecurity Law Blog

博客园 - Hey,Coder!

c# 生成对象的初始化代码 Elasticsearch ILM 与 Data Stream 概念及实例说明文档 portainer httphelper封装 Ocelot + Consul + SignalR 粘性会话 正交软件架构 docker postgresql17 主从复制 rabbitmq总结与c#示例 docker rabbitmq quartz dashboard docker consul registrator 服务自动注册consul 微服务动态扩容 ubuntu24.04 安装docker RAG 检索增强生成 软考 - 架构设计师 知识点总结 c# MailKit3.4.3 发送邮件、附件 nginx 反向代理postgresql c# 信号量 elsa 3.5 中间件记录最后执行的节点数据 xp密钥 c# System.Text.Json 反序列化Dictionary<string,object>时未转换基础类型的处理方法 docker配置代理 openclaw 接入 LMStudio的模型服务 wpf canvas 移动 缩放 windows平台openclaw搭建 wpf scrollerview触摸滚动 c# 动态切换sqlsugar连接字符串 c# Elastic.Clients.Elasticsearch 动态查询 c# es 封装Elastic.Clients.Elasticsearch c# scrollerview滚动到指定元素位置 WPF 重写Expander 基于elsa工作流封装一套变量、组件的体系 常用活动重写 DynamicExpresso 轻量级动态表达式库 c# elsa 3.5.2 程序化工作流常用功能及自定义中间件 leaflet docker 连接老版本的sqlserver ssl错误 c# quartz 动态创建任务 控制任务运行和停止 依赖注入 docker 复制远程镜像本地并创建容器 c# newtonsoft dynamic
cefsharp 模拟点击 批量重置数据库的数据
Hey,Coder! · 2025-12-26 · via 博客园 - Hey,Coder!

需求:获取数据库中的所有数据,然后触发页面逻辑重新保存。

  1. 加载数据库中的所有数据

  2. 循环加载数据

  3. 页面加载成功后点击触发保存

  4. 切换下一条数据

using CefSharp;
using CefSharp.Handler;
using CefSharp.Wpf;
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;

namespace SpiderTool
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public static bool CanSave = false;

        List<Service> services;
        int index = 0;
        public MainWindow()
        {

            // CachePath需要为绝对路径
            var settings = new CefSettings
            {
                CachePath = $"{AppDomain.CurrentDomain.BaseDirectory}CEFCaches"
            };
            Cef.Initialize(settings);

            LoadService();

            InitializeComponent();

            var handler = new CefRequestHandlerc();
            browser.RequestHandler = handler;


            //browser.DialogHandler = new DialogHandler(@"C:\Users\ives\Desktop\share.jpg");
            //browser.RequestHandler = new CEFRequestHandler();
            //browser.
            //browser.DownloadHandler = new CEFDownloadHandle();

            Task.Run(() =>
            {
                while (true)
                {
                    if (!CanSave)
                    {
                        Thread.Sleep(1000);

                        continue;
                    }
                    ReSave();
                    Thread.Sleep(1000);
                }
            });
        }

        public void LoadService()
        {
            services = DBHelper.GetAllService();
        }

        private void ButtonStart_Click(object sender, RoutedEventArgs e)
        {
            var serviceItem = services[index];
            LoadNext();
        }

        public void ReSave()
        {
            MainWindow.CanSave = false;

            Thread.Sleep(2000);
            Button_Click(null, null);

            Thread.Sleep(4000);

            if (index >= services.Count)
            {
                return;
            }
            LoadNext();
            index++;
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            browser.ExecuteScriptAsync("document.getElementsByClassName(\"editor-top-bar__button-group\")[3].click()");

            MainWindow.CanSave = false;
        }

        private void btnDev_Click(object sender, RoutedEventArgs e)
        {
            browser.ShowDevTools();

        }

        public string LoadNext()
        {
            var service = services[index];

            string systemID = "6909679ff9659f7f07b4c529";
            string appID = service.AppId;// "6909679ff9659f7f07b4c52c";
            string serviceID = service.Id;// "6936a449845eea8ca6e0a8dd";
            var result = $"http://192.168.0.184:6122/ServiceEdit?systemId={systemID}&appId={appID}&pageId={serviceID}&backendAppId={appID}";
            browser.LoadUrl(result);
            index++;
            return result;
        }

        private void browser_Initialized(object sender, EventArgs e)
        {
        }
    }

    public class CefRequestHandlerc : RequestHandler
    {
        protected override IResourceRequestHandler GetResourceRequestHandler(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame,
            IRequest request, bool isNavigation, bool isDownload, string requestInitiator, ref bool disableDefaultHandling)
        {
            // 一个请求用一个CefResourceRequestHandler
            return new CefResourceRequestHandler();
        }
    }
    public class CefResourceRequestHandler : ResourceRequestHandler
    {
        protected override void OnResourceLoadComplete(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, IResponse response, UrlRequestStatus status, long receivedContentLength)
        {
            base.OnResourceLoadComplete(chromiumWebBrowser, browser, frame, request, response, status, receivedContentLength);

            if (request.Url.Contains("api/NC/ServiceRelease/Detail?"))
            {
                MainWindow.CanSave = true;
            }
        }
    }
}