WebBrowser如何调用火狐浏览器打不开网页显示网页

.net winform程序下使用firefox作为Web浏览器
我的图书馆
.net winform程序下使用firefox作为Web浏览器
在winform程序中,要在程序中展示一个web页面,最常用的就是.net自带的webbrowser,但是大家都知道它是IE,也知道IE是有多么强(er)大(bi)。而且微软已经宣布了IE的死亡。&那么如何使用firefox呢?只需两步:1、添加引用:Geckofx-Core、Geckofx-Winforms;图12、把xulrunner放在你项目的bin目录下;图2& 图1& 图2上面两个资源的下载地址:但是要注意一点:geckofx的版本要和xulrunner的版本对应,不然会有问题。xulrunner是firefox官网提供的,有最新版本,但是geckofx版本相对落后一些,但是也更新到了33.0版本,对应firefox的发布时间是2014年10月份,应该也够用了。&当把前面的资源配置好后,接下来就是调用api的活了,非常简单,上一段简单的代码。新建一个winform程序,然后在默认的form1.cs文件中加入以下代码。 1
public partial class Form1 : Form
private readonly string xulrunnerPath = Application.StartupPath + "/xulrunner";
private const string testUrl = "https://www.alipay.com/";
private GeckoWebBrowser B
public Form1()
InitializeComponent();
Xpcom.Initialize(xulrunnerPath);
private void Form1_Load(object sender, EventArgs e)
Browser = new GeckoWebBrowser();
Browser.Parent = this;
Browser.Dock = DockStyle.F
Browser.Navigate(testUrl);
}OK,运行项目你将会看到支付宝的首页。
喜欢该文的人也喜欢您还可以使用以下方式登录
当前位置:&>&&>&&>& > 判断WebBrowser浏览器网页加载完成的处理方法
判断WebBrowser浏览器网页加载完成的处理方法
很多人认为 SqlConnection 的连接是不耗时的,理由是循环执行 SqlConnection.Open 得到的平均时间几乎为0,但每次首次open 时,耗时又往往达到几个毫秒到几秒不等,这又是为什么呢?
首先我们看一下 MSDN 上的权威文档上是怎么说的
Connecting to a database server typically consists of several time-consuming steps. A physical channel such as a socket or a named pipe must be established, the initial handshake with the server must occur, the connection string information must be parsed, the connection must be authenticated by the server, checks must be run for enlisting in the current transaction, and so on.
以上摘自 http://msdn.microsoft.com/en-us/library/8xx3tyca%28VS.80%29.aspx
也就是说物理连接建立时,需要做和服务器握手,解析连接字符串,授权,约束的检查等等操作,而物理连接建立后,这些操作就不会去做了。这些操作是需要一定的时间的。所以很多人喜欢用一个静态对象存储 SqlConnection 来始终保持物理连接,但采用静态对象时,多线程访问会带来一些问题,实际上,我们完全不需要这么做,因为 SqlConnection 默认打开了连接池功能,当程序 执行& SqlConnection.Close 后,物理连接并不会被立即释放,所以这才出现当循环执行 Open操作时,执行时间几乎为0.
下面我们先看一下不打开连接池时,循环执行 SqlConnection.Open 的耗时
代码如下:public static void OpenWithoutPooling() {string connectionString = "Data Source=192.168.10.2; Initial Catalog=NIntegrated Security=TPooling=F";Stopwatch sw = new Stopwatch();sw.Start(); using (SqlConnection conn = new SqlConnection(connectionString)) {conn.Open();}sw.Stop();Console.WriteLine("Without Pooling, first connection elapsed {0} ms", sw.ElapsedMilliseconds); sw.Reset(); sw.Start();for (int i = 0; i & 100; i++){ using (SqlConnection conn = new SqlConnection(connectionString)) {conn.Open();} }sw.Stop();Console.WriteLine("Without Pooling, average connection elapsed {0} ms", sw.ElapsedMilliseconds / 100);} SqlConnection 默认是打开连接池的,如果要强制关闭,我们需要在连接字符串中加入 Pooling=False
调用程序如下:
代码如下:Test.SqlConnectionTest.OpenWithoutPooling();Console.WriteLine("Waiting for 10s");System.Threading.Thread.Sleep(10 * 1000);Test.SqlConnectionTest.OpenWithoutPooling();Console.WriteLine("Waiting for 600s"); System.Threading.Thread.Sleep(600 * 1000);Test.SqlConnectionTest.OpenWithoutPooling();
下面是测试结果
Without Pooling, first connection elapsed 13 msWithout Pooling, average connection elapsed 5 msWating for 10sWithout Pooling, first connection elapsed 6 msWithout Pooling, average connection elapsed 4 msWating for 600sWithout Pooling, first connection elapsed 7 msWithout Pooling, average connection elapsed 4 ms
从这个测试结果看,关闭连接池后,平均每次连接大概要耗时4个毫秒左右,这个就是建立物理连接的平均耗时。
下面再看默认情况下的测试代码
代码如下:&&&&&&& public static void OpenWithPooling()&&&& &{&&&&&&&& &string connectionString = "Data Source=192.168.10.2; Initial Catalog=N Integrated Security=T";&Stopwatch sw = new Stopwatch();&&&&& &sw.Start();&&&&&&&&&& &using (SqlConnection conn = new SqlConnection(connectionString))&{&&&&&&&&&&&&&& &conn.Open();&& &}&&&&&&&&&& &sw.Stop();& &Console.WriteLine("With Pooling, first connection elapsed {0} ms", sw.ElapsedMilliseconds); &sw.Reset();&&&&&& &sw.Start();&&&&&&&& &for (int i = 0; i & 100; i++)& &{&&&&&&&&&&&&&& &using (SqlConnection conn = new SqlConnection(connectionString)) &{&&&&&&&&&&&&&&&&& &conn.Open();&&&&&&& &}&&&&&&&&&& &}&&&&&&&& &sw.Stop();&&&&&&&&& &Console.WriteLine("With Pooling, average connection elapsed {0} ms", sw.ElapsedMilliseconds / 100);&&& &}
代码如下:&&&&&&&&&&&&&&& Test.SqlConnectionTest.OpenWithPooling();& &&Console.WriteLine("Waiting for 10s");&&& &&System.Threading.Thread.Sleep(10 * 1000);& &&Test.SqlConnectionTest.OpenWithPooling();&& &&Console.WriteLine("Waiting for 600s");&&&&& &&System.Threading.Thread.Sleep(600 * 1000);&& &&Test.SqlConnectionTest.OpenWithPooling();
With Pooling, first connection elapsed 119 msWith Pooling, average connection elapsed 0 msWaiting for 10sWith Pooling, first connection elapsed 0 msWith Pooling, average connection elapsed 0 msWaiting for 600sWith Pooling, first connection elapsed 6 msWith Pooling, average connection elapsed 0 ms
这个测试结果看,第一次耗时是119ms,这是因为我在测试代码中,首先运行的是这个测试过程,119 ms 是程序第一次启动时的首次连接耗时,这个耗时可能不光包括连接数据库的时间,还有 ado.net 自己初始化的用时,所以这个用时可以不管。10秒以后在执行这个测试过程,首次执行的时间变成了0ms,这说明连接池机制发生了作用,SqlConnection Close 后,物理连接并没有被关闭,所以10秒后再执行,连接几乎没有用时间。
但我们发现一个有趣的现象,10分钟后,首次连接时间变成了6ms,这个和前面不打开连接池的测试用时几乎一样,也就是说10分钟后,物理连接被关闭了,又重新打开了一个物理连接。这个现象是因为连接池有个超时时间,默认情况下应该在5-10分钟之间,如果在此期间没有任何的连接操作,物理连接就会被关闭。那么我们有没有办法始终保持物理连接呢?方法是有的。
连接池设置中有一个最小连接池大小,默认为0,我们把它设置为大于0的值就可以保持若干物理连接始终不释放了。看代码
代码如下:&&&&&&& public static void OpenWithPooling(int minPoolSize)& &{&&&&&&&&& &string connectionString = string.Format("Data Source=192.168.10.2; Initial Catalog=N Integrated Security=TMin Pool Size={0}",minPoolSize);&Stopwatch sw = new Stopwatch();&&&&&&& &sw.Start();&&&&&&&& &using (SqlConnection conn = new SqlConnection(connectionString))&&& &{&&&&&&&&&&&&&& &conn.Open();&& &}&&&&&&&&&&& &sw.Stop();&&&&&&& &Console.WriteLine("With Pooling Min Pool Size={0}, first connection elapsed {1} ms",minPoolSize, sw.ElapsedMilliseconds);&sw.Reset();&&&&&&&&&&& &sw.Start();&&&&& &for (int i = 0; i & 100; i++)&& &{&&&&&&&&&& &using (SqlConnection conn = new SqlConnection(connectionString))&& &{&&&&&&&&&&&&&&&&&& &conn.Open();&&& &}&&&&&&&&&& &}&&&&&&&&& &sw.Stop();&&& &Console.WriteLine("With Pooling Min Pool Size={0}, average connection elapsed {1} ms",minPoolSize, sw.ElapsedMilliseconds / 100); &}
其实只要在连接字符串中加入一个 Min Pool Size=n 就可以了。
代码如下:&&&&&&&&&&&&&&& Test.SqlConnectionTest.OpenWithPooling(1);&& &&Console.WriteLine("Waiting for 10s");&&&& &&System.Threading.Thread.Sleep(10 * 1000);&& &&Test.SqlConnectionTest.OpenWithPooling(1);&&& &&Console.WriteLine("Waiting for 600s");&&&&&&&&& &&System.Threading.Thread.Sleep(600 * 1000);&&&&&&& &&Test.SqlConnectionTest.OpenWithPooling(1);With Pooling Min Pool Size=1, first connection elapsed 5 msWith Pooling Min Pool Size=1, average connection elapsed 0 msWaiting for 10sWith Pooling Min Pool Size=1, first connection elapsed 0 msWith Pooling Min Pool Size=1, average connection elapsed 0 msWaiting for 600sWith Pooling Min Pool Size=1, first connection elapsed 0 msWith Pooling Min Pool Size=1, average connection elapsed 0 ms
我们可以看到当 Min Pool Size = 1& 时,除了首次连接用时5ms以外,即便过了10分钟,用时还是0ms,物理连接没有被关闭。
多线程调用问题多线程调用我也做了测试,这里不贴代码了,我大概讲一下结果。如果是多线程访问 SqlConnection ,注意是通过 new SqlConnection 方式访问,
那么这里有两个问题,如果后一个线程在前一个线程 Close 前调用了Open操作,那么 Ado.net 不可能复用一个物理连接,它将为第二个线程分配一个新的物理连接。如果后一个线程 Open& 时,前一个线程已经 Close 了,则新的线程使用前一个线程的物理连接。也就是说,如果同时有n个线程连接数据库,最多情况下会创建n条物理连接,最少情况下为1条。如果创建n条物理连接,则用时理论上等于 n * t / cpu , n 为线程数,t 为每次创建物理连接的用时,前面测试的结果大概是5-10ms左右,cpu 为当前机器的CPU数量。另外网络,服务器的负荷也影响这个用时。为了保证在大并发时,尽量少的创建新的物理连接,我们可以适当把 Min Pool Size 调大一些,但也不要太大,因为单个机器TCP链路的数量是有限的,详见我另外一篇文章 Windows 下单机最大TCP连接数
连接字符串中关于 连接池方面的参数
见下面链接 SqlConnection.ConnectionString Property
IIS 回收应用程序池对连接池的影响在做 ASP.NET 程序时,我们会发现,如果网站20分钟不访问,再次访问就会比较慢,这是因为IIS默认的 idle timeout 是20分钟,如果在20分钟内没有一个访问,IIS 将回收应用程序池,回收应用程序池的结果就相当于应用程序被重启,所有原来的全局变量,session, 物理连接都将清空。回收应用程序池后首次访问,相当于前面我们看到的程序启动后第一次访问数据库,连接的建立时间将比较长。所以如果网站在某些时段访问量很少的话,需要考虑 idle timeout 是否设置合理。
欢迎转载:
相关推荐:C#利用webBrowser怎么显示网页中只想显示的部分
System.IO.StreamReader sr = new System.IO.StreamReader(webBrowser1.DocumentStream, Encoding.GetEncoding("gb2312"));
string html = sr.ReadToEnd();//获取源文件
sr.Close();
/*截取table 的html源文件*/
int start = html.IndexOf("&table id=\"post_tb\" width=\"100%\" border=\"0\" cellspacing=\"1\" cellpadding=\"3\"&");
int end = html.IndexOf("&/table&", start) + 8;
string tbhtm = html.Substring(start, end - start);
webBrowser1.DocumentText =//设置为table的
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!查看: 1401|回复: 6
请问如何用Webbrowser控件显示谷歌地图
阅读权限30
普通会员, 积分 152, 距离下一级还需 148 积分
我根据谷歌MAP提供的API写了一个HTML页面,想用Webbrowser将其本地打开。可是打开后,一片空白。我尝试用IE浏览器打开也一样,只有用谷歌浏览器或者火狐才能打开。(当然是已经翻墙了的)
同样的,我按照百度提供的API也写了HTML页面,同样也打不开。是不是Webbrowser因为用了IE引擎,导致无法打开?
注:我的HTML页面目的是为了在地图上标示一个红点。
WebBrowser 默认使用 ie7内核
如果你可以用ie访问 而 WebBrowser 不行 可能是 ie7内核 不支持 你设置成使用 最新版吧 ie内核 试下
https://msdn.microsoft.com/en-us/library/ee330730(v=vs.85).aspx
发帖求助前要善用【】功能,那里可能会有你要找的答案;
如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】;
如何回报帮助你解决问题的坛友?可以给对方加【热心】和【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限80
金牌会员, 积分 3191, 距离下一级还需 1809 积分
据我观察,GOOGLE或者百度地图都是通过JS调用来绘制地图的。我起初怀疑是IE设置中对JS调用的屏蔽,于是我 ...
WebBrowser 默认使用 ie7内核
如果你可以用ie访问 而 WebBrowser 不行 可能是 ie7内核 不支持 你设置成使用 最新版吧 ie内核 试下
(v=vs.85).aspx
发帖求助前要善用【】功能,那里可能会有你要找的答案;
如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】;
如何回报帮助你解决问题的坛友?可以给对方加【热心】和【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限200
WebBrowser 是微软提供的控件,所以默认的浏览器内核肯定是用的 IE 喽,所以先想办法如何让IE浏览器能打开你的本地页面,这样 WebBrowser 控件就肯定没问题了。
发帖求助前要善用【】功能,那里可能会有你要找的答案;
如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】;
如何回报帮助你解决问题的坛友?可以给对方加【热心】和【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限30
普通会员, 积分 152, 距离下一级还需 148 积分
WebBrowser 是微软提供的控件,所以默认的浏览器内核肯定是用的 IE 喽,所以先想办法如何让IE浏览器能打开 ...
据我观察,GOOGLE或者百度地图都是通过JS调用来绘制地图的。我起初怀疑是IE设置中对JS调用的屏蔽,于是我将IE安全设置为最低,开启一切JS执行,但是还是不行。奇怪,我用IE直接去访问GOOGLE或者百度地图又可以。但是对本地的就不行。
发帖求助前要善用【】功能,那里可能会有你要找的答案;
如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】;
如何回报帮助你解决问题的坛友?可以给对方加【热心】和【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限200
据我观察,GOOGLE或者百度地图都是通过JS调用来绘制地图的。我起初怀疑是IE设置中对JS调用的屏蔽,于是我 ...
可能 html 或者 js 代码中涉及到获取 url 之类的了,直接本地不一定好用,得修改修改才行吧
发帖求助前要善用【】功能,那里可能会有你要找的答案;
如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】;
如何回报帮助你解决问题的坛友?可以给对方加【热心】和【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限30
普通会员, 积分 152, 距离下一级还需 148 积分
可能 html 或者 js 代码中涉及到获取 url 之类的了,直接本地不一定好用,得修改修改才行吧
的确有获取URL,但是为什么火狐和谷歌浏览器又可以呢?
发帖求助前要善用【】功能,那里可能会有你要找的答案;
如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】;
如何回报帮助你解决问题的坛友?可以给对方加【热心】和【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限30
普通会员, 积分 152, 距离下一级还需 148 积分
WebBrowser 默认使用 ie7内核
如果你可以用ie访问 而 WebBrowser 不行 可能是 ie7内核 不支持 你设置成 ...
感谢您的答案
发帖求助前要善用【】功能,那里可能会有你要找的答案;
如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】;
如何回报帮助你解决问题的坛友?可以给对方加【热心】和【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
站长提醒 /1
对已经录取并在vc驿站上面发表的作品予以奖励,视技术含量不同奖励人民币 50~300元
Powered by Discuz! X3.4使用python调用浏览器并打开一个网址的例子
转载 &更新时间:日 09:53:17 & 作者:
这篇文章主要介绍了使用python调用浏览器并打开一个网址的例子,使用webbrowser模块实现,需要的朋友可以参考下
python 打开浏览器,可以做简单的刷网页的小程序。仅供学习,别用非法用途。
python的webbrowser模块支持对浏览器进行一些操作,主要有以下三个方法: 代码如下:webbrowser.open(url, new=0, autoraise=True)webbrowser.open_new(url)webbrowser.open_new_tab(url)
我们需要了解webbrowser.open()方法:
代码如下:webbrowser.open(url, new=0, autoraise=True)
在系统的默认浏览器中访问url地址,如果new=0,url会在同一个浏览器窗口中打开;如果new=1,新的浏览器窗口会被打开;new=2新的浏览器tab会被打开。
而webbrowser.get()方法可以获取到系统浏览器的操作对象。
webbrowser.register()方法可以注册浏览器类型,而允许被注册的类型名称如下: 代码如下:&&& Type Name Class Name Notes &&& 'mozilla' Mozilla('mozilla')&& &&& 'firefox' Mozilla('mozilla')&& &&& 'netscape' Mozilla('netscape')&& &&& 'galeon' Galeon('galeon')&& &&& 'epiphany' Galeon('epiphany')&& &&& 'skipstone' BackgroundBrowser('skipstone')&& &&& 'kfmclient' Konqueror() (1) &&& 'konqueror' Konqueror() (1) &&& 'kfm' Konqueror() (1) &&& 'mosaic' BackgroundBrowser('mosaic')&& &&& 'opera' Opera()&& &&& 'grail' Grail()&& &&& 'links' GenericBrowser('links')&& &&& 'elinks' Elinks('elinks')&& &&& 'lynx' GenericBrowser('lynx')&& &&& 'w3m' GenericBrowser('w3m')&& &&& 'windows-default' WindowsDefault (2) &&& 'macosx' MacOSX('default') (3) &&& 'safari' MacOSX('safari') (3) &&& 'google-chrome' Chrome('google-chrome')&& &&& 'chrome' Chrome('chrome')&& &&& 'chromium' Chromium('chromium')&& &&& 'chromium-browser' Chromium('chromium-browser')DEMO: 代码如下:#!/usr/bin/env python#-*- coding:UTF-8 -*-import sysimport webbrowsersys.path.append("libs")&url = 'http://www.baidu.com'webbrowser.open(url)print webbrowser.get()
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具

我要回帖

更多关于 调用火狐浏览器 的文章

 

随机推荐