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

推荐订阅源

aimingoo的专栏
aimingoo的专栏
宝玉的分享
宝玉的分享
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
WordPress大学
WordPress大学
V
V2EX
Apple Machine Learning Research
Apple Machine Learning Research
J
Java Code Geeks
腾讯CDC
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Engineering at Meta
Engineering at Meta
L
LangChain Blog
Jina AI
Jina AI
博客园 - 叶小钗
B
Blog RSS Feed
Recent Announcements
Recent Announcements
H
Help Net Security
小众软件
小众软件
大猫的无限游戏
大猫的无限游戏
B
Blog
云风的 BLOG
云风的 BLOG
Blog — PlanetScale
Blog — PlanetScale
D
DataBreaches.Net
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
罗磊的独立博客

博客园 - Hey,Coder!

微信小程序 web方案实现调音器功能 systemctl slice配置docker最大占用cpu 内存 pipenv环境变量配置 .net8验证码 数据库差异对比工具 docker部署prometheus grafana pgexporter Alertmanager ubuntu24 换源 ssh配置 ubuntu24 Harbor部署 ubuntu24 kvm部署 cockpit web管理界面 .net api代理 Ubuntu 24.04 DMAR IOMMU 报错修复 uniapp iOS App 上架 vs文件软链接 Docker 网络别名 .net8通用中间件处理公共返回值结构 .net环境下OpenTelemetry Body 读取注意事项 jaeger界面显示异常 .net opentelemetry collector jaeger c# opentelemetry 自定义export c# opentelemetry 自定义export c# 生成对象的初始化代码 Elasticsearch ILM 与 Data Stream 概念及实例说明文档 portainer httphelper封装 Ocelot + Consul + SignalR 粘性会话 正交软件架构 docker postgresql17 主从复制 rabbitmq总结与c#示例 docker rabbitmq quartz dashboard
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;
            }
        }
    }
}