webbrowser控件如何访问如下页面的元素

hrbzhj 2011-05-26 09:06:08
在vb编程中,现在要用webbrowser这个控件访问网页,
网页的部分代码后附。
现在想用这个控件访问这部分代码中的元素“userID”,并给这个input元素赋值“123”
不知道下面的代码是否有frame框架,
目前无法取出这个userID的名称,
听说不在同一个域就不能访问了,那下面的代码是不在同一个域么?
难道就没有别的什么办法能够访问了么?
我试着写了几句代码,都无法实现这个功能,
例如:
(1)txtCode.Text =wbsIe.Document.Forms("frm").userID.setAttribute("value", txtID.Text)
(2)想到其中有frame框架,可是只能查到三个框架,都不是所要找的内容。
(3)网上找说有域的区别,可是实在是弄不明白。

下面贴出部分网页的代码,有哪位高手知道的请告知,多谢啦。
=======================================================================================
<script language="JavaScript">
if (parent.frames['annotation'])
parent.frames['annotation'].location = '';
</script>
<html>
<head>
<title>

</title>
</head>

<body bgcolor="white">

<html>
<head>
<title >用户档案管理</title>
<script language=JavaScript src="/dljzgr/jsp/input.js"></script>
<link href="/dljzgr/jsp/input.css" rel="stylesheet" type="text/css">

<script language="javascript">
<!--

function trundef(val)
{
if(val == null)
{
return "";
}
else
return val;
}

function getQuery()
{
var val;
val = trundef(getElementValue(frm.userType));
frm.p_userType.value=val;
val = trundef(getElementValue(frm.transfer));
frm.p_transfer.value = val;
val = trundef(getElementValue(frm.branch));
frm.p_fgs.value = val;
val = trundef(getElementValue(frm.trustbranch));
frm.p_wgs.value=val;
frm.p_q.value = trundef(getElementValue(frm.q));
return true;

}
function add()
{
return true;
}

function init(){

var val = window_onload();
}

-->
</script>

</head>

<body language="javascript" onload="return init()">
<FORM action="userlist?opstatus=X" id="frm" method="post" >
<INPUT type="HIDDEN" name="actiontype" value ="LIST_USER">
<INPUT type="HIDDEN" name="p_operatorID" value ="000016">
<INPUT type="HIDDEN" name="p_userType">
<INPUT type="HIDDEN" name="p_stokeHold">
<INPUT type="HIDDEN" name="p_transfer">
<INPUT type="HIDDEN" name="p_fgs">
<INPUT type="HIDDEN" name="p_wgs">
<INPUT type="HIDDEN" name="p_q">
<INPUT type="HIDDEN" name="ops" value="X">

<H1 class="h1font" style="text-align: center">用户信息检索</H1>
<HR>
<div class="labelDiv" style="left: 10; top: 100; width: 70;">
<A class="labeltext">用户编号:</A>
</div>
<div class="controlDiv" style="left:80;top:100;width:90">
<input id="userID" attrib="editor" name="userID" size="10" >
</div>
<div class="labeldiv" style="left:180;top:100;width:80;">
<A class="labeltext">产权人姓名:</A>
</div>
<div class="controlDiv" style="left:260;top:100;width:190">
<input attrib="editor" name="userName" value="" size="25" maxlength="30">
</div>
。。。。。。
。。。。。。
===============================================================================
以上是网页的部分源码,请高手帮着分析一下喽,不胜感激,解决问题的,百分送上。。
...全文
145 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
hrbzhj 2011-05-26
  • 打赏
  • 举报
回复
对,问题在这个frames(1)上,
menutree这个是网页打开后的左侧的列表,我现在就是要在左侧列出的内容上点击一个菜单后,
在右侧出现的所有元素中查找其中的一个元素。
明白么?
hrbzhj 2011-05-26
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 sysdzw 的回复:]
txtCode.Text = wbsIe.Document.frames(1).document.body.innerhtml
[/Quote]
用这个语句得到如下三段代码,分别列示如下:
==============================================================================
frames(1)的时候的代码如下:
<FRAME src="MenuTree.jsp" name=Left><FRAME src="about:blank" name=moonpiazza>
==============================================================================
frames(2)的时候的代码如下:
<DIV align=center><IMG src="/dljzgr/images/js.gif" width=421 height=47> </DIV>
==============================================================================
frames(0)的时候代码最多,也列示如下了:
<DIV align=left>
<TABLE border=0 cellSpacing=0 cellPadding=0 width=753 height=60>
<TBODY>
<TR>
<TD width=152>
<DIV align=center>
<OBJECT codeBase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0" classid=clsid:D27CDB6E-AE6D-11cf-96B8-444553540000 width=87 height=70><PARAM NAME="_cx" VALUE="2301"><PARAM NAME="_cy" VALUE="1852"><PARAM NAME="FlashVars" VALUE=""><PARAM NAME="Movie" VALUE="/dljzgr/images/biao1.swf"><PARAM NAME="Src" VALUE="/dljzgr/images/biao1.swf"><PARAM NAME="WMode" VALUE="Window"><PARAM NAME="Play" VALUE="-1"><PARAM NAME="Loop" VALUE="-1"><PARAM NAME="Quality" VALUE="High"><PARAM NAME="SAlign" VALUE=""><PARAM NAME="Menu" VALUE="-1"><PARAM NAME="Base" VALUE=""><PARAM NAME="AllowScriptAccess" VALUE=""><PARAM NAME="Scale" VALUE="ShowAll"><PARAM NAME="DeviceFont" VALUE="0"><PARAM NAME="EmbedMovie" VALUE="0"><PARAM NAME="BGColor" VALUE=""><PARAM NAME="SWRemote" VALUE=""><PARAM NAME="MovieData" VALUE=""><PARAM NAME="SeamlessTabbing" VALUE="1"><PARAM NAME="Profile" VALUE="0"><PARAM NAME="ProfileAddress" VALUE=""><PARAM NAME="ProfilePort" VALUE="0"><PARAM NAME="AllowNetworking" VALUE="all"><PARAM NAME="AllowFullScreen" VALUE="false">

<embed src="/dljzgr/images/biao1.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="141" height="112"></embed></OBJECT></DIV></TD>
<TD width=601>
<DIV align=right><IMG src="/dljzgr/images/logo.gif" width=469 height=73></DIV></TD></TR></TBODY></TABLE></DIV>
<DIV style="POSITION: absolute; WIDTH: 240px; HEIGHT: 27px; TOP: 3px; LEFT: 780px">
<MARQUEE style="BORDER-BOTTOM: blue 2px solid; BORDER-LEFT: blue 2px solid; BORDER-TOP: blue 2px solid; BORDER-RIGHT: blue 2px solid" id=scrolltext onmouseover=this.stop() onmouseout=this.start() direction=up height=65 width="100%" scrollAmount=1 scrollDelay=10 name="scrolltext"><BR>以最饱满的工作热情迎接下一个节日吧!</MARQUEE></DIV>
<SCRIPT language=javascript>
<!--
refresh();
var timeoutid = setInterval("refresh()",5*60*1000);
-->
</SCRIPT>
==============================================================================
frames(3)就没有了,就是三个框架,再帮着分析一下吧,
我怎么找不到我要的userID呢?这三个里好像都没有啊?
无·法 2011-05-26
  • 打赏
  • 举报
回复
txtCode.Text = wbsIe.Document.frames(1).document.body.innerhtml
my202com4 2011-05-26
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 sysdzw 的回复:]
引用 2 楼 sysdzw 的回复:

引用楼主 hrbzhj 的回复:
在vb编程中,现在要用webbrowser这个控件访问网页,
网页的部分代码后附。
现在想用这个控件访问这部分代码中的元素“userID”,并给这个input元素赋值“123”
不知道下面的代码是否有frame框架,
目前无法取出这个userID的名称,
听说不在同一个域就不能访问了,那下面的代码是不在同一个……
[/Quote]
重新申请ID是因为那个不是我的帐号,
document.body.innerhtml
我怎么用这个语句呢?
txtCode.Text = wbsIe.Document.body.innerhtml
我这么写的语句,里面的内容如下
<FRAME src="/dljzgr/jsp/tree/MainFrame_top.htm" name=topFrame><FRAME src="/dljzgr/jsp/tree/MainFrame.htm" name=Frame><FRAME noResize src="/dljzgr/jsp/tree/MainFrame_bottom.htm" name=bottomFrame scrolling=no>
这能说明什么呢?我应该再怎么写呢?
是不是应该在mainframe.htm里呢?可是打开这个文件,里面也没有啊,
怎么才能找到呢?真奇怪。
无·法 2011-05-26
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 sysdzw 的回复:]

引用楼主 hrbzhj 的回复:
在vb编程中,现在要用webbrowser这个控件访问网页,
网页的部分代码后附。
现在想用这个控件访问这部分代码中的元素“userID”,并给这个input元素赋值“123”
不知道下面的代码是否有frame框架,
目前无法取出这个userID的名称,
听说不在同一个域就不能访问了,那下面的代码是不在同一个域么?
难道就没有别的什么办法能够访问了……
[/Quote]貌似内部网的,等登陆才行。所以你把三层frame依次发在下面吧。代码获得的方法建议用document.body.innerhtml不要去右击查看,那个没用的。

frame1:

frame2:

frame3:
无·法 2011-05-26
  • 打赏
  • 举报
回复
[Quote=引用楼主 hrbzhj 的回复:]
在vb编程中,现在要用webbrowser这个控件访问网页,
网页的部分代码后附。
现在想用这个控件访问这部分代码中的元素“userID”,并给这个input元素赋值“123”
不知道下面的代码是否有frame框架,
目前无法取出这个userID的名称,
听说不在同一个域就不能访问了,那下面的代码是不在同一个域么?
难道就没有别的什么办法能够访问了么?
我试着写了几句代码,都无法实现……
[/Quote]
你为什么又重新申请个id发帖呢?http://topic.csdn.net/u/20110525/14/fdcdb1f2-ab8f-4e1e-bdc4-f6f5a3b05e71.html?49479

复制另外一个帖子的回复:

引用 13 楼 my202com4 的回复:

引用 11 楼 sysdzw 的回复:
第一层网页的源码是什么呢?
用msgbox wbsIe.Document.frames(1).document.body.innerHTML看看得到的是你所说的网页么?默认第一个frame下标是从0开始访问的。

第一层网页的源码里没有我要的元素的名称,这个元素到底在哪呢?
根本就没有所以你操作当然失败了。你把3层的页面代码都发上来看看,说不定每一层下面又有好几层frame呢,干脆直接发网址吧,这样发来发去你又描述不清楚大家也就没法准确回答太浪费时间了。


附加:得到页面源代码的方式有两个,如果你用的是右击查看页面代码那么基本没用那个是原始的,因为js会修改很多东西,当前页面的已经不是原始的了。所以你给出网址吧,有什么机密信息吗??
simon__sun 2011-05-26
  • 打赏
  • 举报
回复
把网页连接给出来
无·法 2011-05-26
  • 打赏
  • 举报
回复
wbsIe.Document.frames(1).document.frames(1).document.getElementById("userID").value="123"

你该不会以为看到frame就以为跨域了吧?你去找找网页跨域的定义,跨域是两个主机之间的。
hrbzhj 2011-05-26
  • 打赏
  • 举报
回复
wbsIe.Document.frames(1).Document.frames(1).Document.All("userID").Value = txtID.Text


ok了,可以结帐啦,多谢啦。
hrbzhj 2011-05-26
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 sysdzw 的回复:]
引用 7 楼 hrbzhj 的回复:

对,问题在这个frames(1)上,
menutree这个是网页打开后的左侧的列表,我现在就是要在左侧列出的内容上点击一个菜单后,
在右侧出现的所有元素中查找其中的一个元素。
明白么?
上面的代码你动脑筋思考了么?你有网页,对照着代码一看就明白了。我分析的0肯定就是顶部网址log、告示什么相关的。1的话才是工作区,2的话就是一个图片,没任何作用。……
[/Quote]
嘻嘻,这不是刚学么,好了,看到代码了,也看到要找的元素了,
可是我还应该怎么做给元素赋值呢?
这个不算是跨域的问题?
无·法 2011-05-26
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 hrbzhj 的回复:]

对,问题在这个frames(1)上,
menutree这个是网页打开后的左侧的列表,我现在就是要在左侧列出的内容上点击一个菜单后,
在右侧出现的所有元素中查找其中的一个元素。
明白么?
[/Quote]上面的代码你动脑筋思考了么?你有网页,对照着代码一看就明白了。我分析的0肯定就是顶部网址log、告示什么相关的。1的话才是工作区,2的话就是一个图片,没任何作用。

1的话里面又嵌套了两个frame,楼主你看到了么??
<FRAME src="MenuTree.jsp" name=Left><FRAME src="about:blank" name=moonpiazza>
得到上面这个代码时右边那个框框用肉眼都看不到吧?你应该点开后再得到这部分的源码,那么src="about:blank"应该是具体的某个网址了。这个部分的代码应该通过:txtCode.Text = wbsIe.Document.frames(1).document.frames(1).document.body.innerhtml来得到。拜托思考思考,不然会生锈的。

1,451

社区成员

发帖
与我相关
我的任务
社区描述
VB 控件
社区管理员
  • 控件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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