zoukankan      html  css  js  c++  java
  • 三个基于.net的浏览器内核使用的比较

    最近做模拟登陆发帖相关的项目

    分别尝试了基于IE .NET自带的 webbrowser 和 基于WebKit 的WebKit.NET和openWebkitSharp

    最开始肯定是用的.NET自带的webbrowser

    但是在一个模拟点击的问题上遇到了错误,就是InvokeMerber("click")这个事件没有生效

    网上也有和我差不多类似的错误,但是找了一下 没看到有用的解决办法

    而且其执行js的办法只有(当然,这个只是目前的发现,后来发现有解决办法)invokeScript(methodName, args),通过在Document中注入js的办法也可以

    实现一定自由的执行js,但总觉得不是很好

    于是转战WebKit.NET

    用Chrome调试过网页的人一定很喜欢他的Console,虽然IE也支持,但总觉得用的没Chrome用的爽,但IE11改变了很多

    WebKit对他最大的好感就是可以自由的执行javascript,虽然他的setAttribute这个功能稳定性很糟糕,也没有webbrowser的getElementsByTagName这个功能,

    而且webbrowser提供的RaiseEvent,innerHtml,innerText他好像也不支持

    但只要能执行"自由的"js,很多难以解决的问题都不是问题了


    其webKitBrowser1.StringByEvaluatingJavaScriptFromString(String js)这个功能,几乎可以让你在C#项目中执行js像在控制台下自由简单

    所以webbrowser中模拟点击的问题再 WebKit.NET中用 "document.getElementById('id').click()"解决了

    高兴之余还骂了下webbrowser,可是没多久问题就来了,点击是可以解决,可是当目标服务器传回js时,他无法进行解析并转入新的页面

    也就是他点击的时间完成了,就永远停在哪里了。。。

    后来进一步深入,发现如果用它点击一个需要在新窗口打开的连接 会毫无反应,而用CreateWindow和RequestWindow事件去获取,又好像获取不到目标页面的url

    于是尝试这个项目提供的DEMO程序,可以多标签打开页面,但很多时候程序会莫名其妙的关闭

    正在这个时候看到一个人说 推荐用openWebkitSharp,是对WebKit.NET的封装

    于是就尝试了这个控件 托管在谷歌代码上面的

    下载了一个最新版本

    虽然其提供的DEMO程序在我的机器上运行总是出错 (本机环境: WIN7 64 .NET FRAMEWORK 4.5)

    其源代码也是难以在我的vs2010上运行

    于是就直接使用它的控件进行编制,第一感觉就是还不错,提供一个浏览器空间还提供了几个其他控件

    而且WebKit.NET不支持的几个GetElement...相关方法他都支持,甚至在支持"自由的"执行js的同时还提供js,css管理器进行更多的操作

    直接进行自己需要的代码进行测试,点击可以了,页面跳转也能完成

    但其显示的字体效果和之前两个内核渲染出的都不同,怪怪的

    同样也发现打不开新建窗口的连接,于是退出看看,在退出的时候弹出一个COM VCR之类的错误,google之后也没多少解决办法

    就这一个错误对他的好感降了很多,毕竟开发的项目如果给用户使用出现这种情况是很麻烦的

    就在想办法的时候,vs2010也奔溃了,用了大概3个月的vs2010,对其感觉就是还很稳定,很少崩溃,于是再次打开这个项目运行程序,每次关闭的时候vs都会奔溃

    突然感觉到这个控件也不是那么可靠

    既然DEMO不能用,就Google一下别人怎么用的

    但资料及其的少,中文资料几乎不超过10个

    貌似是在StackOverFlow上面看到有人对这几个基于.NET浏览器内核的评价,其中提到WebKit.NET和openwebkitsharp及其不稳定

    而且WebKit.NET早就没更新了,而openwebkit也是大概1年以前的版本的

    很多人都建议用webbrowser,于是决定最后用webbrowser试一试

    突然想到之前无法点击是不是DocumentComplete这个事件不稳定

    于是仔细跟踪之后发现,果然是这个问题,webbrowser在处理DocumentComplete这个事件上确实没webkit内核做的好

    于是稍加处理之后点击事件完成了,值得一提的是webbrowser的SetAttribute功能很稳定,几乎自动填表功能都可以

    而WebKit下对于填不了的我都是用js解决的

    同时也看到了SHDocVw这个控件,原来他是webBrowser的底层,而且利于他可以完成在Webbrowser中"自由的"执行js的问题

    关于这个控件的更深层应用还在探究中

    而在经过两天的使用三个控件的经历后得出

    如果只想稳定的让程序带浏览器功能 还是选择 webbrowser

    而想做webkit的开发,则需要自己花很多功夫去探究

    毕竟基于webkit的文献相当少

    当然,,,一切都是初学者的言论,大牛就另当别论

  • 相关阅读:
    关于一些无法被代替的宏定义函数
    error in invoking target 'mkldflags ntcontab.o nnfgt.o' of makefile
    ajax——XMLHttpRequest
    Readprocessmemory使用方法
    互信息的概念和定理
    音频编辑大师 3.3 注册名称 许可证
    youwuku和koudaitong以及weimeng差异
    delphi webbrowser 经常使用的演示样本
    大约ActionContext.getContext()使用体验
    Codeforces Round #243 (Div. 1)——Sereja and Two Sequences
  • 原文地址:https://www.cnblogs.com/soundcode/p/10884201.html
Copyright © 2011-2022 走看看