日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > HTML >内容正文

HTML

浏览器自动化的一些体会8 访问angular页面的一个问题

發(fā)布時(shí)間:2025/3/20 HTML 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 浏览器自动化的一些体会8 访问angular页面的一个问题 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

發(fā)現(xiàn)瀏覽器自動(dòng)化有一個(gè)重要方面沒有提及,即所謂的無頁面瀏覽器,不過最近沒有需求,不想嘗試,先記上一筆,以后有需求時(shí),可以有個(gè)思路。

大約一兩個(gè)月前(現(xiàn)在比較懶散,時(shí)間不知不覺過去,連今天是幾號(hào)有時(shí)候都搞糊涂),碰到一個(gè)問題,本來程序中用WebBrowser控件訪問一個(gè)頁面,現(xiàn)在那個(gè)頁面用Angular重寫了,訪問出錯(cuò),出來一個(gè)空白頁面。

1。解決方案一是改注冊(cè)表,修改webBrowser控件所模擬的IE版本,缺省是7,不支持Angular,改成高版本,如11,就可以了。

但是有個(gè)問題,只能在第一次創(chuàng)建webBrowser時(shí)生效,如果要改回來,對(duì)不起,只能重啟程序。應(yīng)用中有多處用了webBrowser控件,如果這里改成11,別處也要用11,那么,就需要測(cè)試所有用到的地方,看頁面的顯示是否正常,測(cè)試工作量太大,不可行。

2。解決方案二是用別的控件。找到一個(gè)口碑似乎不錯(cuò)的CefSharp,測(cè)試了一下,工作正常。

但是問題來了,首先是工程設(shè)置成AnyCPU,CefSharp需要配置。調(diào)試了一段時(shí)間,也可以了。

更大的問題來了,工程需要用click once方式部署,結(jié)果,那些dll發(fā)布不出去。查了半天,調(diào)試了半天,想盡了辦法,還是不行。最后唯一的辦法似乎只有用Mage.exe和MageUI.exe這兩個(gè)windows sdk里的工具,手工修改clickonce的manifest,把需要的dll打包進(jìn)去。太煩,也不可行。

3。情急之下想出第三方案,用一個(gè)獨(dú)立的包含webBrowser控件的exe顯示頁面,然后在另一個(gè)winform主程序中,把這個(gè)exe內(nèi)嵌到form上的一個(gè)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就是那個(gè)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)建一個(gè)頁面,關(guān)鍵是<meta http-equiv='X-UA-Compatible' content='IE=edge' />這一句,然后用iframe放那個(gè)Angular的頁面,用webBrower控件訪問文件,就可以了。確實(shí)是高招,自愧不如。

轉(zhuǎn)載于:https://www.cnblogs.com/badnumber/p/11087619.html

總結(jié)

以上是生活随笔為你收集整理的浏览器自动化的一些体会8 访问angular页面的一个问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。