cefsharp 模拟点击 批量重置数据库的数据

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

  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;
            }
        }
    }
}

posted @ 2025-12-26 15:06  Hey,Coder!  阅读(2)  评论(0)    收藏  举报