1.背景
需要完成一个统计报表的定时推送功能,所有定时打开统计报表界面进行截图。在网上找了一圈,最后决定使用selenium组件进行操作浏览器。
2.代码
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/