三个基于.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的文献相当少
当然,,,一切都是初学者的言论,大牛就另当别论
三个基于.net的浏览器内核使用的比较的更多相关文章
- WPF系列教程——(三)使用Win10 Edge浏览器内核 - 简书
原文:WPF系列教程--(三)使用Win10 Edge浏览器内核 - 简书 在需要显示一些 H5网站的时候自带的WebBrowser总是显示不了,WebBrowser使用的是IE内核,许多H5新特性都 ...
- 几大主流浏览器内核(Rendering Engine)
"浏览器内核",英文为"Rendering Engine",也叫"渲染引擎",作用是帮助浏览器来渲染网页的内容,将页面内容和排版代码转换为用 ...
- <转>浏览器内核分类
浏览器的种类成千上百,但所基于的内核,却没有几个.目前主流的浏览器内核主要为以下四种: 一.Trident内核,代表产品Internet Explorer说起Trident,很多人都会感到陌生,但提起 ...
- 浏览器内核Trident/Gecko/WebKit/Presto
“浏览器内核”主要指渲染引擎(Rendering Engine),负责解析网页语法(如HTML.JavaScript)并渲染.展示网页.因此,所谓的浏览器内核通常也就是指浏览器所采用的渲染引擎, 渲染 ...
- 第三方浏览器内核嵌入一、Crosswalk
本篇分为三部分: 介绍Crosswalk背景 介绍Crosswalk集成步骤 为了减小体积,仅集成兼容ARM的Crosswalk(针对X86同理) PART_A Crosswalk背景介绍 Web技术 ...
- 目前主流的四大浏览器内核Trident、Gecko、WebKit以及Presto
“浏览器内核”主要指渲染引擎(Rendering Engine),负责解析网页语法(如HTML.JavaScript)并渲染.展示网页.因此,所谓的浏览器内核通常也就是指浏览器所采用的渲染引擎,渲染引 ...
- 关于浏览器内核与javascript引擎的一些小知识
浏览器是我们每天几乎都必须使用的软件产品,可是对于自己每天都接触的浏览器,很多同学其实对其一无所知.今天异次元就跟大家说说关于浏览器内核的一些事儿吧,好让你了解多一点稍微内在的东西. 在下面的文章中主 ...
- 浏览器内核与BOM对象介绍
BOM(Browser Object Model)对象介绍 我们都知道js有三部分组成,ECMAScript.DOM和BOM,根据宿主(浏览器)的不同,具体的表现形式也不尽相同,ie和其它浏览器也是风 ...
- 各大浏览器内核特性及对应的Browserhacks举例
1.浏览器内核指的是什么? 简化的浏览器=用户界面+渲染引擎+js解析引擎+数据存储+网络部件 而通常所说的浏览器内核指的是页面渲染引擎(rendering engine). 2.渲染引擎 The r ...
随机推荐
- .NET MVC 支付宝支付(即时到账)
已经好久没有搞过.NET了,朋友有一个网站 ,需要接入支付宝功能,重新对接了一下. 1.开发前,需要一个企业支付宝账号登录,获取 PID和 配置密钥 官方文档:https://docs.open.al ...
- DISK2VHD 转win2008 无法启动
windows 2008R2物理机,使用微软的DISK2VHD转换成虚拟盘,挂到虚拟机上,无法启动只有光标闪.找来window2008安装盘 选择“修复windows系统”, 调出cmd命令提示符Bo ...
- Python学习笔记之测试函数
11-1 城市和国家:编写一个函数,它接受两个形参:一个城市名和一个国家名.这个函数返回一个格式为City, Country 的字符串,如Santiago, Chile.将这个函数存储在一个名为cit ...
- Python 实现两个矩形重合面积
计算两个矩形的重合面积 import math x1, y1, x2, y2 = input().split(" ") x1, y1, x2, y2=int(x1), int(y1 ...
- 使用docker创建mongodb
1.创建 MongoDB 数据卷 docker volume create mongo_data_yapi 2.启动 MongoDB docker run -d --name mongo-yapi - ...
- 设置 Jupyter notebook 工作空间 / 默认路径
常用的启动 Jupyter notebook 的两种方式是:命令行窗口启动和开始菜单启动.设置 Jupyter notebook 的默认路径也有两种常用方式: 修改配置文件 设置快捷方式. 1 通过修 ...
- Java面试题:HashMap和HashTable的区别
HashMap和HashTable的区别是面试时面试官经常问的问题,在回答的时候可以选择重点做回答,区别主要有下面几点:key和value的取值范围不同HashMap和HashTable都是基于哈希表 ...
- 良心送分题(牛客挑战赛35E+虚树+最短路)
目录 题目链接 题意 思路 代码 题目链接 传送门 题意 给你一棵树,然后把这棵树复制\(k\)次,然后再添加\(m\)条边,然后给你起点和终点,问你起点到终点的最短路. 思路 由于将树复制\(k\) ...
- LocalDateTime的一些用法
包括获取当前时间,指定特定时间.进行时间的加减等 LocalDateTime localDateTime3 = LocalDateTime.now(); LocalDate.now(); LocalT ...
- KVM虚拟机嵌套虚拟化
KVM虚拟机嵌套虚拟化 背景介绍 在Arch linux的 KVM 虚拟机上启动来部署开源Iaas系统zstack时,需要开启虚拟机嵌套虚拟化. 解决 KVM 嵌套式虚拟 Nested 是一个 ...