【C# 使用selenium组件操作浏览器并且截图】

1.背景

需要完成一个统计报表的定时推送功能,所有定时打开统计报表界面进行截图。在网上找了一圈,最后决定使用selenium组件进行操作浏览器。

2.代码

csharp 复制代码
 
using OpenQA.Selenium.Edge;
using OpenQA.Selenium;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Drawing.Imaging;
using System.Threading;
using OpenQA.Selenium.IE;
using OpenQA.Selenium.Remote;
using OpenQA.Selenium.Support.Extensions;
using System.Xml.Linq;
using System.IO;

namespace ScreenCutIamge
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            this.formLoad();
            this.timer1.Start();   
        }

        public void formLoad()
        {
            this.txt_document.Text = "pageContentDIV";
            this.txt_path.Text = "D:\\cutimage";
            this.txt_scal.Text = "40";
            this.txt_url.Text = "https://www.baidu.com";
        }

        private void button1_Click(object sender, EventArgs e)
        {
            this.cutImage();

        }

        private void cutImage()
        {
            var service = EdgeDriverService.CreateDefaultService(@".", "msedgedriver.exe");


            using (IWebDriver driver = new OpenQA.Selenium.Edge.EdgeDriver(service))
            {
                driver.Navigate().GoToUrl(this.txt_url.Text);  //driver.Url = "http://www.baidu.com"是一样的

                //var options = new InternetExplorerOptions();

                // string script = "document.body.style.transform='scale(0.5)'";
                // driver.ExecuteJavaScript(script);

                Thread.Sleep(10000);

                string script = "document.getElementsByClassName('" + this.txt_document.Text + "')[0].style.zoom = '" + this.txt_scal.Text + "%'";
                driver.ExecuteJavaScript(script);

                driver.Manage().Window.Maximize();
                driver.Manage().Window.FullScreen();

                //options.IgnoreZoomLevel = true;
                // options.
                // var driver = new RemoteWebDriver(options);



                ITimeouts timeouts = driver.Manage().Timeouts();

                //设置查找元素最大超时时间为30秒
                timeouts.ImplicitWait = new TimeSpan(0, 0, 30);
                //设置页面操作最大超时时间为30秒
                timeouts.PageLoad = new TimeSpan(0, 0, 30);
                //设置脚本异步最大超时时间为30秒
                timeouts.AsynchronousJavaScript = new TimeSpan(0, 0, 30);


                var source = driver.PageSource;
                // this.txt_scal.Text = source;




                Screenshot screenShotFile = ((ITakesScreenshot)driver).GetScreenshot();
                string imageName = "test" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".png";

                if (!Directory.Exists(txt_path.Text))
                {
                    Directory.CreateDirectory(txt_path.Text);
                }


                imageName = txt_path.Text + "\\" + imageName;
                screenShotFile.SaveAsFile(imageName);

            }
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            cutImage();
        }
    }
}

3.selenium官网

https://www.selenium.dev/

相关推荐
格林威10 分钟前
C#图像处理:使用imagemagick实现像素放大水印转换等多种功能
android·开发语言·图像处理·人工智能·计算机视觉·c#·视觉检测
胖纸不争4 小时前
Clasp:一个带插件系统的 .NET 10 命令行工具箱
c#·net core
wifi___5 小时前
全局异常处理的原理
java·开发语言
平常心的技术小牛8 小时前
Qt-快速上手-QMenuBar
开发语言·qt
青 春 记 忆9 小时前
零基础入门Python11|Git实战:为任务管理器建立版本历史
开发语言·git·vscode·python·python3.11
余额瞒着我当琳11 小时前
C++--深拷贝三件套 + swap + 写时拷贝 + vector 扩容 + reserve
java·开发语言·c++
坐吃山猪11 小时前
WebClient内存配置解析
开发语言·springboot·webflux
jdksjw11 小时前
同步与异步、阻塞与非阻塞、多线程、协程超详细讲解(Python并发编程从入门到精通)
开发语言·python
Zach_菠萝侠11 小时前
【DeepSeek Harness 研究】进化方向4:安全加固 思考、设计与实现
开发语言·安全·deepseek
SL-staff12 小时前
技术实践:HR如何用JVS-Logic可视化编排实现考勤数据同步(含节点配置与异常处理)
开发语言·python·低代码·钉钉·可视化编排·jvs-logic·hr技术