IPEasyUtility.cs 55 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Collections.ObjectModel;
  4. using System.Data;
  5. using System.Diagnostics;
  6. using System.Dynamic;
  7. using System.IO;
  8. using System.Linq;
  9. using System.Threading;
  10. using OpenQA.Selenium;
  11. using OpenQA.Selenium.Chrome;
  12. using OpenQA.Selenium.Support.Extensions;
  13. using OpenQA.Selenium.Support.UI;
  14. namespace wispro.sp.utility
  15. {
  16. public class IPEasyUtility
  17. {
  18. static string strFileSavePath = ConfigHelper.GetSectionValue("IPEasySetting:DownloadFileSavePath");
  19. static string Account = ConfigHelper.GetSectionValue("IPEasySetting:Account");
  20. static string Password = ConfigHelper.GetSectionValue("IPEasySetting:Password");
  21. public static void DownloadReport(string strId,string filename)
  22. {
  23. using (IWebDriver driver = CreateChromeDriver())
  24. {
  25. try
  26. {
  27. driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(50);
  28. driver.Manage().Timeouts().PageLoad = TimeSpan.FromSeconds(500);
  29. //进入登录界面
  30. driver.Navigate().GoToUrl(ConfigHelper.GetSectionValue("IPEasySetting:IPEasyWeb"));
  31. //输入用户名和密码
  32. driver.FindElement(By.Id("txtUser")).SendKeys(Account);
  33. driver.FindElement(By.Id("txtPwd")).SendKeys(Password);
  34. //点击登录按钮
  35. driver.FindElement(By.Id("btnLogin")).Click();
  36. //关闭提示遮罩层
  37. driver.FindElement(By.Id("jpwClose")).Click();
  38. //点击顶部菜单栏中的报表管理菜单
  39. driver.FindElement(By.Name("970d33d5-c728-41b8-a060-4330610706b9")).Click();
  40. //点击左侧 自定义报表 菜单
  41. driver.FindElement(By.Name("642fa96f-1e1f-46fd-aaa4-cb461ee8df5b")).Click();
  42. //切换到自定义报表Frame
  43. driver.SwitchTo().Frame(1);
  44. //调用报表导出JS
  45. ((IJavaScriptExecutor)driver).ExecuteScript($"Report.Export('{strId}');");
  46. //切换到弹出的导出报表窗口,点击导出按钮
  47. driver.SwitchTo().DefaultContent();
  48. var ihg_export = driver.FindElement(By.Name("ihg_export"));
  49. driver.SwitchTo().Frame(ihg_export);
  50. driver.FindElement(By.Id("btnSubmit")).Click();
  51. string strFilePath = System.IO.Path.Combine(strFileSavePath, filename);
  52. while (true)
  53. {
  54. System.IO.FileInfo file = new System.IO.FileInfo(strFilePath);
  55. if (!file.Exists || file.Length == 0)
  56. {
  57. System.Threading.Thread.Sleep(5000);
  58. }
  59. else
  60. {
  61. break;
  62. }
  63. }
  64. }
  65. catch (Exception ex)
  66. {
  67. throw new Exception(ex.Message);
  68. }
  69. finally
  70. {
  71. driver.Quit();
  72. driver.Dispose();
  73. killChromProcess();
  74. }
  75. }
  76. }
  77. private static void Log(string strMessage)
  78. {
  79. StreamWriter sw = File.AppendText("c:\\temp\\log.txt");
  80. sw.WriteLine($"{strMessage}");
  81. sw.Flush();
  82. sw.Close();
  83. sw.Dispose();
  84. }
  85. private static OpenQA.Selenium.Chrome.ChromeDriver CreateChromeDriver()
  86. {
  87. bool isheadless = (ConfigHelper.GetSectionValue("IPEasySetting:isHeadless") == "true");
  88. var options = new OpenQA.Selenium.Chrome.ChromeOptions();
  89. options.AddUserProfilePreference("download.default_directory", strFileSavePath);
  90. options.AddUserProfilePreference("intl.accept_languages", "nl");
  91. options.AddUserProfilePreference("disable-popup-blocking", "true");
  92. options.AddUserProfilePreference("safebrowsing.enabled", true);
  93. options.AddArgument($"--unsafely-treat-insecure-origin-as-secure={ConfigHelper.GetSectionValue("IPEasySetting:IPEasyWeb").Replace("/Login.aspx", "")}");//替换自己的域名,多域名可用逗号分隔。
  94. if (isheadless)
  95. {
  96. options.AddArgument("headless");
  97. }
  98. return new OpenQA.Selenium.Chrome.ChromeDriver(ConfigHelper.GetSectionValue("IPEasySetting:ChormeDriverPath"), options);
  99. }
  100. /// <summary>
  101. /// 根据报表名称导出报表
  102. /// </summary>
  103. /// <param name="ReportName">报告名称</param>
  104. /// <param name="isModifyDate">是否手动修改日期范围</param>
  105. public static DataTable DownloadReport(string ReportName,bool isModifyDate)
  106. {
  107. Log($"{DateTime.Now}\t开始下载:{ReportName}");
  108. DataTable retDatatable;
  109. Log($"{DateTime.Now}\t开始启动Chrome");
  110. using (IWebDriver driver = CreateChromeDriver())
  111. {
  112. try
  113. {
  114. driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(20);
  115. driver.Manage().Timeouts().PageLoad = TimeSpan.FromSeconds(100);
  116. //driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(100);
  117. WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(20));
  118. Log($"{DateTime.Now}\tIWebDriver配置");
  119. driver.Manage().Window.Maximize();
  120. driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(50);
  121. driver.Manage().Timeouts().PageLoad = TimeSpan.FromSeconds(500);
  122. //进入登录界面
  123. Log($"{DateTime.Now}\t开始进入登录界面");
  124. driver.Navigate().GoToUrl(ConfigHelper.GetSectionValue("IPEasySetting:IPEasyWeb"));
  125. //输入用户名和密码
  126. driver.FindElement(By.Id("txtUser")).SendKeys(Account);
  127. driver.FindElement(By.Id("txtPwd")).SendKeys(Password);
  128. //点击登录按钮
  129. Log($"{DateTime.Now}\t开始点击登录按钮");
  130. driver.FindElement(By.Id("btnLogin")).Click();
  131. //关闭提示遮罩层
  132. Log($"{DateTime.Now}\t关闭提示遮罩层");
  133. driver.FindElement(By.Id("jpwClose")).Click();
  134. //点击顶部菜单栏中的报表管理菜单
  135. Log($"{DateTime.Now}\t点击顶部菜单栏中的报表管理菜单");
  136. var reportMenu = driver.FindElement(By.Name("970d33d5-c728-41b8-a060-4330610706b9"));
  137. driver.ExecuteJavaScript("arguments[0].click();", reportMenu);
  138. //点击左侧 自定义报表 菜单
  139. Log($"{DateTime.Now}\t点击左侧 自定义报表 菜单");
  140. var customerReportMenu = driver.FindElement(By.Name("642fa96f-1e1f-46fd-aaa4-cb461ee8df5b"));
  141. driver.ExecuteJavaScript("arguments[0].click();", customerReportMenu);
  142. //切换到自定义报表Frame
  143. Log($"{DateTime.Now}\t切换到自定义报表Frame");
  144. driver.SwitchTo().Frame(1);
  145. Log($"{DateTime.Now}\t开始搜索报告");
  146. var inputSearch = driver.FindElement(By.Id("customizedList_TxtSheetSearchKey"));
  147. Log($"{DateTime.Now}\t在搜索框中输入报告名称");
  148. inputSearch.SendKeys(ReportName);
  149. Log($"{DateTime.Now}\t点击搜索按钮");
  150. var btnSearch = driver.FindElement(By.ClassName("btn-search"));
  151. btnSearch.Click();
  152. Log($"{DateTime.Now}\t选中报告");
  153. var reportRecord = driver.FindElement(By.XPath($"//td[contains(text(),'{ReportName}')]"));
  154. reportRecord.Click();
  155. System.Threading.Thread.Sleep(1000);
  156. if (isModifyDate)
  157. {
  158. Log($"{DateTime.Now}\t点击编辑");
  159. var btnEdit = driver.FindElement(By.ClassName("edit"));
  160. btnEdit.Click();
  161. System.Threading.Thread.Sleep(500);
  162. Log($"{DateTime.Now}\t清除以选择的处理事项完成日条件");
  163. try
  164. {
  165. var doItemFinished = driver.FindElement(By.XPath("//span[contains(@objcvalue,'_date') and contains(@id,'ST;')]"));
  166. doItemFinished.Click();
  167. System.Threading.Thread.Sleep(500);
  168. }
  169. catch { }
  170. Log($"{DateTime.Now}\t输入处理事项完成日期:开始日期");
  171. var startDate = driver.FindElement(By.XPath("//input[contains(@id,'dt_s_')]"));
  172. startDate.Click();
  173. System.Threading.Thread.Sleep(500);
  174. startDate.SendKeys(new DateTime(DateTime.Now.AddMonths(-1).Year, DateTime.Now.AddMonths(-1).Month, 1).ToString("yyyy-MM-dd"));
  175. Log($"{DateTime.Now}\t输入处理事项完成日期:结束日期");
  176. var endDate = wait.Until((d) =>
  177. {
  178. try
  179. {
  180. return d.FindElement(By.XPath("//input[contains(@id,'dt_e_')]"));//.Id("dt_e_4F8FE88D-9040-45F1-9723-45699BCD4CAF"));
  181. }
  182. catch
  183. {
  184. return null;
  185. }
  186. });
  187. //var endDate = driver.FindElement(By.XPath("//input[contains(@id,'dt_e_')]"));//.Id("dt_e_4F8FE88D-9040-45F1-9723-45699BCD4CAF"));
  188. System.Threading.Thread.Sleep(20000);
  189. //driver.ExecuteJavaScript("arguments[0].click();", endDate);
  190. endDate.Click();
  191. System.Threading.Thread.Sleep(500);
  192. endDate.SendKeys(new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1).AddDays(-1).ToString("yyyy-MM-dd"));
  193. Log($"{DateTime.Now}\t添加处理事项检索条件");
  194. var addDate = driver.FindElement(By.XPath("//a[contains(@onclick,'ReportSub.ConditionDTSelect')]"));
  195. addDate.Click();
  196. System.Threading.Thread.Sleep(500);
  197. Log($"{DateTime.Now}\t保存检索条件");
  198. var btnSave = driver.FindElement(By.Id("save"));
  199. btnSave.Click();
  200. System.Threading.Thread.Sleep(3000);
  201. }
  202. Log($"{DateTime.Now}\t点击导出Excel链接");
  203. var linkExport = driver.FindElement(By.XPath("//a[contains(@onclick,'-') and @class='tbexcel']"));
  204. linkExport.Click();
  205. //切换到弹出的导出报表窗口,点击导出按钮
  206. Log($"{DateTime.Now}\t切换到弹出的导出报表窗口,点击导出按钮");
  207. driver.SwitchTo().DefaultContent();
  208. var ihg_export = driver.FindElement(By.Name("ihg_export"));
  209. driver.SwitchTo().Frame(ihg_export);
  210. driver.FindElement(By.Id("btnSubmit")).Click();
  211. //切换到弹出的下载报表界面,点击下载按钮
  212. Log($"{DateTime.Now}\t切换到弹出的下载报表界面,点击下载按钮");
  213. System.Threading.Thread.Sleep(3000);
  214. driver.SwitchTo().DefaultContent();
  215. var frameDownload = driver.FindElement(By.Name("DownloadList"));
  216. driver.SwitchTo().Frame(frameDownload);
  217. var firstTr = driver.FindElement(By.TagName("tr"));
  218. var tdStatus = firstTr.FindElement(By.XPath("//td")).FindElement(By.XPath("following-sibling::td[4]"));
  219. string strStatus = tdStatus.Text;
  220. while (strStatus.Trim() != "导出成功!")
  221. {
  222. if (strStatus.Trim() == "导出失败,请稍后重试!")
  223. {
  224. return null;
  225. }
  226. System.Threading.Thread.Sleep(5000);
  227. firstTr = driver.FindElement(By.TagName("tr"));
  228. tdStatus = firstTr.FindElement(By.XPath("//td")).FindElement(By.XPath("following-sibling::td[4]"));
  229. strStatus = tdStatus.Text;
  230. }
  231. Log($"{DateTime.Now}\t点击下载按钮下载文档");
  232. firstTr = driver.FindElement(By.TagName("tr"));
  233. firstTr.FindElement(By.XPath("//td/a[@title='下载']")).Click();
  234. //System.Threading.Thread.Sleep(5000);
  235. //btnDownload.Click();
  236. string strFilePath = System.IO.Path.Combine(strFileSavePath, $"{ReportName.Trim()}.xlsx");
  237. int iwaiting = 0;
  238. while (true)
  239. {
  240. System.IO.FileInfo file = new System.IO.FileInfo(strFilePath.Replace("~", "_"));
  241. if (!file.Exists || file.Length == 0)
  242. {
  243. System.Threading.Thread.Sleep(5000);
  244. iwaiting += 5000;
  245. if (iwaiting > 360000)
  246. {
  247. break;
  248. }
  249. }
  250. else
  251. {
  252. break;
  253. }
  254. }
  255. //删除下载记录
  256. Log($"{DateTime.Now}\t删除下载记录");
  257. firstTr = driver.FindElement(By.TagName("tr"));
  258. firstTr.FindElement(By.XPath("//td/a[@title='删除']")).Click();
  259. //System.IO.FileInfo file = new System.IO.FileInfo(strFilePath.Replace("~", "_"));
  260. retDatatable = NPOIExcel.ExcelToDataTable(strFilePath.Replace("~", "_"), true);
  261. System.IO.File.Delete(strFilePath.Replace("~", "_"));
  262. }
  263. catch (Exception ex)
  264. {
  265. Log(ex.ToString());
  266. throw new Exception(ex.Message, ex);
  267. }
  268. finally
  269. {
  270. Log("关闭Chrome");
  271. driver.Quit();
  272. driver.Dispose();
  273. killChromProcess();
  274. }
  275. }
  276. Log($"{DateTime.Now}\t返回数据");
  277. return retDatatable;
  278. }
  279. /// <summary>
  280. /// 获取案件基本信息
  281. /// </summary>
  282. /// <param name="caseNo">我方文号</param>
  283. /// <returns></returns>
  284. public static dynamic GetCaseInfo(string caseNo)
  285. {
  286. dynamic retObject = new ExpandoObject();
  287. retObject.CaseNo = caseNo.Trim();
  288. using (IWebDriver driver = CreateChromeDriver())
  289. {
  290. try
  291. {
  292. driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(5);
  293. driver.Manage().Timeouts().PageLoad = TimeSpan.FromSeconds(100);
  294. //进入登录界面
  295. driver.Navigate().GoToUrl(ConfigHelper.GetSectionValue("IPEasySetting:IPEasyWeb"));
  296. //输入用户名和密码
  297. driver.FindElement(By.Id("txtUser")).SendKeys(Account);
  298. driver.FindElement(By.Id("txtPwd")).SendKeys(Password);
  299. //点击登录按钮
  300. driver.FindElement(By.Id("btnLogin")).Click();
  301. //关闭提示遮罩层
  302. driver.FindElement(By.Id("jpwClose")).Click();
  303. try
  304. {
  305. var okBtn = driver.FindElement(By.ClassName("ui_state_highlight"));
  306. if (okBtn != null && okBtn.TagName == "input")
  307. {
  308. okBtn.Click();
  309. }
  310. }
  311. catch { }
  312. //点击顶部菜单栏中的案件管理菜单
  313. driver.FindElement(By.Name("71A7CC35-F597-40E1-9FEF-BE622A3A3B63")).Click();
  314. //点击左侧 查询 菜单
  315. driver.FindElement(By.Name("c3266ab3-521a-4815-8aaf-7dd0bc5a76af")).Click();
  316. //切换到自定义报表Frame
  317. driver.SwitchTo().Frame(1);
  318. var inputSearch = driver.FindElement(By.Id("case_volume"));
  319. inputSearch.SendKeys(caseNo.Trim());
  320. var btnSearch = driver.FindElement(By.Id("btn_Search"));
  321. btnSearch.Click();
  322. var caseLink = driver.FindElement(By.XPath($"//a[contains(text(),'{caseNo}')]"));
  323. caseLink.Click();
  324. driver.SwitchTo().ParentFrame().SwitchTo().Frame(2);
  325. WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(20));
  326. //等待页面上ID属性值为submitButton的元素加载完成
  327. IWebElement myElement = wait.Until((d) =>
  328. {
  329. try
  330. {
  331. driver.SwitchTo().ParentFrame().SwitchTo().Frame(2);
  332. return d.FindElement(By.Id("libase"));
  333. }
  334. catch {
  335. return null;
  336. }
  337. });
  338. myElement.Click();
  339. //driver.FindElement(By.Id("libase")).Click();
  340. retObject.CaseName = driver.FindElement(By.Id("p_case_info__case_name")).GetAttribute("value"); //案件名称
  341. retObject.CustomerName = driver.FindElement(By.Id("p_case_info__customer_id")).GetAttribute("value"); //客户名称
  342. retObject.BusinessType = driver.FindElement(By.Id("p_case_info__business_type_id")).GetAttribute("value"); //业务类型
  343. retObject.CaseState = GetSelectText(driver.FindElement(By.Id("p_case_info__case_status_id")));
  344. retObject.ApplicationType = GetSelectText(driver.FindElement(By.Id("p_case_info__apply_type_id")));
  345. retObject.CaseType = driver.FindElement(By.Id("p_case_info__case_type_id")).GetAttribute("value"); //案件类型
  346. retObject.EntrustingDate = driver.FindElement(By.Id("p_case_info__charge_date")).GetAttribute("value"); //委案日期
  347. retObject.CaseMemo = driver.FindElement(By.Id("p_case_info__remark")).GetAttribute("value"); //案件备注
  348. driver.FindElement(By.XPath($"//span[contains(text(),'扩展信息')]")).Click();
  349. //select[@id='p_case_info__case_coefficient_id']
  350. retObject.CaseCoefficient = GetSelectText(driver.FindElement(By.Id("p_case_info__case_coefficient_id")));
  351. }
  352. catch (Exception ex)
  353. {
  354. throw new Exception(ex.Message, ex);
  355. }
  356. finally
  357. {
  358. driver.Quit();
  359. killChromProcess();
  360. }
  361. }
  362. return retObject;
  363. }
  364. public static dynamic GetPerformanceRecord(string caseNo, List<string> doItemNames)
  365. {
  366. dynamic retObject = new ExpandoObject();
  367. retObject.CaseNo = caseNo.Trim();
  368. //retObject.DoItem = doItemName;
  369. using (var Service = ChromeDriverService.CreateDefaultService(ConfigHelper.GetSectionValue("IPEasySetting:ChormeDriverPath")))
  370. {
  371. Service.Start();
  372. using (IWebDriver driver = CreateChromeDriver())
  373. {
  374. try
  375. {
  376. driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(20);
  377. driver.Manage().Timeouts().PageLoad = TimeSpan.FromSeconds(100);
  378. //driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(100);
  379. WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(20));
  380. //进入登录界面
  381. driver.Navigate().GoToUrl(ConfigHelper.GetSectionValue("IPEasySetting:IPEasyWeb"));
  382. //输入用户名和密码
  383. driver.FindElement(By.Id("txtUser")).SendKeys(Account);
  384. driver.FindElement(By.Id("txtPwd")).SendKeys(Password);
  385. //点击登录按钮
  386. driver.FindElement(By.Id("btnLogin")).Click();
  387. //关闭提示遮罩层
  388. driver.FindElement(By.Id("jpwClose")).Click();
  389. //try
  390. //{
  391. // var okBtn = driver.FindElement(By.ClassName("ui_state_highlight"));
  392. // if (okBtn != null && okBtn.TagName == "input")
  393. // {
  394. // okBtn.Click();
  395. // }
  396. //}
  397. //catch { }
  398. //点击顶部菜单栏中的案件管理菜单
  399. driver.FindElement(By.Name("71A7CC35-F597-40E1-9FEF-BE622A3A3B63")).Click();
  400. System.Threading.Thread.Sleep(500);
  401. //点击左侧 查询 菜单
  402. driver.FindElement(By.Name("c3266ab3-521a-4815-8aaf-7dd0bc5a76af")).Click();
  403. //System.Threading.Thread.Sleep(500);
  404. var inputSearch = wait.Until((d) =>
  405. {
  406. try
  407. {
  408. //切换到自定义报表Frame
  409. d.SwitchTo().Frame(1);
  410. return d.FindElement(By.Id("case_volume"));
  411. }
  412. catch
  413. {
  414. return null;
  415. }
  416. });
  417. //切换到自定义报表Frame
  418. //driver.SwitchTo().Frame(1);
  419. //var inputSearch = driver.FindElement(By.Id("case_volume"));
  420. inputSearch.SendKeys(caseNo.Trim());
  421. var btnSearch = driver.FindElement(By.Id("btn_Search"));
  422. btnSearch.Click();
  423. var caseLink = wait.Until((d) =>
  424. {
  425. try
  426. {
  427. return d.FindElement(By.XPath($"//a[normalize-space()='{caseNo.Trim()}']"));
  428. }
  429. catch
  430. {
  431. return null;
  432. }
  433. });
  434. //System.Threading.Thread.Sleep(500);
  435. //var caseLink = driver.FindElement(By.XPath($"//a[normalize-space()='{caseNo.Trim()}']"));
  436. caseLink.Click();
  437. System.Threading.Thread.Sleep(500);
  438. driver.SwitchTo().ParentFrame().SwitchTo().Frame(2);
  439. IWebElement temDoItemLink = null;
  440. string temFinishedDate = "";
  441. foreach (string doItemName in doItemNames)
  442. {
  443. var DoItemLinks = driver.FindElements(By.XPath($"//td[@colname='ctrl_proc'][normalize-space()='{doItemName}']"));
  444. if (DoItemLinks.Count > 0)
  445. {
  446. var DoItemLink = DoItemLinks[DoItemLinks.Count - 1];
  447. if (string.IsNullOrEmpty(temFinishedDate))
  448. {
  449. temFinishedDate = DoItemLink.FindElement(By.XPath("following-sibling::td[7]")).Text;
  450. temDoItemLink = DoItemLink;
  451. }
  452. else
  453. {
  454. if (DoItemLink.FindElement(By.XPath("following-sibling::td[7]")).Text.CompareTo(temFinishedDate) > 0)
  455. {
  456. temFinishedDate = DoItemLink.FindElement(By.XPath("following-sibling::td[7]")).Text;
  457. temDoItemLink = DoItemLink;
  458. }
  459. }
  460. //new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(ExpectedConditions.ElementToBeClickable(DoItemLink)).Click();
  461. }
  462. }
  463. if(temDoItemLink != null)
  464. {
  465. retObject.CaseStage = temDoItemLink.FindElement(By.XPath("following-sibling::td[1]")).Text; //案件阶段
  466. retObject.DoItemState = temDoItemLink.FindElement(By.XPath("following-sibling::td[2]")).Text; //处理事项处理状态
  467. retObject.InternalDate = temDoItemLink.FindElement(By.XPath("following-sibling::td[4]")).Text; //内部期限
  468. retObject.CustomerLimitDate = temDoItemLink.FindElement(By.XPath("following-sibling::td[5]")).Text; //客户期限
  469. retObject.FinishedDate = temDoItemLink.FindElement(By.XPath("following-sibling::td[7]")).Text; //处理事项完成日
  470. retObject.DoPersons = temDoItemLink.FindElement(By.XPath("following-sibling::td[8]")).Text; //处理人
  471. retObject.DoItemMemo = temDoItemLink.FindElement(By.XPath("following-sibling::td[9]")).Text; //处理事项备注
  472. retObject.Reviewer = temDoItemLink.FindElement(By.XPath("following-sibling::td[10]")).Text; //核稿人
  473. retObject.DoItem = temDoItemLink.Text;
  474. //temDoItemLink = DoItemLink;
  475. System.Threading.Thread.Sleep(4000);
  476. temDoItemLink.Click();
  477. }
  478. else
  479. {
  480. throw new ApplicationException("处理事项不存在!");
  481. }
  482. var p_proc_finish_doc_date = wait.Until((d) =>
  483. {
  484. try
  485. {
  486. return d.FindElement(By.Id("p_proc_info__finish_doc_date"));
  487. }
  488. catch
  489. {
  490. return null;
  491. }
  492. });
  493. //System.Threading.Thread.Sleep(500);
  494. retObject.FinalizationDate = p_proc_finish_doc_date.GetAttribute("value"); //定稿日
  495. retObject.ReturnDate = driver.FindElement(By.Id("p_proc_info__back_date")).GetAttribute("value"); //返稿日
  496. retObject.Reviewer = driver.FindElement(By.Id("p_proc_info__revise_user")).GetAttribute("value"); //核稿人
  497. retObject.DoItemCoefficient = driver.FindElement(By.Id("p_proc_info__proc_coefficient")).GetAttribute("value"); //处理事项系数
  498. retObject.WordCount = driver.FindElement(By.Id("p_proc_info__translate_count")).GetAttribute("value"); //翻译字数
  499. driver.FindElement(By.Id("libase")).Click();
  500. var p_case_info__case_name = wait.Until((d) =>
  501. {
  502. try
  503. {
  504. return d.FindElement(By.Id("p_case_info__case_name"));
  505. }
  506. catch
  507. {
  508. return null;
  509. }
  510. });
  511. //System.Threading.Thread.Sleep(500);
  512. retObject.CaseName = p_case_info__case_name.GetAttribute("value"); //案件名称
  513. retObject.CustomerName = driver.FindElement(By.Id("p_case_info__customer_id")).GetAttribute("value"); //客户名称
  514. retObject.BusinessType = driver.FindElement(By.Id("p_case_info__business_type_id")).GetAttribute("value"); //业务类型
  515. retObject.CaseState = GetSelectText(driver.FindElement(By.Id("p_case_info__case_status_id")));
  516. retObject.ApplicationType = GetSelectText(driver.FindElement(By.Id("p_case_info__apply_type_id")));
  517. retObject.CaseType = driver.FindElement(By.Id("p_case_info__case_type_id")).GetAttribute("value"); //案件类型
  518. retObject.EntrustingDate = driver.FindElement(By.Id("p_case_info__charge_date")).GetAttribute("value"); //委案日期
  519. retObject.CaseMemo = driver.FindElement(By.Id("p_case_info__remark")).GetAttribute("value"); //案件备注
  520. driver.FindElement(By.XPath($"//span[contains(text(),'扩展信息')]")).Click();
  521. //select[@id='p_case_info__case_coefficient_id']
  522. retObject.CaseCoefficient = GetSelectText(driver.FindElement(By.Id("p_case_info__case_coefficient_id")));
  523. }
  524. catch (Exception ex)
  525. {
  526. throw new Exception(ex.Message, ex);
  527. }
  528. finally
  529. {
  530. driver.Quit();
  531. killChromProcess();
  532. }
  533. }
  534. Service.Dispose();
  535. }
  536. return retObject;
  537. }
  538. /// <summary>
  539. /// 获取案件处理事项记录
  540. /// </summary>
  541. /// <param name="caseNo">我方文号</param>
  542. /// <param name="doItemName">处理事项</param>
  543. /// <returns></returns>
  544. public static dynamic GetPerformanceRecord(string caseNo,string doItemName,string caseStage=null)
  545. {
  546. if (caseNo.StartsWith("APCN"))
  547. {
  548. return GetAPCNPerformanceRecord(caseNo, doItemName, caseStage);
  549. }
  550. dynamic retObject = new ExpandoObject();
  551. retObject.CaseNo = caseNo.Trim();
  552. retObject.DoItem = doItemName;
  553. using (var Service = ChromeDriverService.CreateDefaultService(ConfigHelper.GetSectionValue("IPEasySetting:ChormeDriverPath")))
  554. {
  555. Service.Start();
  556. using (IWebDriver driver = CreateChromeDriver())
  557. {
  558. try
  559. {
  560. driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(20);
  561. driver.Manage().Timeouts().PageLoad = TimeSpan.FromSeconds(100);
  562. //driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(100);
  563. WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(20));
  564. //进入登录界面
  565. driver.Navigate().GoToUrl(ConfigHelper.GetSectionValue("IPEasySetting:IPEasyWeb"));
  566. //输入用户名和密码
  567. driver.FindElement(By.Id("txtUser")).SendKeys(Account);
  568. driver.FindElement(By.Id("txtPwd")).SendKeys(Password);
  569. //点击登录按钮
  570. driver.FindElement(By.Id("btnLogin")).Click();
  571. //关闭提示遮罩层
  572. driver.FindElement(By.Id("jpwClose")).Click();
  573. //try
  574. //{
  575. // var okBtn = driver.FindElement(By.ClassName("ui_state_highlight"));
  576. // if (okBtn != null && okBtn.TagName == "input")
  577. // {
  578. // okBtn.Click();
  579. // }
  580. //}
  581. //catch { }
  582. //点击顶部菜单栏中的案件管理菜单
  583. driver.FindElement(By.Name("71A7CC35-F597-40E1-9FEF-BE622A3A3B63")).Click();
  584. System.Threading.Thread.Sleep(500);
  585. //点击左侧 查询 菜单
  586. driver.FindElement(By.Name("c3266ab3-521a-4815-8aaf-7dd0bc5a76af")).Click();
  587. //System.Threading.Thread.Sleep(500);
  588. var inputSearch = wait.Until((d) =>
  589. {
  590. try
  591. {
  592. //切换到自定义报表Frame
  593. d.SwitchTo().Frame(1);
  594. return d.FindElement(By.Id("case_volume"));
  595. }
  596. catch
  597. {
  598. return null;
  599. }
  600. });
  601. //切换到自定义报表Frame
  602. //driver.SwitchTo().Frame(1);
  603. //var inputSearch = driver.FindElement(By.Id("case_volume"));
  604. inputSearch.SendKeys(caseNo.Trim());
  605. var btnSearch = driver.FindElement(By.Id("btn_Search"));
  606. btnSearch.Click();
  607. var caseLink = wait.Until((d) =>
  608. {
  609. try
  610. {
  611. return d.FindElement(By.XPath($"//a[normalize-space()='{caseNo.Trim()}']"));
  612. }
  613. catch
  614. {
  615. return null;
  616. }
  617. });
  618. //System.Threading.Thread.Sleep(500);
  619. //var caseLink = driver.FindElement(By.XPath($"//a[normalize-space()='{caseNo.Trim()}']"));
  620. caseLink.Click();
  621. System.Threading.Thread.Sleep(500);
  622. driver.SwitchTo().ParentFrame().SwitchTo().Frame(2);
  623. var DoItemLinks = driver.FindElements(By.XPath($"//td[@colname='ctrl_proc'][normalize-space()='{doItemName}']"));
  624. if (DoItemLinks.Count > 0)
  625. {
  626. if (!string.IsNullOrEmpty(caseStage))
  627. {
  628. foreach (var DoItemLink in DoItemLinks)
  629. {
  630. var temCaseStage = DoItemLink.FindElement(By.XPath("following-sibling::td[1]")).Text;
  631. if (temCaseStage == caseStage)
  632. {
  633. retObject.CaseStage = DoItemLink.FindElement(By.XPath("following-sibling::td[1]")).Text; //案件阶段
  634. retObject.DoItemState = DoItemLink.FindElement(By.XPath("following-sibling::td[2]")).Text; //处理事项处理状态
  635. retObject.InternalDate = DoItemLink.FindElement(By.XPath("following-sibling::td[4]")).Text; //内部期限
  636. retObject.CustomerLimitDate = DoItemLink.FindElement(By.XPath("following-sibling::td[5]")).Text; //客户期限
  637. retObject.FinishedDate = DoItemLink.FindElement(By.XPath("following-sibling::td[7]")).Text; //处理事项完成日
  638. retObject.DoPersons = DoItemLink.FindElement(By.XPath("following-sibling::td[8]")).Text; //处理人
  639. retObject.DoItemMemo = DoItemLink.FindElement(By.XPath("following-sibling::td[9]")).Text; //处理事项备注
  640. retObject.Reviewer = DoItemLink.FindElement(By.XPath("following-sibling::td[10]")).Text; //核稿人
  641. System.Threading.Thread.Sleep(4000);
  642. DoItemLink.Click();
  643. //driver.ExecuteJavaScript("$(arguments[0]).click()", DoItemLink);
  644. break;
  645. }
  646. }
  647. }
  648. else
  649. {
  650. var DoItemLink = DoItemLinks[DoItemLinks.Count - 1];
  651. retObject.CaseStage = DoItemLink.FindElement(By.XPath("following-sibling::td[1]")).Text; //案件阶段
  652. retObject.DoItemState = DoItemLink.FindElement(By.XPath("following-sibling::td[2]")).Text; //处理事项处理状态
  653. retObject.InternalDate = DoItemLink.FindElement(By.XPath("following-sibling::td[4]")).Text; //内部期限
  654. retObject.CustomerLimitDate = DoItemLink.FindElement(By.XPath("following-sibling::td[5]")).Text; //客户期限
  655. retObject.FinishedDate = DoItemLink.FindElement(By.XPath("following-sibling::td[7]")).Text; //处理事项完成日
  656. retObject.DoPersons = DoItemLink.FindElement(By.XPath("following-sibling::td[8]")).Text; //处理人
  657. retObject.DoItemMemo = DoItemLink.FindElement(By.XPath("following-sibling::td[9]")).Text; //处理事项备注
  658. retObject.Reviewer = DoItemLink.FindElement(By.XPath("following-sibling::td[10]")).Text; //核稿人
  659. System.Threading.Thread.Sleep(4000);
  660. DoItemLink.Click();
  661. //new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(ExpectedConditions.ElementToBeClickable(DoItemLink)).Click();
  662. }
  663. }
  664. var p_proc_finish_doc_date = wait.Until((d) =>
  665. {
  666. try
  667. {
  668. return d.FindElement(By.Id("p_proc_info__finish_doc_date"));
  669. }
  670. catch
  671. {
  672. return null;
  673. }
  674. });
  675. //System.Threading.Thread.Sleep(500);
  676. retObject.FinalizationDate = p_proc_finish_doc_date.GetAttribute("value"); //定稿日
  677. retObject.ReturnDate = driver.FindElement(By.Id("p_proc_info__back_date")).GetAttribute("value"); //返稿日
  678. retObject.Reviewer = driver.FindElement(By.Id("p_proc_info__revise_user")).GetAttribute("value"); //核稿人
  679. retObject.DoItemCoefficient = driver.FindElement(By.Id("p_proc_info__proc_coefficient")).GetAttribute("value"); //处理事项系数
  680. retObject.WordCount = driver.FindElement(By.Id("p_proc_info__translate_count")).GetAttribute("value"); //翻译字数
  681. driver.FindElement(By.Id("libase")).Click();
  682. var p_case_info__case_name = wait.Until((d) =>
  683. {
  684. try
  685. {
  686. return d.FindElement(By.Id("p_case_info__case_name"));
  687. }
  688. catch
  689. {
  690. return null;
  691. }
  692. });
  693. //System.Threading.Thread.Sleep(500);
  694. retObject.CaseName = p_case_info__case_name.GetAttribute("value"); //案件名称
  695. retObject.CustomerName = driver.FindElement(By.Id("p_case_info__customer_id")).GetAttribute("value"); //客户名称
  696. retObject.BusinessType = driver.FindElement(By.Id("p_case_info__business_type_id")).GetAttribute("value"); //业务类型
  697. retObject.CaseState = GetSelectText(driver.FindElement(By.Id("p_case_info__case_status_id")));
  698. retObject.ApplicationType = GetSelectText(driver.FindElement(By.Id("p_case_info__apply_type_id")));
  699. retObject.CaseType = driver.FindElement(By.Id("p_case_info__case_type_id")).GetAttribute("value"); //案件类型
  700. retObject.EntrustingDate = driver.FindElement(By.Id("p_case_info__charge_date")).GetAttribute("value"); //委案日期
  701. retObject.CaseMemo = driver.FindElement(By.Id("p_case_info__remark")).GetAttribute("value"); //案件备注
  702. driver.FindElement(By.XPath($"//span[contains(text(),'扩展信息')]")).Click();
  703. //select[@id='p_case_info__case_coefficient_id']
  704. retObject.CaseCoefficient = GetSelectText(driver.FindElement(By.Id("p_case_info__case_coefficient_id")));
  705. }
  706. catch (Exception ex)
  707. {
  708. throw new Exception(ex.Message, ex);
  709. }
  710. finally
  711. {
  712. driver.Quit();
  713. killChromProcess();
  714. }
  715. }
  716. Service.Dispose();
  717. }
  718. return retObject;
  719. }
  720. private static dynamic GetAPCNPerformanceRecord(string caseNo, string doItemName, string caseStage = null)
  721. {
  722. dynamic retObject = new ExpandoObject();
  723. retObject.CaseNo = caseNo.Trim();
  724. retObject.DoItem = doItemName;
  725. using (var Service = ChromeDriverService.CreateDefaultService(ConfigHelper.GetSectionValue("IPEasySetting:ChormeDriverPath")))
  726. {
  727. Service.Start();
  728. using (IWebDriver driver = CreateChromeDriver())
  729. {
  730. try
  731. {
  732. driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(20);
  733. driver.Manage().Timeouts().PageLoad = TimeSpan.FromSeconds(100);
  734. //driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(100);
  735. WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(20));
  736. //进入登录界面
  737. driver.Navigate().GoToUrl(ConfigHelper.GetSectionValue("IPEasySetting:IPEasyWeb"));
  738. //输入用户名和密码
  739. driver.FindElement(By.Id("txtUser")).SendKeys(Account);
  740. driver.FindElement(By.Id("txtPwd")).SendKeys(Password);
  741. //点击登录按钮
  742. driver.FindElement(By.Id("btnLogin")).Click();
  743. //关闭提示遮罩层
  744. driver.FindElement(By.Id("jpwClose")).Click();
  745. //try
  746. //{
  747. // var okBtn = driver.FindElement(By.ClassName("ui_state_highlight"));
  748. // if (okBtn != null && okBtn.TagName == "input")
  749. // {
  750. // okBtn.Click();
  751. // }
  752. //}
  753. //catch { }
  754. //点击顶部菜单栏中的案件管理菜单
  755. driver.FindElement(By.Name("71A7CC35-F597-40E1-9FEF-BE622A3A3B63")).Click();
  756. System.Threading.Thread.Sleep(500);
  757. //点击左侧 查询 菜单
  758. driver.FindElement(By.Name("FF4E1FF9-FE36-4F0F-99DF-81E60817722E")).Click();
  759. //System.Threading.Thread.Sleep(500);
  760. var inputSearch = wait.Until((d) =>
  761. {
  762. try
  763. {
  764. //切换到自定义报表Frame
  765. d.SwitchTo().Frame(1);
  766. return d.FindElement(By.Id("case_volume"));
  767. }
  768. catch
  769. {
  770. return null;
  771. }
  772. });
  773. //切换到自定义报表Frame
  774. //driver.SwitchTo().Frame(1);
  775. //var inputSearch = driver.FindElement(By.Id("case_volume"));
  776. inputSearch.SendKeys(caseNo.Trim());
  777. var btnSearch = driver.FindElement(By.Id("btn_Search"));
  778. btnSearch.Click();
  779. var caseLink = wait.Until((d) =>
  780. {
  781. try
  782. {
  783. return d.FindElement(By.XPath($"//a[normalize-space()='{caseNo.Trim()}']"));
  784. }
  785. catch
  786. {
  787. return null;
  788. }
  789. });
  790. //System.Threading.Thread.Sleep(500);
  791. //var caseLink = driver.FindElement(By.XPath($"//a[normalize-space()='{caseNo.Trim()}']"));
  792. caseLink.Click();
  793. System.Threading.Thread.Sleep(500);
  794. driver.SwitchTo().ParentFrame().SwitchTo().Frame(2);
  795. var DoItemLinks = driver.FindElements(By.XPath($"//td[@colname='ctrl_proc'][normalize-space()='{doItemName}']"));
  796. if (DoItemLinks.Count > 0)
  797. {
  798. if (!string.IsNullOrEmpty(caseStage))
  799. {
  800. foreach (var DoItemLink in DoItemLinks)
  801. {
  802. var temCaseStage = DoItemLink.FindElement(By.XPath("following-sibling::td[1]")).Text;
  803. if (temCaseStage == caseStage)
  804. {
  805. retObject.CaseStage = DoItemLink.FindElement(By.XPath("following-sibling::td[1]")).Text; //案件阶段
  806. retObject.DoItemState = DoItemLink.FindElement(By.XPath("following-sibling::td[2]")).Text; //处理事项处理状态
  807. retObject.InternalDate = DoItemLink.FindElement(By.XPath("following-sibling::td[4]")).Text; //内部期限
  808. retObject.CustomerLimitDate = DoItemLink.FindElement(By.XPath("following-sibling::td[5]")).Text; //客户期限
  809. retObject.FinishedDate = DoItemLink.FindElement(By.XPath("following-sibling::td[7]")).Text; //处理事项完成日
  810. retObject.DoPersons = DoItemLink.FindElement(By.XPath("following-sibling::td[8]")).Text; //处理人
  811. retObject.DoItemMemo = DoItemLink.FindElement(By.XPath("following-sibling::td[9]")).Text; //处理事项备注
  812. retObject.Reviewer = DoItemLink.FindElement(By.XPath("following-sibling::td[10]")).Text; //核稿人
  813. System.Threading.Thread.Sleep(4000);
  814. DoItemLink.Click();
  815. //driver.ExecuteJavaScript("$(arguments[0]).click()", DoItemLink);
  816. break;
  817. }
  818. }
  819. }
  820. else
  821. {
  822. var DoItemLink = DoItemLinks[DoItemLinks.Count - 1];
  823. //retObject.CaseStage = DoItemLink.FindElement(By.XPath("following-sibling::td[1]")).Text; //案件阶段
  824. retObject.DoItemState = DoItemLink.FindElement(By.XPath("following-sibling::td[1]")).Text; //处理事项处理状态
  825. retObject.InternalDate = DoItemLink.FindElement(By.XPath("following-sibling::td[3]")).Text; //内部期限
  826. retObject.CustomerLimitDate = DoItemLink.FindElement(By.XPath("following-sibling::td[4]")).Text; //客户期限
  827. retObject.FinishedDate = DoItemLink.FindElement(By.XPath("following-sibling::td[6]")).Text; //处理事项完成日
  828. retObject.DoPersons = DoItemLink.FindElement(By.XPath("following-sibling::td[7]")).Text; //处理人
  829. retObject.DoItemMemo = DoItemLink.FindElement(By.XPath("following-sibling::td[10]")).Text; //处理事项备注
  830. //retObject.Reviewer = DoItemLink.FindElement(By.XPath("following-sibling::td[10]")).Text; //核稿人
  831. System.Threading.Thread.Sleep(4000);
  832. DoItemLink.Click();
  833. //new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(ExpectedConditions.ElementToBeClickable(DoItemLink)).Click();
  834. }
  835. }
  836. var p_proc_finish_doc_date = wait.Until((d) =>
  837. {
  838. try
  839. {
  840. return d.FindElement(By.Id("p_proc_info__finish_doc_date"));
  841. }
  842. catch
  843. {
  844. return null;
  845. }
  846. });
  847. //System.Threading.Thread.Sleep(500);
  848. retObject.FinalizationDate = p_proc_finish_doc_date.GetAttribute("value"); //定稿日
  849. retObject.ReturnDate = driver.FindElement(By.Id("p_proc_info__back_date")).GetAttribute("value"); //返稿日
  850. retObject.Reviewer = driver.FindElement(By.Id("p_proc_info__revise_user")).GetAttribute("value"); //核稿人
  851. retObject.DoItemCoefficient = driver.FindElement(By.Id("p_proc_info__proc_coefficient")).GetAttribute("value"); //处理事项系数
  852. retObject.WordCount = driver.FindElement(By.Id("p_proc_info__translate_count")).GetAttribute("value"); //翻译字数
  853. driver.FindElement(By.Id("libase")).Click();
  854. var p_case_info__case_name = wait.Until((d) =>
  855. {
  856. try
  857. {
  858. return d.FindElement(By.Id("p_case_info__case_name"));
  859. }
  860. catch
  861. {
  862. return null;
  863. }
  864. });
  865. //System.Threading.Thread.Sleep(500);
  866. retObject.CaseName = p_case_info__case_name.GetAttribute("value"); //案件名称
  867. retObject.CustomerName = driver.FindElement(By.Id("p_case_info__customer_id")).GetAttribute("value"); //客户名称
  868. retObject.BusinessType = driver.FindElement(By.Id("p_case_info__business_type_id")).GetAttribute("value"); //业务类型
  869. retObject.CaseState = GetSelectText(driver.FindElement(By.Id("p_case_info__case_status_id")));
  870. retObject.ApplicationType = GetSelectText(driver.FindElement(By.Id("p_case_info__apply_type_id")));
  871. retObject.CaseType = driver.FindElement(By.Id("p_case_info__case_type_id")).GetAttribute("value"); //案件类型
  872. retObject.EntrustingDate = driver.FindElement(By.Id("p_case_info__charge_date")).GetAttribute("value"); //委案日期
  873. retObject.CaseMemo = driver.FindElement(By.Id("p_case_info__remark")).GetAttribute("value"); //案件备注
  874. //driver.FindElement(By.XPath($"//span[contains(text(),'扩展信息')]")).Click();
  875. //select[@id='p_case_info__case_coefficient_id']
  876. //retObject.CaseCoefficient = GetSelectText(driver.FindElement(By.Id("p_case_info__case_coefficient_id")));
  877. }
  878. catch (Exception ex)
  879. {
  880. throw new Exception(ex.Message, ex);
  881. }
  882. finally
  883. {
  884. driver.Quit();
  885. killChromProcess();
  886. }
  887. }
  888. Service.Dispose();
  889. }
  890. return retObject;
  891. }
  892. private static void killChromProcess()
  893. {
  894. try
  895. {
  896. Process[] workers = Process.GetProcessesByName("Chrome");
  897. foreach (Process worker in workers)
  898. {
  899. worker.Kill();
  900. worker.WaitForExit();
  901. worker.Dispose();
  902. }
  903. workers = Process.GetProcessesByName("Chromedriver");
  904. foreach (Process worker in workers)
  905. {
  906. worker.Kill();
  907. worker.WaitForExit();
  908. worker.Dispose();
  909. }
  910. }
  911. catch { }
  912. }
  913. private static string GetSelectText(IWebElement element)
  914. {
  915. var strValue = element.GetAttribute("value");
  916. if (string.IsNullOrEmpty(strValue))
  917. {
  918. return null;
  919. }
  920. var ops = element.FindElements(By.TagName("option"));
  921. foreach (var op in ops)
  922. {
  923. if (op.GetAttribute("value") == strValue)
  924. {
  925. return op.Text;
  926. }
  927. }
  928. return null;
  929. }
  930. }
  931. }