当前位置: 首页 > news >正文

C#使用WebDriver模拟浏览器操作WEB页面

有时候需要模拟访问页面触发某个功能,可以使用WebDriver来实现这一功能,驱动打开浏览器,并对页面重定向以及对页面写入脚本等操作。

安装Selenium.Chrome,Selenium.Support.UI,Selenium

引入

using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Support.UI;
using OpenQA.Selenium;

  /// <summary>
        /// 获得WebDriver
        /// </summary>
        /// <returns></returns>
        private IWebDriver GetDriver()
        {
            try
            {
                
                if (driver == null || driver.WindowHandles.Count == 0)
                {
                    driver = new ChromeDriver();
                }
            }
            catch (Exception ex) {
                if(driver!=null)
                driver.Dispose();
                 driver = new ChromeDriver();
                WriteLogHelper.WriteLogsAsync($"重启driver:{ex.ToString()}","重启web模拟");
            }
            return driver;
        }

   private void button5_Click(object sender, EventArgs e)
        {
            var url = textBox1.Text;
            if (string.IsNullOrEmpty(url) == false)
            {
                driver = GetDriver();
                // 打开目标URL
                driver.Navigate().GoToUrl(url);
                WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(5));
                try
                {
                    wait.Until((d) =>
                    {
                        var element = driver.FindElement(By.Id("printResult"));
                        var result = element.Text;
                        return string.IsNullOrEmpty(result)==false;
                    });
                    var element = driver.FindElement(By.Id("printResult"));
                    var result =  element.Text;
                }
                catch (Exception ex) {
                    if (driver != null){
                        driver.Dispose();
                        driver = null;
                    }
                }
            }
        }

通过driver.Navigate().GoToUrl(url);  打开制定URL,

WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(5));

wait.Until((d) =>
                    {
                        var element = driver.FindElement(By.Id("printResult"));
                        var result = element.Text;
                        return string.IsNullOrEmpty(result)==false;
                    });
                    var element = driver.FindElement(By.Id("printResult"));
                    var result =  element.Text;

通过 WebDriverWait 可以设定页面满足一定条件后进行页面操作,比如某个元素保护指定值,以及还可以执行脚本

IJavaScriptExecutor jsExecutor = driver as IJavaScriptExecutor; 

jsExecutor.ExecuteScript("$(document).trigger({type: 'keydown', which: 87, keyCode: 87})");

相关文章:

C#使用WebDriver模拟浏览器操作WEB页面

有时候需要模拟访问页面触发某个功能&#xff0c;可以使用WebDriver来实现这一功能&#xff0c;驱动打开浏览器&#xff0c;并对页面重定向以及对页面写入脚本等操作。 安装Selenium.Chrome&#xff0c;Selenium.Support.UI&#xff0c;Selenium 引入 using OpenQA.Selenium.…...

正则表达式 - 简单模式匹配

目录 一、测试数据 二、简单模式匹配 1. 匹配字面值 2. 匹配数字和非数字字符 3. 匹配单词与非单词字符 4. 匹配空白字符 5. 匹配任意字符 6. 匹配单词边界 7. 匹配零个或多个字符 8. 单行模式与多行模式 一、测试数据 这里所用文本是《学习正则表达式》这本书带的&a…...

银行数字化转型导师坚鹏:银行数字化转型培训方案

目录 一、银行数字化转型培训背景 二、银行数字化转型模型 三、银行数字化转型课程设计思路 四、 银行数字化转型课程基本介绍 五、 银行数字化转型课程设置 六、银行数字化转型课程大纲 七、培训方案实施流程 一、银行数字化转型培训背景 2020年1月3日&#xff…...

多维时序 | MATLAB实现BO-CNN-LSTM贝叶斯优化卷积神经网络-长短期记忆网络多变量时间序列预测

多维时序 | MATLAB实现BO-CNN-LSTM贝叶斯优化卷积神经网络-长短期记忆网络多变量时间序列预测 目录 多维时序 | MATLAB实现BO-CNN-LSTM贝叶斯优化卷积神经网络-长短期记忆网络多变量时间序列预测效果一览基本介绍模型搭建程序设计参考资料 效果一览 基本介绍 MATLAB实现BO-CNN-…...

Shell知识点(一)

1.echo 命令 echo命令的作用是在屏幕输入一行文本&#xff0c;可以降该命令的参数原样输出。 $ echo hello world hello world 如果想要输出的是多行文本&#xff0c;包含换行符&#xff0c;这时就需要把多行文本放在引号里面 $ echo "<HTML><HEAD><TITLE…...

mysql 索引失效、联合索引失效场景和举例

索引失效 假设有一张user 表&#xff0c;表中包含索引 (id); (name); (birthday); (name,age); 对索引字段进行函数操作 select name from user where year(birthday) 2000;使用模糊查询&#xff0c;查询中使用通配符 select name from user where name like %益达%;使用i…...

快速将PDF转换为图片:使用在线转换器的步骤

PDF文件是一种常见的文档格式&#xff0c;但在某些情况下需要将其转换为图片格式&#xff0c;例如将PDF文件插入PPT演示文稿中。此时&#xff0c;使用在线PDF转换器是一种快速且简便的方法。 本文将介绍如何使用在线转换器将PDF文件转换为图片格式。 步骤1&#xff1a;选择合…...

什么是gpt一4-如何用上gpt-4

怎么使用gpt-4 目前GPT-4还未正式发布或公开&#xff0c;因此也没有详细的对接说明。但是我们可以根据GPT-4的前身GPT-3的应用经验&#xff0c;以及GPT-4的预期功能推测一些可能的使用步骤&#xff1a; 选择适合的GPT-4实现技术&#xff1a;GPT-4可能有不同的实现技术&#xff…...

Docker 相关概念

1、Docker是什么&#xff1f; 如何确保应用能够在这些环境中运行和通过质量检测&#xff1f;并且在部署过程中不出现令人头疼的版本、配置问题&#xff0c;也无需重新编写代码和进行故障修复&#xff1f; 答案就是使用容器。Docker之所以发展如此迅速&#xff0c;也是因为它对…...

STM32平衡小车 TB6612电机驱动学习

TB6612FNG简介 单片机引脚的电流一般只有几十个毫安&#xff0c;无法驱动电机&#xff0c;因此一般是通过单片机控制电机驱动芯片进而控制电机。TB6612是比较常用的电机驱动芯片之一。 TB6612FNG可以同时控制两个电机&#xff0c;工作电流1.2A&#xff0c;最大电流3.2A。 VM电…...

动态加载 JS 文件

动态加载JS文件是指在网页运行过程中通过JavaScript代码向页面中动态添加外部JS文件&#xff0c;这种方式能够提高页面加载速度和用户体验&#xff0c;并且可以帮助网站实现更多的功能和特效。 本文将详细介绍动态加载JS文件的基本原理、优势、注意事项以及具体实现方法&#…...

14、lldb调试指令

LLDB LLDB(Low Lever Debug): 默认内置于Xcode中的动态调试工具.标准的lldb提供了一组广泛的命令,旨在与老版本的GDB命令兼容.除了使用标准配置外,还可以很容易地自定义lldb以满足实际需要. 1.1 lldb语法: <command> [<subcommand> [<subcommand>...]] &l…...

浏览器缓存策略:强缓存和协商缓存

浏览器缓存&#xff1a;其实就是在本地使用的计算机中开辟一个内存区&#xff0c;同时也开辟一个硬盘区&#xff0c;作为数据传输的缓冲区&#xff0c;然后利用这个缓冲区来暂时保护用户以前访问的信息通常浏览器的缓存策略分为两种&#xff1a;强缓存和协商缓存&#xff0c;强…...

2023年Chat GPT 应用前景分析

从2022年12月初刚上线至今&#xff0c;不到半年时间ChatGPT月活就超过了1亿用户&#xff01;可谓火的一塌糊涂&#xff0c;比尔盖茨都称&#xff1a;ChatGPT的历史意义重大&#xff0c;不亚于PC或互联网诞生。以至于ChatGPT官网长期都处于满负荷运转的状态&#xff01; 由于Ch…...

并发计算公式

常用并发数计算公式&#xff1a;N[(n0.8SP)/(T0.2)]*R 其中&#xff1a; n为系统用户数&#xff1b; S为每个用户发生的业务笔数&#xff08;QPS&#xff09;&#xff1b; P为每笔业务所需要访问服务器的时间&#xff0c;单位为秒&#xff1b; T为使用业务的时间&#xff0c;单…...

“华为杯”研究生数学建模竞赛2020年-【华为杯】E题:能见度估计与预测(附获奖论文及python代码实现)

​​​​​​​ 目录 摘 要: 一、问题背景与问题重述 1.1 问题背景 1.2 问题重述...

Arduino学习笔记3

一.RGB三色小灯实验 1.源代码 int rgb_R11;//接到板子上面的PWM口11 R int rgb_G9;//接到板子上面的PWM口9 G int rgb_B10;//接到板子上面的PWM口10 B void setup() {pinMode(rgb_R,OUTPUT);//设置rgb_R的控制口为输出模式pinMode(rgb_G,OUTPUT);//设置rgb_G的控制口为输出模…...

BPMN2.0 任务-用户任务

“用户任务(user task)”用于对需要人工执行的任务进行建模。当流程执行到达用户任务时,会为指派至该任务的用户或组的任务列表创建一个新任务。 用户任务用左上角有一个小用户图标的标准任务(圆角矩形)表示。 用户任务在XML中如下定义。其中id是必须属性,name是可选属性…...

David Silver Reinforcement Learning -- Markov process

1 Introduction 这个章节介绍关键的理论概念。 马尔科夫过程的作用&#xff1a; 1&#xff09;马尔科夫过程描述强化学习环境的方法&#xff0c;环境是完全能观测的&#xff1b; 2&#xff09;几乎所有的RL问题可以转换成MDP的形式&#xff1b; 2 Markov Processes 2.1 Mark…...

项目结束倒数2

今天,解决了,多个点的最短路问题 用的dfs,配上了floyed计算出的广源距离 难点是要记录路线,dfs记录路线就很烦 但是好在结束了,经过无数的测试,确保没啥问题(应该把) 来看看我的代码 void dfs(int b[], int x, int* sum, int last, int sums, int a[], BFS& s, Floyd_A…...

临近毕业10款降AI率工具实测+避坑:到底哪个降AI率工具是真的有用

2025 年 12 月 25 日知网 AIGC 检测系统升级&#xff0c;2026 年 4 月 27 日维普 AI 率检测平台升级…2026 毕业季&#xff0c;各大主流 AIGC 检测软件陆续升级系统&#xff0c;识别 AI 痕迹更加精准。 临近毕业&#xff0c;同学们看者飘红的 AIGC 检测报告、纷繁复杂的降 AI 系…...

QMCDecode:三步快速解密QQ音乐加密音频的免费工具

QMCDecode&#xff1a;三步快速解密QQ音乐加密音频的免费工具 【免费下载链接】QMCDecode QQ音乐QMC格式转换为普通格式(qmcflac转flac&#xff0c;qmc0,qmc3转mp3, mflac,mflac0等转flac)&#xff0c;仅支持macOS&#xff0c;可自动识别到QQ音乐下载目录&#xff0c;默认转换结…...

AArch64 TRCCNTCTLR寄存器详解与调试技巧

1. AArch64 TRCCNTCTLR寄存器概述在AArch64架构中&#xff0c;TRCCNTCTLR&#xff08;Trace Counter Control Register&#xff09;是嵌入式跟踪扩展&#xff08;FEAT_ETE&#xff09;功能的重要组成部分。作为系统调试和性能分析的核心组件&#xff0c;它负责控制跟踪计数器的…...

红队exe捆绑避坑指南:绕过EDR与邮件网关的可信交付实践

1. 这不是“打包器教学”&#xff0c;而是红队实战中反复摔打出来的交付逻辑在真实红队支撑或攻防演练中&#xff0c;我见过太多人把“exe捆绑”当成一个纯技术动作&#xff1a;msfvenom生成payload → 用Resource Hacker换图标 → 7-Zip加自解压 → 发给目标。结果呢&#xff…...

嵌入式开发通用工具包设计:提升效率与代码质量的核心架构

1. 项目概述&#xff1a;为什么嵌入式开发需要一个“工具箱”&#xff1f;干了十几年嵌入式&#xff0c;从8位单片机玩到多核ARM Cortex-A&#xff0c;我最大的感受就是&#xff1a;重复造轮子和调试效率低下是拖慢项目进度的两大元凶。每次新项目启动&#xff0c;都得重新搭建…...

淮南家长必看:淮南哪里学少儿编程靠谱?原来这样选才不踩坑。

说实话&#xff0c;很多淮南家长送孩子学编程&#xff0c;心里是没底的。因为编程不像钢琴、画画&#xff0c;能当场弹一首或画一张给你看。孩子到底学了啥、学得怎么样&#xff0c;家长往往两眼一抹黑。今天我不推荐任何一家机构&#xff0c;只跟你分享三个普通人一眼就能看懂…...

NebulaGraph Console终极指南:简单快速掌握图数据库命令行工具

NebulaGraph Console终极指南&#xff1a;简单快速掌握图数据库命令行工具 【免费下载链接】nebula-console Command line interface for the Nebula Graph service 项目地址: https://gitcode.com/gh_mirrors/ne/nebula-console NebulaGraph Console是NebulaGraph图数据…...

技术债的“利息”怎么算?一个让非技术领导也能理解的比喻

一、从“信用卡账单”到“技术债利息”&#xff1a;一个通俗的起点软件测试从业者对“技术债”这个词绝不陌生&#xff0c;每次面对历史代码里的“隐秘角落”&#xff0c;看着新功能开发时层出不穷的连锁Bug&#xff0c;我们都能直观感受到技术债带来的拖累。但要向非技术领导解…...

Windows下C语言编译指南

学习C语言入门有一定难度&#xff0c;需勤加练习。多数人使用Windows系统&#xff0c;那么在Windows环境下如何编译运行C语言程序&#xff1f;掌握合适工具与方法是关键。1、 学习C语言时&#xff0c;我使用的是Visual C 6.0编译器。如今&#xff0c;Windows系统下还可使用功能…...

TowerPersonalProperty.cs

TowerPersonalProperty 是塔的标准化攻击组件&#xff0c;攻击节奏&#xff08;CD管理&#xff09;子弹发射&#xff08;从对象池获取并配置&#xff09;视觉表现&#xff08;旋转、动画、音效、特效&#xff09;经济交互&#xff08;升级/出售价格计算与金币变更&#xff09;它…...