一、获取网页源代码

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全掌握的更多相关文章

  1. 获取WebBrowser全cookie 和 httpWebRequest 异步获取页面数据

    获取WebBrowser全cookie [DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true) ...

  2. C# webbrowser全掌握(二)

    全篇引用单元mshtml; 路径:C:\windows\assembly\GAC\Microsoft.mshtml\7.0.3300.0__b03f5f7f11d50a3a\Microsoft.msh ...

  3. webBrowser中操作网页元素全攻略

    原文 webBrowser中操作网页元素全攻略 1.获取非input控件的值: webBrowser1.Document.All["控件ID"].InnerText; 或webBr ...

  4. winform窗体控件(全)

    回顾跟补充下除了昨天那常用6个其他的winform窗体控件作用 1:Button:按钮 (1)AutoSize:如果是True的情况下,内容将会撑开:False的话会另起一行 (2)Enabled: ...

  5. CozyRSS开发记录6-继续补全订阅内容栏

    CozyRSS开发记录6-继续补全订阅内容栏 1.订阅内容栏布局 按照之前的原型图,把订阅内容栏分成三块.Xaml如下: 2.照葫芦画瓢,完成头部和列表 头部依然使用ColorZone,右侧再放两个按 ...

  6. .NET4.5 WFP中用WebBrowser获取/操作网页html代码

    引言 想给自己之前写的网页小说爬虫程序更新换代,之前一直是用winform的形式写的程序,因此这一次更新打算把UI换成WPF(因为听说WPF很漂亮),顺便也以此引入WPF的学习. 那么作为网页爬虫程序 ...

  7. delphi中webbrowser的用法

    WebBrowser1.GoHome; //到浏览器默认主页 WebBrowser1.Refresh; //刷新 WebBrowser1.GoBack; //后退 WebBrowser1.GoForw ...

  8. javascript小技巧(非常全)

    事件源对象 event.srcElement.tagName event.srcElement.type 捕获释放 event.srcElement.setCapture();  event.srcE ...

  9. 基于Chromium构建Chrome WebBrowser for .net 控件(还有点心得体会)

    http://blog.csdn.net/lllllllllluoyi/article/details/8540054 首先向360说句sorry,在2011年360极速浏览器出现的时候我去他们论坛里 ...

随机推荐

  1. vue的watcher 关于数组和对象

    数组 不能被监听到的情况 1.直接下标赋值(但对象直接修改原有属性值可以渲染视图,虽然也监听不到) 2.修改数组length 解决方法: this.$set(this.arr,index,val) p ...

  2. MySQL中or与in

    and和or mysql允许多个where子句,用and和or可以使用多个子句.and比or有更高的优先级.任何时候使用and和or都应使用圆括号操作符来明确的分组操作. in 圆括号在where子句 ...

  3. NALU数据打RTP包流程详解

    最近在看RTP发送H264数据的文章,感觉很乱,没有比较清晰易懂的教程,自己整理了一下各种资料,备忘! --------Part A  ---- 先说说H264数据,H264在网络传输的是NALU(N ...

  4. SimpleEntity

    项目地址 :  https://github.com/kelin-xycs/SimpleEntity SimpleEntity 一个 用 C# 实现的 简单的 持久层 Entity 实现 . 这是一个 ...

  5. bzoj 2806 [Ctsc2012]Cheat——广义后缀自动机+单调队列优化DP

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2806 只想着怎么用后缀数据结构做,其实应该考虑结合其他算法. 可以二分那个长度 L .设当前 ...

  6. JFrame包含的容器(JRootPane)

    JFrame对象创建后,此对象包含JRootPane类型的容器.JRootPane 下有GlassPane,  和  LayeredPane,LayeredPane下又有ContentPane ,   ...

  7. SpringBoot 项目创建网站

    https://start.spring.io/

  8. windows的消息传递--消息盒子

    例如对windows发消息让文本选中.     SendMessage(Text1.hwnd,EM_GETSEL,0,-1 ); EC_LEFTMARGIN(&H1) EC_USEFONTIN ...

  9. python的Socket网络编程

    计算机网络: 多台独立的计算机用网络通信设备连接起来的网络.实现资源共享和数据传递.比如,我们之前的学过的知识可以将D盘的一个文件传到C盘,但如果你想从你的电脑传一个文件到我的电脑上目前是做不到的; ...

  10. ALGO-18_蓝桥杯_算法训练_单词接龙(搜索)

    问题描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙”中出现两次),在两个单词相连时,其重合 ...