浏览器自动化的一些体会8 访问angular页面的一个问题
發(fā)現(xiàn)瀏覽器自動化有一個重要方面沒有提及,即所謂的無頁面瀏覽器,不過最近沒有需求,不想嘗試,先記上一筆,以后有需求時,可以有個思路。
大約一兩個月前(現(xiàn)在比較懶散,時間不知不覺過去,連今天是幾號有時候都搞糊涂),碰到一個問題,本來程序中用WebBrowser控件訪問一個頁面,現(xiàn)在那個頁面用Angular重寫了,訪問出錯,出來一個空白頁面。
1。解決方案一是改注冊表,修改webBrowser控件所模擬的IE版本,缺省是7,不支持Angular,改成高版本,如11,就可以了。
但是有個問題,只能在第一次創(chuàng)建webBrowser時生效,如果要改回來,對不起,只能重啟程序。應用中有多處用了webBrowser控件,如果這里改成11,別處也要用11,那么,就需要測試所有用到的地方,看頁面的顯示是否正常,測試工作量太大,不可行。
2。解決方案二是用別的控件。找到一個口碑似乎不錯的CefSharp,測試了一下,工作正常。
但是問題來了,首先是工程設置成AnyCPU,CefSharp需要配置。調試了一段時間,也可以了。
更大的問題來了,工程需要用click once方式部署,結果,那些dll發(fā)布不出去。查了半天,調試了半天,想盡了辦法,還是不行。最后唯一的辦法似乎只有用Mage.exe和MageUI.exe這兩個windows sdk里的工具,手工修改clickonce的manifest,把需要的dll打包進去。太煩,也不可行。
3。情急之下想出第三方案,用一個獨立的包含webBrowser控件的exe顯示頁面,然后在另一個winform主程序中,把這個exe內嵌到form上的一個panel控件里:
var handle = Process.GetProcessesByName("foo")[0].MainWindowHandle;
SetParent(handle, this.Handle);
SetWindowLong(handle, (int)GWL_STYLE, (uint)WS_VISIBLE);
MoveWindow(handle, 0, 0, this.Width, this.Height, true);
foo就是那個exe,用了一些windows api,P/Invoke的簽名不難從網(wǎng)上找到。
試了下,似乎可行。顯然,很野蠻很丑陋。
4。最后有頭腦靈活的高人想出巧妙的解決辦法:
using (FileStream fs = File.Create(path))
??????????????????????? {
??????????????????????????? using (StreamWriter sw = new StreamWriter(fs, Encoding.UTF8))
??????????????????????????? {
??????????????????????????????? sw.WriteLine("<html>");
??????????????????????????????? sw.WriteLine("<head>");
??????????????????????????????? sw.WriteLine("<meta http-equiv='X-UA-Compatible' content='IE=edge' />");
??????????????????????????????? sw.WriteLine("<iframe style='width:1500px;height:900px;' src='" + url + "'></iframe>");
??????????????????????????????? sw.WriteLine("</head>");
??????????????????????????????? sw.WriteLine("</html> ");
??????????????????????????? }
??????????????????????? }
??? ????????????????}
??????????????????? webBrowser1.Navigate(path);
手工創(chuàng)建一個頁面,關鍵是<meta http-equiv='X-UA-Compatible' content='IE=edge' />這一句,然后用iframe放那個Angular的頁面,用webBrower控件訪問文件,就可以了。確實是高招,自愧不如。
轉載于:https://www.cnblogs.com/badnumber/p/11087619.html
總結
以上是生活随笔為你收集整理的浏览器自动化的一些体会8 访问angular页面的一个问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java基础--多线程
- 下一篇: 请你讲一讲JavaScript有哪些数据