0

0

如何用C#写自动化脚本

煙雲

煙雲

发布时间:2025-07-14 11:10:02

|

865人浏览过

|

来源于php中文网

原创

c#写自动化脚本需根据目标选择库并处理异常。1.明确目标:网页用selenium webdriver;桌面应用用ui automation;系统任务用system.io、system.diagnostics等库。2.编写代码示例:如使用selenium打开网页、输入内容、提交表单。3.测试和调试:使用webdriverwait处理动态加载元素,如elementisvisible、elementtobeclickable等条件。4.ui automation无需窗口句柄定位元素:通过propertycondition查找元素属性。5.处理异常:try-catch捕获nosuchelementexception、webdriverexception等异常,并用finally确保关闭浏览器

如何用C#写自动化脚本

C#写自动化脚本,核心在于找到合适的库来驱动你想自动化的目标,然后用C#的语法把逻辑串起来。选择哪个库,取决于你要自动化什么。

解决方案:

首先,明确你的自动化目标。是要自动化网页操作?桌面应用?还是系统任务?不同的目标对应不同的库。

  • 网页自动化: Selenium WebDriver 是首选。它允许你模拟用户在浏览器中的行为,比如点击按钮、填写表单、滚动页面等等。你需要安装 Selenium 的 NuGet 包,并下载对应浏览器的 WebDriver (例如 ChromeDriver for Chrome)。

  • 桌面应用自动化: UI Automation 是 Windows 平台上的强大工具。它允许你访问和控制桌面应用程序的 UI 元素。C# 对 UI Automation 提供了良好的支持。

  • 系统任务自动化: C# 本身就有很多类库可以用来执行系统任务,比如 System.IO 用于文件操作,System.Diagnostics 用于启动进程,System.ServiceProcess 用于管理 Windows 服务等等。

其次,编写代码。以下是一个使用 Selenium WebDriver 自动化网页操作的简单例子:

using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;

public class Example
{
    public static void Main(string[] args)
    {
        // 设置 ChromeDriver 的路径
        ChromeOptions options = new ChromeOptions();
        options.BinaryLocation = @"C:\Program Files\Google\Chrome\Application\chrome.exe"; // Chrome浏览器路径
        options.AddArgument("--remote-debugging-port=9222"); // 远程调试端口

        IWebDriver driver = new ChromeDriver(@"C:\path\to\chromedriver", options); // chromedriver路径

        // 打开网页
        driver.Navigate().GoToUrl("https://www.example.com");

        // 找到搜索框并输入内容
        IWebElement searchBox = driver.FindElement(By.Name("q"));
        searchBox.SendKeys("C# automation");

        // 提交搜索
        searchBox.Submit();

        // 等待一段时间,然后关闭浏览器
        System.Threading.Thread.Sleep(5000);
        driver.Quit();
    }
}

这个例子展示了如何打开一个网页,找到一个元素,输入一些文本,然后提交表单。你需要根据你的具体需求修改这个代码。

最后,测试和调试。自动化脚本通常需要大量的测试和调试才能正常工作。确保你的脚本能够处理各种异常情况,比如网页加载失败、元素找不到等等。

Selenium WebDriver 如何处理动态加载的元素?

云网OA
云网OA

采用JSP开发的办公自动化产品、基于B/S结构,运行环境:JDK v1.5、Tomcat v5.5、MySQL v4.1,三者均为以上版本其他相关内容:可视化流程设计: 流程支持串签、会签和分支流程,可以设置流程节点的修改、删除权限,并可指定流程中各个用户在表单中可以填写的域。智能表单所见即所得设计: 智能设计,自动在数据库中生成表格,方便优化程序 公共交流: 集论坛、博客、聊天室于一体文件柜:C

下载

Selenium 提供了多种等待策略来处理动态加载的元素。最常用的方法是使用 WebDriverWait 类。

using OpenQA.Selenium;
using OpenQA.Selenium.Support.UI;
using System;

// ...

WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
IWebElement element = wait.Until(ExpectedConditions.ElementIsVisible(By.Id("myDynamicElement")));

// 现在你可以安全地操作这个元素了
element.Click();

WebDriverWait 会定期检查元素是否可见,直到超时。ExpectedConditions 类提供了很多常用的条件,比如元素是否可见、是否可点击等等。

除了 ElementIsVisible,还有其他有用的 ExpectedConditions 方法,例如:

  • ElementToBeClickable: 检查元素是否可点击。
  • PresenceOfAllElementsLocatedBy: 检查是否存在至少一个匹配的元素。
  • TextToBePresentInElement: 检查元素中是否包含指定的文本。

UI Automation 如何在没有窗口句柄的情况下定位元素?

UI Automation 使用树形结构来表示 UI 元素。你可以通过不同的属性和关系来定位元素,而不需要窗口句柄。

using System.Windows.Automation;

// ...

// 获取根元素
AutomationElement rootElement = AutomationElement.RootElement;

// 查找具有特定属性的元素
PropertyCondition condition = new PropertyCondition(AutomationElement.NameProperty, "My Button");
AutomationElement buttonElement = rootElement.FindFirst(TreeScope.Descendants, condition);

// 操作元素
if (buttonElement != null)
{
    InvokePattern invokePattern = (InvokePattern)buttonElement.GetCurrentPattern(InvokePattern.Pattern);
    invokePattern.Invoke();
}

这个例子展示了如何使用 PropertyCondition 来查找具有特定名称的按钮,然后调用它的 Invoke 方法。UI Automation 提供了丰富的属性和模式,可以用来定位和操作各种 UI 元素。

如何处理自动化脚本中的异常?

自动化脚本很容易遇到各种异常,比如网页加载失败、元素找不到、网络连接中断等等。你需要使用 try-catch 块来捕获这些异常,并采取适当的措施。

try
{
    // 自动化代码
    driver.Navigate().GoToUrl("https://www.example.com");
    IWebElement searchBox = driver.FindElement(By.Name("q"));
    searchBox.SendKeys("C# automation");
    searchBox.Submit();
}
catch (NoSuchElementException ex)
{
    // 处理元素找不到的异常
    Console.WriteLine("Element not found: " + ex.Message);
    // 可以尝试重新查找元素,或者记录错误并退出
}
catch (WebDriverException ex)
{
    // 处理 WebDriver 相关的异常
    Console.WriteLine("WebDriver error: " + ex.Message);
    // 可以尝试重启浏览器,或者记录错误并退出
}
catch (Exception ex)
{
    // 处理其他异常
    Console.WriteLine("An unexpected error occurred: " + ex.Message);
    // 记录错误并退出
}
finally
{
    // 确保浏览器关闭
    driver.Quit();
}

finally 块可以确保浏览器在任何情况下都会被关闭,即使发生了异常。对于更复杂的自动化脚本,你可能需要使用日志框架来记录详细的错误信息,以便于调试和维护。

相关专题

更多
chrome什么意思
chrome什么意思

chrome是浏览器的意思,由Google开发的网络浏览器,它在2008年首次发布,并迅速成为全球最受欢迎的浏览器之一。本专题为大家提供chrome相关的文章、下载、课程内容,供大家免费下载体验。

793

2023.08.11

chrome无法加载插件怎么办
chrome无法加载插件怎么办

chrome无法加载插件可以通过检查插件是否已正确安装、禁用和启用插件、清除插件缓存、更新浏览器和插件、检查网络连接和尝试在隐身模式下加载插件方法解决。更多关于chrome相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

735

2023.11.06

windows查看端口占用情况
windows查看端口占用情况

Windows端口可以认为是计算机与外界通讯交流的出入口。逻辑意义上的端口一般是指TCP/IP协议中的端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等等。怎么查看windows端口占用情况呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

621

2023.07.26

查看端口占用情况windows
查看端口占用情况windows

端口占用是指与端口关联的软件占用端口而使得其他应用程序无法使用这些端口,端口占用问题是计算机系统编程领域的一个常见问题,端口占用的根本原因可能是操作系统的一些错误,服务器也可能会出现端口占用问题。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1124

2023.07.27

windows照片无法显示
windows照片无法显示

当我们尝试打开一张图片时,可能会出现一个错误提示,提示说"Windows照片查看器无法显示此图片,因为计算机上的可用内存不足",本专题为大家提供windows照片无法显示相关的文章,帮助大家解决该问题。

795

2023.08.01

windows查看端口被占用的情况
windows查看端口被占用的情况

windows查看端口被占用的情况的方法:1、使用Windows自带的资源监视器;2、使用命令提示符查看端口信息;3、使用任务管理器查看占用端口的进程。本专题为大家提供windows查看端口被占用的情况的相关的文章、下载、课程内容,供大家免费下载体验。

452

2023.08.02

windows无法访问共享电脑
windows无法访问共享电脑

在现代社会中,共享电脑是办公室和家庭的重要组成部分。然而,有时我们可能会遇到Windows无法访问共享电脑的问题。这个问题可能会导致数据无法共享,影响工作和生活的正常进行。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2349

2023.08.08

windows自动更新
windows自动更新

Windows操作系统的自动更新功能可以确保系统及时获取最新的补丁和安全更新,以提高系统的稳定性和安全性。然而,有时候我们可能希望暂时或永久地关闭Windows的自动更新功能。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

802

2023.08.10

AO3中文版入口地址大全
AO3中文版入口地址大全

本专题整合了AO3中文版入口地址大全,阅读专题下面的的文章了解更多详细内容。

1

2026.01.21

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7.5万人学习

Excel 教程
Excel 教程

共162课时 | 12.7万人学习

PHP基础入门课程
PHP基础入门课程

共33课时 | 2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号