最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用C#定時刷新已經(jīng)登錄過的網(wǎng)頁

 更新時間:2025年12月15日 09:27:04   作者:mangge08  
日常工作中,登錄內(nèi)部系統(tǒng)往往需要輸入用戶名、密碼、短信驗證碼,但是如果30分鐘不操作,會自動退出,為避免頻繁登錄,可以使用c#寫一個自動刷新指定網(wǎng)址頁面的程序,所以本文給大家介紹了如何使用C#定時刷新已經(jīng)登錄過的網(wǎng)頁,需要的朋友可以參考下

1、引言

日常工作中,登錄內(nèi)部系統(tǒng)往往需要輸入用戶名、密碼、短信驗證碼,但是如果30分鐘不操作,會自動退出,為避免頻繁登錄,可以使用c#寫一個自動刷新指定網(wǎng)址頁面的程序。找來找去,這個最好用

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Text;
using System.Text.Json;
using System.Threading;
using System.Threading.Tasks;
using System.Net.WebSockets;
using Newtonsoft.Json;



///用這個命令行打開谷歌,然后在進入自己的地址 "C:\Program Files\Google\Chrome\Application\chrome.exe" --remote-debugging-port=9222 --user-data-dir="C:\temp\chrome_debug"
namespace shuxin
{
    public class TabInfo
    {
        [JsonProperty("id")]
        public string Id { get; set; }

        [JsonProperty("url")]
        public string Url { get; set; }

        [JsonProperty("webSocketDebuggerUrl")]
        public string WebSocketUrl { get; set; }

        [JsonProperty("title")]
        public string Title { get; set; }
    }

    class Program
    {
        private const string TARGET_URL = "sd4a.com"; // 支持部分匹配,如包含 baidu.com
        private const int REFRESH_INTERVAL_MINUTES = 19;
        private static readonly HttpClient httpClient = new();

        static async Task Main(string[] args)
        {
            Console.WriteLine("Auto-refresh for browser tabs started...");
            Console.WriteLine($"Target URL pattern: {TARGET_URL}");
            Console.WriteLine($"Refresh every {REFRESH_INTERVAL_MINUTES} minutes.\n");

            while (true)
            {
                try
                {
                    await RefreshTargetTabAsync();
                }
                catch (Exception ex)
                {
                    Console.WriteLine($"Error: {ex.Message}");
                }

                await Task.Delay(TimeSpan.FromMinutes(REFRESH_INTERVAL_MINUTES));
            }
        }

        static async Task RefreshTargetTabAsync()
        {
            // Step 1: 獲取所有標簽頁
            var tabsJson = await httpClient.GetStringAsync("http://localhost:9222/json");
            var tabs = JsonConvert.DeserializeObject<List<TabInfo>>(tabsJson);

            // Step 2: 查找目標 URL(支持子路徑)
            var targetTab = tabs.FirstOrDefault(t =>
                t.Url != null && t.Url.Contains(TARGET_URL, StringComparison.OrdinalIgnoreCase));

            if (targetTab == null)
            {
                Console.WriteLine($"[{DateTime.Now:HH:mm:ss}] Target tab not found.");
                return;
            }

            Console.WriteLine($"[{DateTime.Now:HH:mm:ss}] Found tab: {targetTab.Title} - {targetTab.Url}");

            // Step 3: 通過 WebSocket 發(fā)送 Page.reload 命令
            await ReloadPageViaCDP(targetTab.WebSocketUrl);
            Console.WriteLine($"[{DateTime.Now:HH:mm:ss}] Page refreshed successfully.");
        }

        static async Task ReloadPageViaCDP(string webSocketUrl)
        {
            using var ws = new ClientWebSocket();
            await ws.ConnectAsync(new Uri(webSocketUrl), CancellationToken.None);

            // 構造 CDP Page.reload 命令
            var command = new
            {
                id = 1,
                method = "Page.reload",
                @params = new { }
            };

            string json = JsonConvert.SerializeObject(command);
            var buffer = Encoding.UTF8.GetBytes(json);
            await ws.SendAsync(buffer, WebSocketMessageType.Text, true, CancellationToken.None);

            // 可選:讀取響應(非必須)
            var receiveBuffer = new byte[1024];
            await ws.ReceiveAsync(receiveBuffer, CancellationToken.None);

            await ws.CloseAsync(WebSocketCloseStatus.NormalClosure, "", CancellationToken.None);
        }
    }
}

2、如果想增加日志,可以這樣寫:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net.Http;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Net.WebSockets;
using Newtonsoft.Json;

/// 啟動Chrome命令:"C:\Program Files\Google\Chrome\Application\chrome.exe" --remote-debugging-port=9222 --user-data-dir="C:\temp\chrome_debug"
namespace shuxin
{
    public class TabInfo
    {
        [JsonProperty("id")]
        public string Id { get; set; }
        [JsonProperty("url")]
        public string Url { get; set; }
        [JsonProperty("webSocketDebuggerUrl")]
        public string WebSocketUrl { get; set; }
        [JsonProperty("title")]
        public string Title { get; set; }
    }

    class Program
    {
        private const string TARGET_URL = "sd4a.com";
        private const int REFRESH_INTERVAL_MINUTES = 19;
        private static readonly HttpClient httpClient = new();
        private const string LogFilePath = @"c:\log.txt";

        static async Task Main(string[] args)
        {
            // 初始化信息
            LogAndPrint("Auto-refresh for browser tabs started...");
            LogAndPrint($"Target URL pattern: {TARGET_URL}");
            LogAndPrint($"Refresh every {REFRESH_INTERVAL_MINUTES} minutes.\n");

            while (true)
            {
                try
                {
                    await RefreshTargetTabAsync();
                }
                catch (Exception ex)
                {
                    LogAndPrint($"Error: {ex.Message}");
                }
                await Task.Delay(TimeSpan.FromMinutes(REFRESH_INTERVAL_MINUTES));
            }
        }

        static async Task RefreshTargetTabAsync()
        {
            // 獲取所有標簽頁
            var tabsJson = await httpClient.GetStringAsync("http://localhost:9222/json");
            var tabs = JsonConvert.DeserializeObject<List<TabInfo>>(tabsJson);

            // 查找目標標簽頁
            var targetTab = tabs.FirstOrDefault(t => t.Url != null && t.Url.Contains(TARGET_URL, StringComparison.OrdinalIgnoreCase));
            if (targetTab == null)
            {
                LogAndPrint($"[{DateTime.Now:HH:mm:ss}] Target tab not found.");
                return;
            }

            LogAndPrint($"[{DateTime.Now:HH:mm:ss}] Found tab: {targetTab.Title} - {targetTab.Url}");
            // 刷新頁面
            await ReloadPageViaCDP(targetTab.WebSocketUrl);
            LogAndPrint($"[{DateTime.Now:HH:mm:ss}] Page refreshed successfully.");
        }

        static async Task ReloadPageViaCDP(string webSocketUrl)
        {
            using var ws = new ClientWebSocket();
            await ws.ConnectAsync(new Uri(webSocketUrl), CancellationToken.None);

            // 構造刷新命令
            var command = new { id = 1, method = "Page.reload", @params = new { } };
            var buffer = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(command));
            await ws.SendAsync(buffer, WebSocketMessageType.Text, true, CancellationToken.None);

            // 讀取響應(可選)
            var receiveBuffer = new byte[1024];
            await ws.ReceiveAsync(receiveBuffer, CancellationToken.None);

            await ws.CloseAsync(WebSocketCloseStatus.NormalClosure, "", CancellationToken.None);
        }

        /// <summary>
        /// 統(tǒng)一處理:控制臺輸出 + 寫入日志
        /// </summary>
        private static void LogAndPrint(string message)
        {
            Console.WriteLine(message);
            try
            {
                // 追加寫入日志,帶完整時間戳
                var logContent = $"[{DateTime.Now:yyyy-MM-dd HH:mm:ss}] {message}{Environment.NewLine}";
                File.AppendAllText(LogFilePath, logContent, Encoding.UTF8);
            }
            catch (Exception ex)
            {
                // 日志寫入失敗時僅提示,不影響主程序
                Console.WriteLine($"Failed to write log: {ex.Message}");
            }
        }
    }
}

3、可以通過 VBS 腳本調(diào)用 exe 程序并不彈出控制臺窗口

創(chuàng)建一個 .vbs 文件,比如 run_hidden.vbs,內(nèi)容如下:然后雙擊執(zhí)行即可。也可以設置成開機啟動

' run_hidden.vbs
' 注意:替換為你實際的exe文件路徑
Set WshShell = CreateObject("WScript.Shell")
' 寫法1:三重雙引號包裹路徑(推薦,處理路徑含空格的情況)
WshShell.Run """C:\your\actual\path\shuxin.exe""", 0, False
' 寫法2:如果路徑?jīng)]有空格,也可以直接寫(不推薦,兼容性差)
' WshShell.Run "C:\your\actual\path\shuxin.exe", 0, False

' 釋放對象(可選,VBS會自動回收,但顯式釋放更規(guī)范)
Set WshShell = Nothing

代碼解析:

這是一個基于 Chrome DevTools Protocol (CDP) 實現(xiàn)自動刷新特定瀏覽器標簽頁的 C# 程序。讓我詳細分析其工作原理和用途:

主要功能

程序會定期(每19分鐘)檢查并刷新包含特定URL(如baidu.com)的Chrome標簽頁,防止網(wǎng)頁因長時間不活動而過期或超時。

代碼結構分析

1. 核心組件

  • TabInfo類:定義了瀏覽器標簽頁的數(shù)據(jù)結構
  • Main方法:程序主循環(huán),定時執(zhí)行刷新任務
  • RefreshTargetTabAsync方法:查找并刷新目標標簽頁
  • ReloadPageViaCDP方法:通過WebSocket發(fā)送刷新命令

2. 工作流程

  1. 啟動要求:需要先用特定命令啟動Chrome,啟用遠程調(diào)試
  2. 獲取標簽頁列表:通過HTTP請求 http://localhost:9222/json 獲取所有標簽頁信息
  3. 查找目標標簽頁:匹配包含 TARGET_URL 的URL
  4. 發(fā)送刷新命令:通過WebSocket連接發(fā)送 Page.reload CDP命令
  5. 循環(huán)執(zhí)行:每19分鐘重復上述過程

3. 關鍵技術點

Chrome遠程調(diào)試

# 使用9222端口開啟調(diào)試模式 chrome.exe --remote-debugging-port=9222 --user-data-dir="C:\temp\chrome_debug"

CDP通信

  • 通過WebSocket連接到 webSocketDebuggerUrl
  • 發(fā)送JSON格式的CDP命令
  • Page.reload 命令會觸發(fā)頁面刷新

4. 潛在 用途

  • 保持登錄狀態(tài):防止需要登錄的網(wǎng)頁會話過期
  • 數(shù)據(jù)監(jiān)控:保持監(jiān)控頁面實時更新
  • 避免超時:防止長時間不操作導致的連接斷開

5. 注意事項和潛在問題

安全問題

// 遠程調(diào)試端口暴露了瀏覽器控制權限 
// 建議添加訪問控制或身份驗證

資源管理

// HttpClient 是靜態(tài)的,但未正確配置重試和超時 
// 建議添加適當?shù)漠惓L幚砗唾Y源清理 
private static readonly HttpClient httpClient = new();

改進建議

  1. 錯誤處理增強:當前異常處理較簡單,可能需要對特定異常做不同處理
  2. 配置靈活性:可將目標URL和間隔時間改為可配置參數(shù)
  3. 多個標簽頁支持:目前只處理第一個匹配的標簽頁
  4. 連接狀態(tài)檢查:添加WebSocket連接狀態(tài)的驗證

6. 依賴項

  • Newtonsoft.Json (JSON.NET) - 用于JSON序列化
  • System.Net.WebSockets - WebSocket通信
  • System.Text.Json - .NET內(nèi)置JSON支持(雖然代碼中使用了Newtonsoft)

這個程序?qū)嶋H上是一個簡單的"防休眠"工具,通過模擬用戶活動來保持網(wǎng)頁的活躍狀態(tài)。

以上就是使用C#定時刷新已經(jīng)登錄過的網(wǎng)頁的詳細內(nèi)容,更多關于C#定時刷新網(wǎng)頁的資料請關注腳本之家其它相關文章!

相關文章

最新評論

嘉兴市| 如皋市| 青田县| 霍州市| 海口市| 特克斯县| 四子王旗| 饶阳县| 长岭县| 舟曲县| 乳山市| 邹平县| 原阳县| 灵台县| 昔阳县| 嘉定区| 三河市| 敦煌市| 普宁市| 盘山县| 大英县| 利川市| 仙居县| 英吉沙县| 湖州市| 仁怀市| 麻江县| 垣曲县| 紫金县| 任丘市| 蒙阴县| 吴川市| 板桥市| 海伦市| 通海县| 平度市| 兰坪| 开封市| 沿河| 汝南县| 古丈县|