模拟操作网页 webBrowser
C# 获取IFrame中body元素 (winform)
方法1.
找出iframe的b.html的src , 利用webbrowser去加载b.html
HtmlElementCollection a = webBrowser1.Document.All["loginframe"].GetElementsByTagName("iframe");
foreach (HtmlElement kk in a)
{
textBox1.Text = kk.GetAttribute("src");
}
或者
webBrowser1.Document.GetElementById("iframe的id").GetAttribute("src");
webBrowser1.Navigate("src");
方法2.
使用 frame的 document
webBrowser1.Document.Window.Frames["login_ifr"].Document;
方法只是抛砖引玉,大家自己去专研去把 转自:http://hi.baidu.com/dingding3224/item/8060946dac3de5166895e6d4
HtmlDocument doc = webBrowser1.Document.Window.Frames["centerframe"].Document;
doc.GetElementById("code").InnerText = "";
HtmlElement he = null;
he = doc.GetElementById("btnSearch");
he.InvokeMember("Click");
在使用Webbrowser时,经常会遇到网页没有加载完成就进一步进行操作,这样不但取不到控件或数据,而且会报错,这里在网上找两个一个函数,对Webbrowser加载进行等待,加载好后再进行处理:
private void Delay(int Millisecond) //延迟系统时间,但系统又能同时能执行其它任务;
{
DateTime current = DateTime.Now;
while (current.AddMilliseconds(Millisecond) > DateTime.Now)
{
Application.DoEvents();//转让控制权
}
return;
}
private bool WaitWebPageLoad(WebBrowser WEB)
{
int i = ;
string sUrl;
while (true)
{
Delay(); //系统延迟50毫秒,够少了吧!
if (WEB.ReadyState == WebBrowserReadyState.Complete) //先判断是否发生完成事件。
{
if (!WEB.IsBusy) //再判断是浏览器是否繁忙
{
i = i + ;
if (i == ) //为什么 是2呢?因为每次加载frame完成时就会置IsBusy为false,未完成就就置IsBusy为false,你想一想,加载一次,然后再一次,再一次...... 最后一次.......
{
sUrl = WEB.Url.ToString();
if (sUrl.Contains("res")) //这是判断没有网络的情况下
{
return false;
}
else
{
return true;
}
}
continue;
}
i = ;
}
}
}
下面是处理网页元素的代码示例:
private void GetSearchPage()
{
try
{
WebBrowser mainwb = new WebBrowser();
Navigate(mainwb, strAddress);
//加载完后获取查询页
WaitWebPageLoad(mainwb); HtmlDocument doc = mainwb.Document;
HtmlElement he = null;
he = doc.GetElementById("da");
he.InvokeMember("Click");
//输入数据进行查询
WaitWebPageLoad(mainwb);
HtmlDocument doc3 = mainwb.Document.Window.Frames["centerframe"].Document;
doc3.GetElementById("code").InnerText = "";
//doc.GetElementById("j_password").InnerText = textBox2.Text;
//doc.GetElementById("j_captcha").InnerText = textBox3.Text;
HtmlElement he3 = null;
he3 = doc3.GetElementById("btnSearch");
he3.InvokeMember("Click");
//获取查询出来的超链接
WaitWebPageLoad(mainwb);
HtmlDocument doc1 = mainwb.Document.Window.Frames["centerframe"].Document; HtmlElementCollection hec = doc1.GetElementsByTagName("TD");
ArrayList arrHref = new ArrayList();
arrHref.Clear();
//string a = "";
for (int i = ; i < hec.Count; i++)
{
if (hec[i].InnerHtml != null)
{
//hec[i].InvokeMember("Click");
if (hec[i].InnerHtml.ToString().Contains("href"))
{
string href = hec[i].InnerHtml.ToString(); arrHref.Add(href.Substring(href.IndexOf("href") + , href.LastIndexOf("\">") - - href.IndexOf("href"))); }
}
}
foreach (string href in arrHref)
{
WebBrowser Datawb = new WebBrowser();
Navigate(Datawb, strAddress + href);
WaitWebPageLoad(Datawb);
HtmlDocument doca = null;
doca = Datawb.Document;
string b = doca.GetElementById("txtITEMcode").InnerText;
arrReturn.Add(b);
//GetOneRecord();
//webBrowser2.Navigate(Str_Websit);
//Datawb.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(GetOneRecord);
} }
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
模拟操作网页 webBrowser的更多相关文章
- webBrowser中操作网页元素全攻略
原文 webBrowser中操作网页元素全攻略 1.获取非input控件的值: webBrowser1.Document.All["控件ID"].InnerText; 或webBr ...
- jquery模拟操作——trigger()函数
在页面中很多效果需要触发才能实现,比如click后的弹窗.但有时我们无法点击或是跳过用户触发,就像网页中那些可恶的广告弹窗 trigger函数可以实现模拟操作.譬如常用的点击动作,我们可以这样, $( ...
- 第一百七十一节,jQuery,高级事件,模拟操作,命名空间,事件委托,on、off 和 one
jQuery,高级事件,模拟操作,命名空间,事件委托,on.off 和 one 学习要点: 1.模拟操作 2.命名空间 3.事件委托 4.on.off 和 one jQuery 不但封装了大量常用的事 ...
- jQuery中的模拟操作
jQuery中的模拟操作主要是通过trigger来触发,相当于页面加载完成后不需要用户点击按钮,就可以自动触发页面中的相关事件. trigger(type,[data])可以用来模拟触发自定义事件的触 ...
- VBS脚本和HTML DOM自动操作网页
VBS脚本和HTML DOM自动操作网页 2016-06-16 10:24 1068人阅读 评论(0) 收藏 举报 分类: Windows(42) 版权声明:本文为博主原创文章,未经博主允许不得转 ...
- adb模拟操作之event
首语: 我们都知道,adb可以对模拟器和root过的真机进行很多操作,例如:模拟点击,输入,截图,手机和PC,数据互传等.这篇要说的就是adb操作模拟器或者真机的输入输出. 0x01 问题 使用adb ...
- 剑指Offer——Java实现栈和队列的互模拟操作
剑指Offer--Java实现栈和队列的互模拟操作 栈模拟队列 题目:JAVA实现用两个栈来实现一个队列,完成队列的Push和Pop操作.队列中的元素为int类型. 思路:其实就是把队列正常入 ...
- jQuery 模拟操作
1.常用模拟 有时,需要通过模拟用户操作,来达到单击的效果.例如在用户进入页面后,就触发 click 事件,而不需要用户去主动单击.在 jQuery 中,可以使用 trigger() 方法完成模拟操作 ...
- Python实训day07pm【Selenium操作网页、爬取数据-下载歌曲】
练习1-爬取歌曲列表 任务:通过两个案例,练习使用Selenium操作网页.爬取数据.使用无头模式,爬取网易云的内容. ''' 任务:通过两个案例,练习使用Selenium操作网页.爬取数据. 使用无 ...
随机推荐
- 微信电脑版即将到来了 安装QQ浏览器微信版体验吧
之前说过在手机上微信打字慢,tx最终还是想开了,最近TX邀请测试微信电脑版,想要尝鲜的朋友可以去exp.qq.com申请QQ浏览器微信版体验,不过体验将要结束了,相信正式版很快就要出来了.[微信网页版 ...
- sql批量更换dedecms文章来源和作者
前面写了一篇修改dedecms默认文章来源 "未知"改为关键词,那个是修改以后发布的文章“来源”才会变成自己设定的关键词,如果修改之前已经有很多文章了,那些文章“来源”还是显示“未 ...
- WPF:自定义路由事件的实现
路由事件通过EventManager,RegisterRoutedEvent方法注册,通过AddHandler和RemoveHandler来关联和解除关联的事件处理函数:通过RaiseEvent方法来 ...
- jquery 表单清空
$(':input','#myform') .not(':button, :submit, :reset, :hidden') .val('') .removeAttr('checked') .rem ...
- flexbox-CSS3弹性盒模型flexbox完整版教程
原文链接:http://caibaojian.com/flexbox-guide.html flexbox-CSS3弹性盒模型flexbox完整版教程 A-A+ 前端博客•2014-05-08•前端开 ...
- 弹窗插件 popup.js 完美修正版
作为信息展示弹出窗口,很有用!是一个js插件,不是jQuery插件! 地址:http://img.jb51.net/online/popup/popup.html
- [Effective JavaScript 笔记]全书总结
这本书中就像它前言中说的那样,这本书不是给初学者的.需要一定的基础,而且有一定的编码实践,才能很好的理解书里讲到的内容.学习一门编程语言,需要熟悉它的语法.形式和结构,这样才会编写合法的.符合语义的. ...
- [HDU2089]不要62
[HDU2089]不要62 试题描述 杭州人称那些傻乎乎粘嗒嗒的人为62(音:laoer).杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来,就 ...
- echarts
ECharts,缩写来自Enterprise Charts,商业级数据图表,一个纯Javascript的图表库,可以流畅的运行在PC和移动设备上,兼容当前绝大部分浏览器(IE6/7/8/9/10/11 ...
- poj3984
定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, ...