本程序基于CefSharp实现自动打开一个网站,自动输入账号密码自动注册。然后跳转到商品页自动输入评论的内容然后提交。完全模拟人为在浏览器的所有操作,包括自动输入,自动点击等操作。

本解决方案可以应用于网络爬虫,刷单,刷评论,参与自动秒杀活动。抢票程序等等。

最终效果如下:

cefsharp是一个在c#中使用Chrome浏览器内核实现浏览器功能的插件,类似于c#中的WebBrowser功能。

主要代码:

<wpf:ChromiumWebBrowser x:Name="webBrowser" Address="https://www.walmart.com/account/login"/>

2、执行JavaScript

public async void EvaluateJavaScript(string s, bool addCommonJs = false)
                if (addCommonJs)
                    s = commonJs + s;
                var response = await webBrowser.EvaluateScriptAsync(s);
                if (response.Success && response.Result is IJavascriptCallback)
                    response = await ((IJavascriptCallback)response.Result).ExecuteAsync("This is a callback from EvaluateJavaScript");
                var EvaluateJavaScriptResult = response.Success ? (response.Result ?? "null") : response.Message;
            catch (Exception e)
                MessageBox.Show("Error while evaluating Javascript: " + e.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error);

 3、设置cookie

public static void SetCefCookies(string url, CookieCollection cookies)
            //Cef.GetGlobalCookieManager().SetStoragePath(Environment.CurrentDirectory, true);
            foreach (System.Net.Cookie c in cookies)
                var cookie = new CefSharp.Cookie
                    Creation = DateTime.Now,
                    Domain = c.Domain,
                    Name = c.Name,
                    Value = c.Value,
                    Expires = c.Expires
                Task<bool> task = Cef.GetGlobalCookieManager().SetCookieAsync(url, cookie);
                while (!task.IsCompleted)
                    continue;
                bool b = task.Result;

  4、获取当前页面的html源码

private string GetHTMLFromWebBrowser()
            // call the ViewSource method which will open up notepad and display the html. 
            // this is just so I can compare it to the html returned in GetSourceAsync() 
            // This is displaying all the html code (including child frames) 
            //webBrowser.GetBrowser().MainFrame.ViewSource();
            // Get the html source code from the main Frame. 
            // This is displaying only code in the main frame and not any child frames of it. 
            Task<String> taskHtml = webBrowser.GetBrowser().MainFrame.GetSourceAsync();
            string response = taskHtml.Result;
            return response;

  5、拦截json请求结果

 public class DefaultResourceHandler : ResourceRequestHandler
        public event EventHandler<JsonResponseHandlerEventArgs> json_response_handler;
        private Dictionary<ulong, MemoryStreamResponseFilter> responseDictionary = new Dictionary<ulong, MemoryStreamResponseFilter>();
        public DefaultResourceHandler() { }
        public DefaultResourceHandler(EventHandler<JsonResponseHandlerEventArgs> json_response_handler) {
            this.json_response_handler = json_response_handler;
        protected override IResponseFilter GetResourceResponseFilter(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, IResponse response)
            if (response.MimeType.Equals("application/json", StringComparison.OrdinalIgnoreCase)
                || (response.Headers["Content-Type"] != null && response.Headers["Content-Type"].ToLower().Contains("application/json")))
                return JsonResponseFilter.CreateFilter(request.Identifier.ToString());
            return null;
        protected override void OnResourceLoadComplete(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, IResponse response, UrlRequestStatus status, long receivedContentLength)
            var filter = JsonResponseFilter.GetFileter(request.Identifier.ToString()) as JsonResponseFilter;
            if (filter != null)
                var encode = !string.IsNullOrEmpty(response.Charset)
                    ? Encoding.GetEncoding(response.Charset)
                    : Encoding.UTF8;
                using (var read = new StreamReader(filter.GetStream(), encode))
                    //获取到的json内容
                    var text = read.ReadToEnd();
                    json_response_handler?.Invoke(response, new JsonResponseHandlerEventArgs(request, response, text));
                    Trace.WriteLine(response.MimeType + "=>" + request.Url + "::" + text);
				
Minor error in trying to simulate MouseLeftDown-MouseLeftUp event in CefSharp browser control Hello, I am using the CefSharp webbrowser control. I will explain what I am trying to do: I load in the URL: "https://uniswapv3.flipsidecrypto.com"
步骤如下: 第一步:获取网页调用Webbrowser 的Navigate系列函数。等待网页装载完成,得到document对象。 在调用 webBrowser.Document 之前,请确保 Webbrowser 网页装载完成,可以通过Webbrowser的DocumentCompleted事件进行监视。 先指定一个变量:IsCompleted在调用Webbrowser 的Navig...
C# CSharp用CefSharp开发浏览器--鼠标模拟,鼠标事件,鼠标点击,鼠标移动效果:模拟鼠标点击、移动,自动画线。开发环境方案一个坑代码 效果:模拟鼠标点击、移动,自动画线。 研究 网络爬虫和一些 验证码破解(人类行为检测) 时候,需要 自动 鼠标点击,鼠标移动等。初步找到个满意的方案,写了个案例。 WinForm程序 内嵌浏览器。并在某在线画图网站上,模拟鼠标 点击,移动,画线。 // 设置代理 IP 地址 CefSettings settings = new CefSettings(); settings.CefCommandLineArgs.Add("proxy-server", newProxyAddress); Cef.Initialize(settings); 在这个 `OnButtonClick` 方法中,你需要实现一个 `GenerateNewProxyAddress` 方法,用来生成新的代理 IP 地址。这个方法可以根据你的需求来实现,比如从一个 IP 地址池中随机选择一个 IP 地址。 通过以上步骤,当用户点击按钮时,就会自动切换到一个新的代理 IP 地址。需要注意的是,每次切换 IP 地址时,都需要重新调用 `Cef.Initialize` 方法来更新代理设置。