c# webBrowser全掌握
一、获取网页源代码
1.不含有框架
string s=WB1.DocumentText; //webbrowser1命名为WB1,下同
2.含有框架
引用mshtml; //位置C:\Program Files\Microsoft.NET\Primary Interop Assemblies\Microsoft.mshtml.dll
object i_frame=0; //第一个框架
IHTMLDocument2 doc = FWB.Document.DomDocument as IHTMLDocument2;
IHTMLFramesCollection2 frames = doc.frames as IHTMLFramesCollection2;
IHTMLWindow2 frame = frames.item(ref i_frame) as IHTMLWindow2;
IHTMLDocument2 frameDoc = frame.document as IHTMLDocument2;
string s=frameDoc.Document.body.innerHTML;
二、获取网页元素
1.根据ID
HtmlDocument ele= WB1.Document.getElementById("元素的ID");
2,根据name
HtmlDocument ele= WB1.Document.all["元素的name"];
3.无ID无Name----遍历元素
例如:<input type="submit">提交</input>
string str_temp;
HtmlDocument ele= WB1.Document.getElementById("元素的ID");
foreach (IHTMLElement ele in eles)
{
if (ele.getAttribute("type", 0) != null)
{
str_temp = ele.getAttribute("type", 0).ToString();
if (str_temp == "submit")
{
ele.click();
break;
}
}
}
三、遍历元素
HtmlDocument ele= WB1.Document.getElementById("元素的ID");
1.遍历所有元素
HtmlDocument doc = WB1.Document;
HtmlElementCollection elements = doc.All;
foreach (HtmlElement element in elements)
{
if (element.GetAttribute("type") == "submit")
{
element.InvokeMember("Click");
break;
}
}
2.根据元素类型 GetElementsByTagName
//目前有HTML、Form、Table、TR、TD、Div、A、 IMG、Li、Input、Span等
HtmlElementCollection eles = WB1.Document.GetElementsByTagName("li") as HtmlElementCollection;
foreach (HtmlElement ele in eles)
{
if (ele.InnerText != null)
{
if (ele.InnerText == "结婚饰品")
{
ele.InvokeMember("Click");
Application.DoEvents();
}
}
}
3.根据索引值
HtmlDocument ele= WB1.Document.getElementsByTagName("input")[0]; //获取input类型的第一个元素
4.根据上下节点和父节点
例如:
获取已知ID的下一个节点
HtmlDocument ele= WB1.Document.getElementById("元素的ID") .nextSibling;
//上个节点 previousSibling
获取已知ID的父节点的第1个节点
HtmlDocument ele= WB1.Document.getElementById("元素的ID") .Parent.Children[0];
//或者firstChild
四、执行JS函数
1.用Navigate
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");
待续
c# webBrowser全掌握的更多相关文章
- 获取WebBrowser全cookie 和 httpWebRequest 异步获取页面数据
获取WebBrowser全cookie [DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true) ...
- C# webbrowser全掌握(二)
全篇引用单元mshtml; 路径:C:\windows\assembly\GAC\Microsoft.mshtml\7.0.3300.0__b03f5f7f11d50a3a\Microsoft.msh ...
- webBrowser中操作网页元素全攻略
原文 webBrowser中操作网页元素全攻略 1.获取非input控件的值: webBrowser1.Document.All["控件ID"].InnerText; 或webBr ...
- winform窗体控件(全)
回顾跟补充下除了昨天那常用6个其他的winform窗体控件作用 1:Button:按钮 (1)AutoSize:如果是True的情况下,内容将会撑开:False的话会另起一行 (2)Enabled: ...
- CozyRSS开发记录6-继续补全订阅内容栏
CozyRSS开发记录6-继续补全订阅内容栏 1.订阅内容栏布局 按照之前的原型图,把订阅内容栏分成三块.Xaml如下: 2.照葫芦画瓢,完成头部和列表 头部依然使用ColorZone,右侧再放两个按 ...
- .NET4.5 WFP中用WebBrowser获取/操作网页html代码
引言 想给自己之前写的网页小说爬虫程序更新换代,之前一直是用winform的形式写的程序,因此这一次更新打算把UI换成WPF(因为听说WPF很漂亮),顺便也以此引入WPF的学习. 那么作为网页爬虫程序 ...
- delphi中webbrowser的用法
WebBrowser1.GoHome; //到浏览器默认主页 WebBrowser1.Refresh; //刷新 WebBrowser1.GoBack; //后退 WebBrowser1.GoForw ...
- javascript小技巧(非常全)
事件源对象 event.srcElement.tagName event.srcElement.type 捕获释放 event.srcElement.setCapture(); event.srcE ...
- 基于Chromium构建Chrome WebBrowser for .net 控件(还有点心得体会)
http://blog.csdn.net/lllllllllluoyi/article/details/8540054 首先向360说句sorry,在2011年360极速浏览器出现的时候我去他们论坛里 ...
随机推荐
- About the test in development
Unit test: Specify and test one point of the contract of single method of a class. This should have ...
- 让使用SQLite的.NET应用自适应32位/64位系统
如果一个.NET应用要自适应32位/64位系统,只需要在项目的“目标平台”设置为“Any CPU”.但是如果应用中使用了SQLite,情况就不同了. SQLite的.NET开发包来自是System.D ...
- 短小而精悍的JsvaScript函数
1. 回到顶部, 使用浏览器的刷新频率 requestAnimationFrame 来实现的 const scrollToTop = () => { const c = document.doc ...
- react:路由登陆后才能访问的控制
react-router 通过创建一个 需要认证的路由 来限制登陆后才能访问. 官方例子:https://reacttraining.com/react-router/web/example/auth ...
- 洛谷 5291 [十二省联考2019]希望(52分)——思路+树形DP
题目:https://www.luogu.org/problemnew/show/P5291 考场上写了 16 分的.不过只得了 4 分. 对于一个救援范围,其中合法的点集也是一个连通块. 2n 枚举 ...
- java中==与equals
== ==可用于比较基本类型与引用类型,对于基本类型变量比较的是其存储的值是否相等,对于引用类型则比较的是其是否指向同一个对象. 如: int a = 10; int b = 20; double d ...
- spark集群使用hanlp进行分布式分词操作说明
本篇分享一个使用hanlp分词的操作小案例,即在spark集群中使用hanlp完成分布式分词的操作,文章整理自[qq_33872191]的博客,感谢分享!以下为全文: 分两步: 第一步:实现han ...
- MVC4.0,并完美结合Razor引擎
本文主要解决“当前上下文不存在ViewBag”的问题, 在View视图实际使用过程中,如果引用不正确会提示“当前上下文不存在ViewBag”,首先需要引入“Microsoft.CSharp”类库 然后 ...
- Git-.gitignore配置
.gitignore文件配置:keil工程文件类型模板 # reference to Keil->help->µVision User's Guide->Appendix->B ...
- Swoole来实现实时异步任务队列
假如要发100封邮件,for循环100遍,用户直接揭竿而起,什么破网站!但实际上,我们很可能有超过1万的邮件.怎么处理这个延迟的问题?答案就是用异步.把“发邮件”这个操作封装,然后后台异步地执行1万遍 ...