问一个不算难也不算太简单的问题,在线等,在线等啊!!!!!!

generhappy 2010-10-20 04:52:02
目前软件是winfrom,里面有一个webBrowser1,webBrowser1里面是一个框架结构的网页,其中的一个框架里的网页是百度,现在wenfrom有个textbox和一个按钮,想实现在textbox中输入问题,然后点击winfrom上的按钮就能直接在这个百度中查询!

如果不是框架结构的,下面这个代码就能完成

string a = textBox1.Text;
HtmlDocument hd = this.webBrowser1.Document;
HtmlElement he = hd.GetElementById("kw");
HtmlElement he2 = hd.GetElementById("su");
he.SetAttribute("value",a);
HtmlElement ele = hd.GetElementById("su");
ele.InvokeMember("Click");


如果是框架结构的网页,我查了资料,有如下代码,但是无法实现功能

HTMLDocument doc = (HTMLDocument)webBrowser1.Document.DomDocument;
object index = 1;
IHTMLWindow2 frame1 = (IHTMLWindow2)doc.frames.item(ref index);
HTMLDocument doc1 = (HTMLDocument)frame1.document;
IHTMLElement title_txt = (IHTMLElement)doc1.getElementById("kw");
//IHTMLElement body_txt = (IHTMLElement)doc1.getElementById("su");
IHTMLElement button_tj = (IHTMLElement)doc1.getElementById("su");
//if (title_txt == null || button_tj == null)
// return;
title_txt.setAttribute("value", this.textBox1.Text, 0);
//body_txt.setAttribute("value", this.richTextBox1.Text, 0);
button_tj.click();
...全文
255 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
generhappy 2010-10-21
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 zhangming64432 的回复:]
HtmlElement kw = webBrowserHyfp.Document.All["kw"]; //获得百度里面的文本框
HtmHtmlElement btnSubmit = webBrowserHyfp.Document.All["su"]; //获得百度里面的搜索按钮
kw.SetAttribute("value", txt_Box.text); //给百度里面的文本框附上winf……
[/Quote]

这样在没有框架的页面是可以的,如果有框架,就不能行了。。
zhangming64432 2010-10-21
  • 打赏
  • 举报
回复
HtmlElement kw = webBrowserHyfp.Document.All["kw"]; //获得百度里面的文本框
HtmHtmlElement btnSubmit = webBrowserHyfp.Document.All["su"]; //获得百度里面的搜索按钮
kw.SetAttribute("value", txt_Box.text); //给百度里面的文本框附上winform里面输入的值
btnSubmit.InvokeMember("click"); //触发百度的按钮事件

楼主可以试试这样些行不行。
generhappy 2010-10-21
  • 打赏
  • 举报
回复
首先谢谢楼上各位大大,小弟还是不太懂,目前就想在代码的基础上做改动,或者,我要用的那个框架的名字叫做main,整个页面上有3个框架,top一个,下面左右两个,main是右面的。。。

HTMLDocument doc = (HTMLDocument)webBrowser1.Document.DomDocument;
object index = 1;
IHTMLWindow2 frame1 = (IHTMLWindow2)doc.frames.item(ref index);
HTMLDocument doc1 = (HTMLDocument)frame1.document;
IHTMLElement title_txt = (IHTMLElement)doc1.getElementById("kw");
//IHTMLElement body_txt = (IHTMLElement)doc1.getElementById("su");
IHTMLElement button_tj = (IHTMLElement)doc1.getElementById("su");
title_txt.setAttribute("value", this.textBox1.Text, 0);
button_tj.click();
fengyuananan 2010-10-21
  • 打赏
  • 举报
回复
你能把你的文本框和百度的文本框绑定起来不,可以的话就好办了,其他还不知道有什么方法。。。
闲着吃菜 2010-10-21
  • 打赏
  • 举报
回复
wuyq11 2010-10-20
  • 打赏
  • 举报
回复
lonyjianhui 2010-10-20
  • 打赏
  • 举报
回复
用模拟表单的方法:
1,获取表单框架:e.g:
HtmlDocument doc = wb.Document;
HtmlElementCollection all = doc.All;
HtmlElement post = null;
2,获取POST数据,在百度网页源码找到百度那个输入搜索信息的框并把你的工程的textbox的值赋给它:e.g:

for (int i = 0; i < all.Count; i++)
{
if (all[i].TagName.ToLower().Equals("input") && all[i].Name.Equals("wd"))
{
post = all[i];
}
if(all[i].Id.Equals("kw"))
{
post = all[i];
all[i].InnerText = textbox.text.trim();
}
}
4.找到搜索按钮“百度一下”模拟点击:
if (post != null)
{
post.InvokeMember("click");
}

随便谢谢,有很多地方你自己可以改进。
WM_JAWIN 2010-10-20
  • 打赏
  • 举报
回复
有框架的,同一个域才可以,跨域就完蛋了。没有权限。
yangjinCK 2010-10-20
  • 打赏
  • 举报
回复
去问问百度的工作人员
哈哈
generhappy 2010-10-20
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 secretgarden 的回复:]
获取用户输入的 keyword,然后将 webBrowser1 的 URL 指定为:
http://www.baidu.com/s?wd=keyword
[/Quote]
还是不要用这种方法好,就是想透过框架获取控件ID,有什么方法么,最好有代码,谢谢了!
mark620 2010-10-20
  • 打赏
  • 举报
回复
zjx198934 2010-10-20
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 secretgarden 的回复:]
获取用户输入的 keyword,然后将 webBrowser1 的 URL 指定为:
http://www.baidu.com/s?wd=keyword
[/Quote]
这样可以!但是要注意符号的编码! 想#这样的url关键字要换成%23 +换成%2B等!
jaydawson 2010-10-20
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 secretgarden 的回复:]

获取用户输入的 keyword,然后将 webBrowser1 的 URL 指定为:
http://www.baidu.com/s?wd=keyword
[/Quote]

支持4楼。
这种解法应该是最直接的。。
generhappy 2010-10-20
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wuyazhe 的回复:]
能给个客户端直接复制粘贴成html的没。不懂web..
[/Quote]

晕,这就是全部代码了啊。。。。。
SecretGarden 2010-10-20
  • 打赏
  • 举报
回复
获取用户输入的 keyword,然后将 webBrowser1 的 URL 指定为:
http://www.baidu.com/s?wd=keyword
兔子-顾问 2010-10-20
  • 打赏
  • 举报
回复
能给个客户端直接复制粘贴成html的没。不懂web..
generhappy 2010-10-20
  • 打赏
  • 举报
回复
这个是框架也的代码,其中Default7是百度

<form id="form1" runat="server">
<meta http-equiv=Content-Type content=text/html;charset=gb2312>
<div>
<frameset rows="64,*" frameborder="NO" border="0" framespacing="0">
<frame src="Default10.aspx" noresize="noresize" frameborder="NO" name="topFrame" scrolling="no" marginwidth="0" marginheight="0" target="main" />
<frameset cols="200,*" rows="560,*" id="frame">
<frame src="Default9.aspx" name="leftFrame" noresize="noresize" marginwidth="0" marginheight="0" frameborder="0" scrolling="no" target="main" />
<frame src="Default7.aspx" name="main" marginwidth="0" marginheight="0" frameborder="0" scrolling="auto" target="_self" />
</frameset>
</div>
</form>
兔子-顾问 2010-10-20
  • 打赏
  • 举报
回复
如果是框架的。你贴一下你测试的网址或网页代码。

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧