发现浏览器自动化有一个重要方面没有提及,即所谓的无页面浏览器,不过最近没有需求,不想尝试,先记上一笔,以后有需求时,可以有个思路。

大约一两个月前(现在比较懒散,时间不知不觉过去,连今天是几号有时候都搞糊涂),碰到一个问题,本来程序中用WebBrowser控件访问一个页面,现在那个页面用Angular重写了,访问出错,出来一个空白页面。

1。解决方案一是改注册表,修改webBrowser控件所模拟的IE版本,缺省是7,不支持Angular,改成高版本,如11,就可以了。

但是有个问题,只能在第一次创建webBrowser时生效,如果要改回来,对不起,只能重启程序。应用中有多处用了webBrowser控件,如果这里改成11,别处也要用11,那么,就需要测试所有用到的地方,看页面的显示是否正常,测试工作量太大,不可行。

2。解决方案二是用别的控件。找到一个口碑似乎不错的CefSharp,测试了一下,工作正常。

但是问题来了,首先是工程设置成AnyCPU,CefSharp需要配置。调试了一段时间,也可以了。

更大的问题来了,工程需要用click once方式部署,结果,那些dll发布不出去。查了半天,调试了半天,想尽了办法,还是不行。最后唯一的办法似乎只有用Mage.exe和MageUI.exe这两个windows sdk里的工具,手工修改clickonce的manifest,把需要的dll打包进去。太烦,也不可行。

3。情急之下想出第三方案,用一个独立的包含webBrowser控件的exe显示页面,然后在另一个winform主程序中,把这个exe内嵌到form上的一个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就是那个exe,用了一些windows api,P/Invoke的签名不难从网上找到。

试了下,似乎可行。显然,很野蛮很丑陋。

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);

手工创建一个页面,关键是<meta http-equiv='X-UA-Compatible' content='IE=edge' />这一句,然后用iframe放那个Angular的页面,用webBrower控件访问文件,就可以了。确实是高招,自愧不如。

转载于:https://www.cnblogs.com/badnumber/p/11087619.html

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

  1. Angular页面调试一个有用的小技巧 - normalizeDebugBindingName和normalizeDebugBindingValue - [object Object]

    在开发模式下渲染出的Angular页面包含了很多形如下图ng-reflect-的html属性,很多时候其值都为[object Object]. 如果处于调试目的,需要在Chrome开发者工具里观察这些 ...

  2. 11-selenium浏览器自动化

    selenium - 概念: Selenium 是一个 Web 应用的自动化框架 自动化:通过它,我们可以写出自动化程序,像人一样在浏览器里操作web界面. 比如点击界面按钮,在文本框中输入文字 等操 ...

  3. 浏览器自动化操作标准--WebDriver

    WebDriver是一个浏览器远程控制协议,是一个既定标准,它本身的内容非常丰富,本文不可能全部介绍,本文仅粗略带大家了解一下WebDriver的部分内容以及一个小的实际应用.想深入了解的请参考W3C ...

  4. [转载] 使用selenium_一日一技:使用Selenium的浏览器自动化

    参考链接: 使用Selenium的浏览器自动化 Selenium是用于通过程序控制Web浏览器的强大工具. 它适用于所有浏览器,可在所有主要操作系统上运行,并且其脚本以各种语言(即Python,Jav ...

  5. Android 通过 “隐式意图” 打开 系统的浏览器 访问 百度页面

    在MainActivity中,通过"隐式意图"打开系统的浏览器访问百度页面: MainActivity页面: package cn.lwx.openbrowser;import a ...

  6. 微信内打开的网页不能下载APP,微信无法打开浏览器访问指定页面的解决方案...

    不管是app的下载链接还是普通文件的链接在微信内置浏览器或者QQ内置浏览器分享都会被拦截.这是腾讯对第三方下载域名实施的打压政策.被屏蔽了也就意味着链接在微信中是无法正常打开的,那么此时用户在微信内打 ...

  7. python 浏览器自动化_Python利用splinter实现浏览器自动化操作方法

    利用Splinter开发浏览器自动化操作,编写代码比较简单. 案例一: from splinter import Browser with Browser() as browser: # Visit ...

  8. IE浏览器中访问jsp页面,页面不执行ajax请求,后台控制台报错

    问题描述:IE浏览器中访问jsp页面,页面不执行ajax请求,后台控制台报错:java.lang.IllegalArgumentException: Invalid character found i ...

  9. 【解决方案】Microsoft Edge 浏览器 出现“无法访问该页面”问题

    前言 今天Microsoft Edge 浏览器上网,突然发现输入任何网址都出现了"无法访问该页面"问题. 网上搜了半天发现了一个比较好的解决方法,本人也尝试成功了. 问题分析 浏览 ...

最新文章

  1. 新闻更新php html,phphtml 新闻发布系统,运用php+mysql,里面包括数据库和php文件。 Other systems 其他 249万源代码下载- www.pudn.com...
  2. Apache状态监测集重启
  3. Flask框架(SQLAlchemy(python3版本)中修改数据的方法和删除数据 的方法)
  4. Android shape的使用(圆角矩形)
  5. BMP位图之8位位图(三)
  6. java 方法 示例_Java语言环境getDisplayCountry()方法与示例
  7. mac netbeans java_在macOS上不安装JDK的情况下安装Netbeans
  8. 一生要做的九十九件事
  9. Word2013 设置默认缩进
  10. python 注销一大段_Python 编程从入门到实践 第19章 注销一节问题
  11. 数据库 SQL 学习(入门篇)
  12. php官网软件下载,php下载_php官方下载_3DM软件
  13. python jinja2_Python jinja2
  14. 20120912新工作感想
  15. Ubuntu 快速显示桌面快捷键
  16. 推荐7款超级好用的终端工具 —— SSH+FTP
  17. 2007安全焦点信息安全技术峰会有感
  18. 记得绑定邮箱 接收CSDN停用通知
  19. 解决微信小程序使用css滤镜filter后position fixed错乱
  20. 笔记本电脑自带录屏吗?笔记本电脑怎么录屏

热门文章

  1. c语言求最小公倍数_分解质因数、互质数、公因数、最大公因数、公倍数、最小公倍数...
  2. MySQL多表查询和事务安全
  3. 【转】 ubuntu adduser 命令学习
  4. Linux下监控磁盘io,如何在Linux下监控磁盘IO?
  5. P1464 Function(递归式的记忆化搜索)
  6. 捷易拍sdk开发指南.doc_每个Android开发都必须知道的利器
  7. python写界面进度条程序_Python中如何写控制台进度条的整理
  8. 如何通过 Serverless 轻松识别验证码?
  9. 如何在 20 分钟内给你的 K8s PaaS 上线一个新功能?
  10. 2020双11,Dubbo3.0 在考拉的超大规模实践