三个基于.net的浏览器内核使用的比较
最近做模擬登陸發(fā)帖相關(guān)的項(xiàng)目
分別嘗試了基于IE .NET自帶的 webbrowser 和 基于WebKit 的WebKit.NET和openWebkitSharp
最開始肯定是用的.NET自帶的webbrowser
但是在一個(gè)模擬點(diǎn)擊的問(wèn)題上遇到了錯(cuò)誤,就是InvokeMerber("click")這個(gè)事件沒(méi)有生效
網(wǎng)上也有和我差不多類似的錯(cuò)誤,但是找了一下 沒(méi)看到有用的解決辦法
而且其執(zhí)行js的辦法只有(當(dāng)然,這個(gè)只是目前的發(fā)現(xiàn),后來(lái)發(fā)現(xiàn)有解決辦法)invokeScript(methodName, args),通過(guò)在Document中注入js的辦法也可以
實(shí)現(xiàn)一定自由的執(zhí)行js,但總覺得不是很好
?
于是轉(zhuǎn)戰(zhàn)WebKit.NET
用Chrome調(diào)試過(guò)網(wǎng)頁(yè)的人一定很喜歡他的Console,雖然IE也支持,但總覺得用的沒(méi)Chrome用的爽,但I(xiàn)E11改變了很多
WebKit對(duì)他最大的好感就是可以自由的執(zhí)行javascript,雖然他的setAttribute這個(gè)功能穩(wěn)定性很糟糕,也沒(méi)有webbrowser的getElementsByTagName這個(gè)功能,
?
而且webbrowser提供的RaiseEvent,innerHtml,innerText他好像也不支持
但只要能執(zhí)行"自由的"js,很多難以解決的問(wèn)題都不是問(wèn)題了
其webKitBrowser1.StringByEvaluatingJavaScriptFromString(String js)這個(gè)功能,幾乎可以讓你在C#項(xiàng)目中執(zhí)行js像在控制臺(tái)下自由簡(jiǎn)單
所以webbrowser中模擬點(diǎn)擊的問(wèn)題再 WebKit.NET中用 "document.getElementById('id').click()"解決了
高興之余還罵了下webbrowser,可是沒(méi)多久問(wèn)題就來(lái)了,點(diǎn)擊是可以解決,可是當(dāng)目標(biāo)服務(wù)器傳回js時(shí),他無(wú)法進(jìn)行解析并轉(zhuǎn)入新的頁(yè)面
也就是他點(diǎn)擊的時(shí)間完成了,就永遠(yuǎn)停在哪里了。。。
后來(lái)進(jìn)一步深入,發(fā)現(xiàn)如果用它點(diǎn)擊一個(gè)需要在新窗口打開的連接 會(huì)毫無(wú)反應(yīng),而用CreateWindow和RequestWindow事件去獲取,又好像獲取不到目標(biāo)頁(yè)面的url
于是嘗試這個(gè)項(xiàng)目提供的DEMO程序,可以多標(biāo)簽打開頁(yè)面,但很多時(shí)候程序會(huì)莫名其妙的關(guān)閉
正在這個(gè)時(shí)候看到一個(gè)人說(shuō) 推薦用openWebkitSharp,是對(duì)WebKit.NET的封裝
?
于是就嘗試了這個(gè)控件 托管在谷歌代碼上面的
下載了一個(gè)最新版本
雖然其提供的DEMO程序在我的機(jī)器上運(yùn)行總是出錯(cuò) (本機(jī)環(huán)境: WIN7 64 .NET FRAMEWORK 4.5)
其源代碼也是難以在我的vs2010上運(yùn)行
于是就直接使用它的控件進(jìn)行編制,第一感覺就是還不錯(cuò),提供一個(gè)瀏覽器空間還提供了幾個(gè)其他控件
而且WebKit.NET不支持的幾個(gè)GetElement...相關(guān)方法他都支持,甚至在支持"自由的"執(zhí)行js的同時(shí)還提供js,css管理器進(jìn)行更多的操作
直接進(jìn)行自己需要的代碼進(jìn)行測(cè)試,點(diǎn)擊可以了,頁(yè)面跳轉(zhuǎn)也能完成
但其顯示的字體效果和之前兩個(gè)內(nèi)核渲染出的都不同,怪怪的
同樣也發(fā)現(xiàn)打不開新建窗口的連接,于是退出看看,在退出的時(shí)候彈出一個(gè)COM VCR之類的錯(cuò)誤,google之后也沒(méi)多少解決辦法
就這一個(gè)錯(cuò)誤對(duì)他的好感降了很多,畢竟開發(fā)的項(xiàng)目如果給用戶使用出現(xiàn)這種情況是很麻煩的
就在想辦法的時(shí)候,vs2010也奔潰了,用了大概3個(gè)月的vs2010,對(duì)其感覺就是還很穩(wěn)定,很少崩潰,于是再次打開這個(gè)項(xiàng)目運(yùn)行程序,每次關(guān)閉的時(shí)候vs都會(huì)奔潰
突然感覺到這個(gè)控件也不是那么可靠
既然DEMO不能用,就Google一下別人怎么用的
但資料及其的少,中文資料幾乎不超過(guò)10個(gè)
貌似是在StackOverFlow上面看到有人對(duì)這幾個(gè)基于.NET瀏覽器內(nèi)核的評(píng)價(jià),其中提到WebKit.NET和openwebkitsharp及其不穩(wěn)定
而且WebKit.NET早就沒(méi)更新了,而openwebkit也是大概1年以前的版本的
很多人都建議用webbrowser,于是決定最后用webbrowser試一試
突然想到之前無(wú)法點(diǎn)擊是不是DocumentComplete這個(gè)事件不穩(wěn)定
于是仔細(xì)跟蹤之后發(fā)現(xiàn),果然是這個(gè)問(wèn)題,webbrowser在處理DocumentComplete這個(gè)事件上確實(shí)沒(méi)webkit內(nèi)核做的好
于是稍加處理之后點(diǎn)擊事件完成了,值得一提的是webbrowser的SetAttribute功能很穩(wěn)定,幾乎自動(dòng)填表功能都可以
而WebKit下對(duì)于填不了的我都是用js解決的
同時(shí)也看到了SHDocVw這個(gè)控件,原來(lái)他是webBrowser的底層,而且利于他可以完成在Webbrowser中"自由的"執(zhí)行js的問(wèn)題
關(guān)于這個(gè)控件的更深層應(yīng)用還在探究中
?
而在經(jīng)過(guò)兩天的使用三個(gè)控件的經(jīng)歷后得出
如果只想穩(wěn)定的讓程序帶瀏覽器功能 還是選擇 webbrowser
而想做webkit的開發(fā),則需要自己花很多功夫去探究
畢竟基于webkit的文獻(xiàn)相當(dāng)少
當(dāng)然,,,一切都是初學(xué)者的言論,大牛就另當(dāng)別論
?
轉(zhuǎn)載于:https://www.cnblogs.com/soundcode/p/10884201.html
總結(jié)
以上是生活随笔為你收集整理的三个基于.net的浏览器内核使用的比较的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 项目评审
- 下一篇: Pyserial 实现串口 base o