C# webbrowser全掌握(二)
全篇引用单元mshtml;
路径:C:\windows\assembly\GAC\Microsoft.mshtml\7.0.3300.0__b03f5f7f11d50a3a\Microsoft.mshtml.dll //不同的版本路径不同
一、如何用Webbrowser获取网页的全部源代码
1.不含框架
string s= WB1.DocumentText;
2.含有框架
IHTMLDocument2 doc=WB1.Document.DomDocument as IHTMLDocument2;
IHTMLFramesCollection2 frames=doc.frames as IHTMLFramesCollection2;
int i_frame=0; //第1个框架
IHTMLWindow2 frame=frames.item(ref i_frame) as IHTMLWindow2;
IHTMLDocument2 doc2=frame.document as IHTMLDocument2;
IHTMLDocument3 doc3=frame.document as IHTMLDocument3;
strings = doc2.body.innerHTML;
二、webbrowser如何获取网页的元素
1.根据元素ID
HtmlElement ele= WB1.Document.GetElementById("ID");
2.根据元素Name
HtmlElement ele= WB1.Document.All["Name"];
3. 根据元素的索引序号
HtmlElement ele=WB1.Document.All[0]; //第1个元素
HtmlElement ele= WB1.Document.GetElementsByTagName("input")[0]; //第一个inuput类型的元素
4.无ID无Name的元素
4.1 webbrowser遍历网页所有元素:
HtmlDocument doc=WB1.Document;
HtmlElementCollection elements=doc.All;
foreach(HtmlElement element in elements)
{
if (element.GetAttribute("innerText") == "提交回答") //元素的innnerText属性为“提交回答”
{
element.InvokeMember("Click"); //模拟点击
break;
}
}
4.2 webbrowser 根据元素的Tag遍历(有HTML、Form、Table、TR、TD、Div、A、 IMG、Li、Input、Span等)
input: 所有可输入的类型,例如文本框、勾选框、复选框、下拉列表、图片等
a: A标签,可以带超链接
img: 图片类型
span: SPAN类型
li: 下拉列表,列表框等
div: DIV
HtmlElementCollection eles = WB1.Document.GetElementsByTagName("a") as HtmlElementCollection; //所有的A标签集合
foreach (HtmlElement ele in eles)
{
if (ele.GetAttribute("href") != null)
if (ele.GetAttribute("href") == "A标签的超链接")
{
element.InvokeMember("Click"); //模拟点击
break;
}
}
4.3 根据已知元素获取未知元素
例如:
获取已知ID的下一个节点
HtmlElement ele= WB1.Document.GetElementById("元素的ID") .NextSibling;
//上个节点 previousSibling获取已知ID的父节点的第1个节点
HtmlElement ele= WB1.Document.GetElementById("元素的ID") .Parent.Children[0];
//或者firstChild
三、webbrowser模拟填表
四、webbrowser执行JS函数
1.用Navigate
WB1.Navigate("javascript:alert('弹出信息!');"); //alert为要执行的JS函数
WB1.Navigate("javascript:postComment();"); //postComment为要执行的JS函数
2.用IhtmlWindow2接口
IHTMLWindow2 win2 = WB1.Document.Window.DomWindow as IHTMLWindow2;
win2.execScript("function confirm(){return true;}", "javascript");
3.用IhtmlDocument2接口的parentWindow
IHTMLDocument2 doc2 = WB1.Document.DomDocument as IHTMLDocument2;
doc2.parentWindow.execScript("function confirm() {return true;}", "javascript");
{
e.Cancel=true; //屏蔽弹出到IE浏览器
// ppDisp=WB2.ActiveXInstance; //新建的webbrowser(WB2)窗口打开;
string url=WB1.Document.ActiveElement.GetAttribute("href");
if(url=="")
WB1.Navigate(url); //本窗口打开
}
Size sz=WB1.Size;
int xbili=(int)((float)sz.Width/(float)szb.Width*100);//水平方向缩小比例
int ybili=(int)((float)sz.Height/(float)szb.Height*100);//垂直方向缩小比例
WB1.Document.Body.Style="zoom:"+xbili.ToString()+"%";
WB1.Invalidate();
HtmlDocument document = WB1.Document;
int top = document.GetElementsByTagName("HTML")[0].ScrollTop;//滚动条垂直位置
指定滚动条滚动到指定位置
WB1.Document.Window.ScrollTo(0, 100);//滚动到100的位置
WB1.Document.Window.ScrollTo(0, WB1.Document.Body.ScrollRectangle.Height);//滚动到底部
七、Webbrowser遍历网页元素
//不引用其他单元
foreach(HtmlElement ele in WB1.Document.All)
{
if(ele.InnerText=="下一页>")
{
ele.InvokeMember("Click");
break;
}
}
//引用mshtml;
IHTMLDocument2 doc = WB1.Document.DomDocument as IHTMLDocument2;
foreach (IHTMLElement ele in doc2.all)
{
if (ele.innerText == "下一页>")
{
ele.click();
break;
}
}
C# webbrowser全掌握(二)的更多相关文章
- 获取WebBrowser全cookie 和 httpWebRequest 异步获取页面数据
获取WebBrowser全cookie [DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true) ...
- Xcode括号自动补全以及二次编译后不显示输入
今天遇到了一个大坑,在使用栈来进行计算表达式的时候,发现输入括号就报错,以及二次编译后不显示. 测试了好久,经过无数次debug后. 二次编译不显示还是没搞明白,不过输入倒是没什么问题,就是不显示出来 ...
- 通过trie树单词自动补全(二)
经常使用iciba进行单词查询, 关于他的搜索建议是通过单词前缀做的索引, 所以自己想动手实现下, 当然如果借助mysql的话,一条sql语句就能实现, 网上查询了下trie正适合做这个,所以通过C语 ...
- c# webBrowser全掌握
一.获取网页源代码 1.不含有框架 string s=WB1.DocumentText; //webbrowser1命名为WB1,下同 2.含有框架 引用mshtml; //位置C ...
- Express+Mongoose(MongoDB)+Vue2全栈微信商城项目全记录(二)
用mogoose搭建restful测试接口 接着上一篇(Express+Mongoose(MongoDB)+Vue2全栈微信商城项目全记录(一))记录,今天单独搭建一个restful测试接口,和项目前 ...
- C# WebBrowser使用 网络(二)
WebBrowser 简单操作 Form 代码 public partial class Form1 : Form { public Form1() { InitializeComponent(); ...
- DL基础补全计划(二)---Softmax回归及示例(Pytorch,交叉熵损失)
PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明 本文作为本人csdn blog的主站的备份.(Bl ...
- Sql Server函数全解<二>数学函数
阅读目录 1.绝对值函数ABS(x)和返回圆周率的函数PI() 2.平方根函数SQRT(x) 3.获取随机函数的函数RAND()和RAND(x) 4.四舍五入函数ROUND(x,y) 5.符号函数SI ...
- Sql Server函数全解(二)数学函数
数学函数主要用来处理数值数据,主要的数学函数有:绝对值函数,三角函数(包括正弦函数,余弦函数,正切函数,余切函数).对数函数,随机函数等.在错误产生时,数学函数将返回空值null.本次介绍各种数学 ...
随机推荐
- 你不知道的JavaScript(中卷) (Kyle Simpson 著)
第一部分 类型和语法 第1章 类型 1.1 类型 1.2 内置类型 1.3 值和类型 1.3.1 undefined和undeclared 1.3.2 typeof Undeclared 1.4 小结 ...
- 枚举 Java Enumeration接口
Enumation 定义了一些方法,通过这些方法可以枚举对象集合中的元素 如: boolean hasMoreElements() 测试此枚举是否包含更多的元素 object nextElement( ...
- PADS Logic Ref Des Start Value
PADS Logic Ref Des Start Value 曾经以为 Mentor 把 PADS Logic 放弃了,没想到还加了一个非常实用的功能. 这个的好处是让元件号可以设置起始编号,方便每一 ...
- 我发起了一个用 .Net 编写的 源代码管理工具 开源项目 SourceKit
发起这个 项目 的 起因 是 GitHub . Github 的 使用技能 俨然已经成了 一项新技术 , 这不是 工具 的 本意 . 我用过的 源代码 管理工具 不多, SVN 我觉得不错 . 常用 ...
- 寻找“最好”(4)——不等约束和KKT条件
不等约束 上篇文章介绍了如何在等式约束下使用拉格朗日乘子法,然而真实的世界哪有那么多等式约束?我们碰到的大多数问题都是不等约束.对于不等约束的优化问题,可以这样描述: 其中f(x)是目标函数,g(x) ...
- ZeroTier One
ZeroTier – 无配置,零基础「内网穿透」随时随地连回家/学校/办公室 [跨平台] https://www.appinn.com/zerotier-one/ Virtual NetworkZer ...
- ES查询之刨根问底
昨天有一个需求,就是想要根据某个网关url做过滤,获取其下面所有的上下文nginx日志:如果直接"query":"https://XXX/YYY/ZZZ"发现有 ...
- 手动增加pe节并修改oep
一直想学学怎么动动pe文件,学习了几篇文章尤其是寒晨的文章后,自己动手也尝试了一下加节和修改oep,写出来供和我一样菜的一起进步. 一. 增加pe节需要的操作 1. 确定内存中的节的 ...
- [MySQL FAQ]系列 — processlist中哪些状态要引起关注 解决mysql cpu过高问题
show processlist; 一般而言,我们在processlist结果中如果经常能看到某些SQL的话,至少可以说明这些SQL的频率很高,通常需要对这些SQL进行进一步优化. 今天我们要说的是, ...
- xilinx AXI相关IP核学习
xilinx AXI相关IP核学习 1.阅读PG044 (1)AXI4‐Stream to Video Out Top‐Level Signaling Interface (2)AXI4‐Stream ...