C# Selenium+HtmlAgilityPack 例子
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 | using OpenQA.Selenium; using OpenQA.Selenium.Chrome; using OpenQA.Selenium.Support.UI; using System; using System.Threading; using System.Windows.Forms; namespace OA_OT1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void btnStart_Click( object sender, EventArgs e) { string baseUrl = "http://192.168.0.1/" ; string url = $ "{baseUrl}login.aspx" ; ChromeOptions chromeOptions = new ChromeOptions(); chromeOptions.AddArguments( "headless" ); //隐藏google //IWebDriver webDriver = new ChromeDriver(chromeOptions); IWebDriver webDriver = new ChromeDriver(); webDriver.Navigate().GoToUrl(url); webDriver.Manage().Window.Maximize(); // 根据元素名称清除元素文本 webDriver.FindElement(By.Name( "txtUserNo" )).Clear(); webDriver.FindElement(By.Name( "txtPassword" )).Clear(); // 用户名和密码赋值 webDriver.FindElement(By.Name( "txtUserNo" )).SendKeys( "DL00000" ); webDriver.FindElement(By.Name( "txtPassword" )).SendKeys( "12345678" ); // 点击login按钮 webDriver.FindElement(By.Name( "btnLogin" )).Click(); // 根据超链接文字找到超链接 IWebElement link = webDriver.FindElement(By.LinkText( "XX一览" )); // 点击超链接 link.Click(); // 切换frame webDriver = webDriver.SwitchTo().Frame(webDriver.FindElement(By.Id( "iframeMain" ))); // 声明两个select SelectElement selDepartment; SelectElement selProject; // 根据ID找到第一个select IWebElement department = webDriver.FindElement(By.Name( "ctl00$main$dropDepartment" )); selDepartment = new SelectElement(department); // 取得select的option个数 int departCnt = selDepartment.Options.Count; // 选择第一个 selDepartment.SelectByIndex(1); Thread.Sleep(2000); // 找到第二个select(这个select的内容是根据第一个select选择的内容填充的,即二级联动) IWebElement project = webDriver.FindElement(By.Name( "ctl00$main$dropItemGroup" )); selProject = new SelectElement(project); // 取得select的option个数 int projCnt = selProject.Options.Count; /* * 上面为什么要取得两个select的option个数? * 因为在循环里取控件,当页面刷新后,控件已经变了,但是变量还是刷新前的内容,这样会报错 * * 执行下面的代码,每次都重新取控件,程序可正常执行 * */ for ( int i = 1; i < 2; i++) { department = webDriver.FindElement(By.Name( "ctl00$main$dropDepartment" )); selDepartment = new SelectElement(department); selDepartment.SelectByIndex(i); Thread.Sleep(2000); for ( int k = 1; k < projCnt; k++) { project = webDriver.FindElement(By.Name( "ctl00$main$dropItemGroup" )); selProject = new SelectElement(project); selProject.SelectByIndex(k); webDriver.FindElement(By.XPath( "//input[@id=\"ctl00_main_btnSelect\"]" )).Click(); Thread.Sleep(2000); // 下面的代码是用HtmlAgilityPack取得需要的内容 var html = webDriver.PageSource; HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument(); //加载文档对象模型 doc.LoadHtml(html); //获取到百度按钮节点 把我们刚刚复制的XPath粘贴上去 HtmlAgilityPack.HtmlNode htmlnode = doc.DocumentNode.SelectSingleNode( "//input[@id='ctl00_main_btnSelect']" ); string value = htmlnode.GetAttributeValue( "value" , "" ); htmlnode = doc.DocumentNode.SelectSingleNode( "//span[@id='ctl00_main_labTotal']" ); value = htmlnode.InnerText; } } } } } |
作者:lost0
出处:https://www.cnblogs.com/lost0/p/15504845.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?