最近公司的产品需要把客户在医院体检的数据抓到自己的系统上来,这样客户直接可以在产品上看到体检数据,这里需要客户在体检中心的账号。
首先使用账号对目标系统进行登录,然后看请求接口以及返回的数据,根据这些信息一些系统可以使用开发语言直接就可以获取数据以及token密钥什么的,但有部分系统做了https证书双向验证,无法请求到他们的接口,然后采取使用谷歌插件chromedriver,通过代码来模拟登录已经获取所需要的数据,这里需要用到XPATH来解析页面代码,从而控制谷歌进行操作。
// 设置ChromeDriver路径,根据您下载的ChromeDriver的实际路径进行设置
var chromeDriverPath = @"chromedriver.exe";
// 创建ChromeDriver实例
var options = new ChromeOptions();
options.AddArgument("--start-maximized"); // 启动时最大化浏览器窗口
IWebDriver driver = new ChromeDriver(chromeDriverPath, options);
// 导航到登录页面
driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(3);
driver.Navigate().GoToUrl(@"https://www.js123brtj.com/health-manage-sys/#/hr/login");
IJavaScriptExecutor jsExecutor = (IJavaScriptExecutor)driver;
// 获取响应内容,即登录后的页面源码
var responseBody1 = driver.PageSource;
var enterpriseBtn = driver.FindElements(By.ClassName("mu-tab"))[1];
enterpriseBtn.Click();
var a = driver.FindElements(By.ClassName("mu-text-field-input"));
a[0].SendKeys("111");
a[1].SendKeys("222");
//先是把下拉款拉出来
driver.FindElement(By.ClassName("mu-select")).Click();
//选择哪家公司
var asdaa = driver.FindElement(By.ClassName("mu-list-dense")).FindElements(By.XPath("//a"))[1];
asdaa.Click();
//点击登录
driver.FindElement(By.ClassName("mu-button")).Click();
Thread.Sleep(3000);
driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(3);
//职业体检
driver.Navigate().GoToUrl($"https://www.js123123br12tj.com/health-manage-sys/#/cr/uep?utregsn=0100002535&bh=0001&pdf=");
Thread.Sleep(3000);
driver.FindElement(By.ClassName("layui-table-body")).FindElements(By.XPath("//tr//a"))[0].Click();
Thread.Sleep(3000);
driver.FindElement(By.TagName("button")).Click();
Thread.Sleep(3000);
driver.FindElement(By.TagName("img")).Click();
//点击下一页如果没有数据就停止
//driver.FindElement(By.ClassName("layui-laypage-next")).Click();
然后有部分体检数据是用pdf文件显示的,需要把pdf解析成html,做了相关的资料查询,发现一个比较简单的库IronPdf,这个只要几行代码就可以实现了。
#region PDF转html
var pdfFile = @"C:\Users\SRFSD\source\repos\ConsoleApp4\3231012025查华.pdf";
var htmlFile = @"C:\Users\SRFSD\source\repos\ConsoleApp5\HTMLPage1.html";
//iTextSharp和PdfSharp不能用,因为是提取文本和图片得自己拼装成html
//PdfSharp和HTMLRenderer.PdfSharp也不行
//PdfToHtmlNet(不行,需要安装Python,不然报错)
//Aspose.HTML for .NET以及TallComponents PDFRasterizer(不行)
//SelectPdf(基于SelectPdf进行PDF转换为HTML的操作相对较为复杂,SelectPdf主要用于将HTML转换为PDF。如果你需要将PDF转换为HTML,可以尝试使用其他库)
//EO.Pdf/GemBox.Pdf/PDF Clown不行
//Syncfusion Essential PDF以及Spire.PDF收费
// 加载PDF文件
PdfDocument pdfDocument = PdfDocument.FromFile(pdfFile);
// 将PDF转换为HTML
string htmlContent = pdfDocument.ToHtmlString();
#endregion