You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Selenium自动化政务网站解析时随机登出问题求助

解决方案

1. 模拟更贴近人工的交互行为

  • 随机化操作间隔:在点击、输入、页面跳转等所有操作前后,添加1-3秒的随机延迟,避免机械性固定间隔。示例代码:
    var random = new Random();
    Thread.Sleep(random.Next(1000, 3000)); // 1-3秒随机等待
    
  • 模拟自然鼠标移动:不要直接点击目标元素,先将鼠标移到页面空白区域,再过渡到目标元素后点击,还原用户寻找元素的过程:
    var actions = new Actions(driver);
    // 先移动到页面随机位置
    actions.MoveByOffset(random.Next(0, 100), random.Next(0, 100)).Perform();
    // 再移动到目标元素并点击
    actions.MoveToElement(targetElement).Click().Perform();
    
  • 填补PDF打印的无交互间隙:打印PDF的10秒是会话闲置高危期,可在打印过程中每隔2秒发送一次无影响的键盘事件(如按下并松开Shift键),维持会话活跃状态:
    // 触发打印操作
    actions.KeyDown(Keys.Control).SendKeys("p").KeyUp(Keys.Control).Perform();
    // 打印期间保持会话活跃
    for (int i = 0; i < 5; i++)
    {
        Thread.Sleep(2000);
        actions.KeyDown(Keys.Shift).KeyUp(Keys.Shift).Perform();
    }
    // 后续处理打印对话框关闭逻辑(需根据页面实际元素调整)
    

2. 优化会话保持策略

  • 主动刷新会话:每隔30-45分钟(短于网站默认超时时间)执行一次轻量交互,比如点击页面静态导航按钮、刷新当前页面(不影响流程前提下),触发服务器更新会话有效期。
  • 监控会话Cookie:定期获取网站会话Cookie,检查其过期时间,在临近过期前执行交互操作延长会话。示例代码:
    var sessionCookie = driver.Manage().Cookies.GetCookieNamed("sessionId"); // 替换为实际会话Cookie名称
    if (sessionCookie != null && sessionCookie.Expiry.HasValue)
    {
        var timeUntilExpiry = sessionCookie.Expiry.Value - DateTime.Now;
        if (timeUntilExpiry.TotalMinutes < 10)
        {
            // 执行轻量交互:点击底部静态链接后返回原页面
            driver.FindElement(By.Id("footer-link")).Click();
            driver.Navigate().Back();
        }
    }
    

3. 隐藏Selenium自动化特征

  • 配置Chromium启动参数:修改启动选项,禁用自动化检测相关特征:
    var options = new ChromeOptions();
    options.AddArgument("--disable-blink-features=AutomationControlled");
    options.AddArgument("--start-maximized");
    options.AddArgument("--disable-extensions");
    options.AddArgument("--no-sandbox");
    // 初始化驱动
    var driver = new ChromeDriver(options);
    
  • 注入JS修改浏览器属性:页面加载后执行JavaScript,将navigator.webdriver设置为undefined,避免网站检测:
    driver.ExecuteScript("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})");
    

4. 添加自动重试与恢复逻辑

  • 实现登出检测:在每次关键操作前(如读取数据、下载文档),检查页面是否存在登录状态标识(如用户名、登录按钮),若检测到登出则自动执行登录流程,继续当前客户操作。示例伪代码:
    bool IsLoggedIn()
    {
        try
        {
            return driver.FindElement(By.Id("user-avatar")).Displayed;
        }
        catch (NoSuchElementException)
        {
            return false;
        }
    }
    
    void HandleSessionExpiry()
    {
        if (!IsLoggedIn())
        {
            // 执行预设的登录流程
            Login(driver);
        }
    }
    
    // 每个客户操作前调用检测
    HandleSessionExpiry();
    ProcessCustomer(driver, customerData);
    

内容的提问来源于stack exchange,提问作者Ja Da

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 00:09:23