JS写的网页,怎么写点击的语句?

zydscaline 2009-05-17 07:04:30
一JS编写的网页,用VIEPAGE查看出的某个按钮源码:
<TD class=tablelstyle id=TD_ID_702 noWrap align=middle width=78>
<SCRIPT language=javwscript>

<!--
var aclass="cn_12px_white";
if(currentMenuName="702"){aclass="cn_12px_blue";}
document.writeln(" <a id=\"A_ID_702\" class="+aclass+"href=\"#\'onclick=\"javascript:FUNC_MENUBAR_MENU_CLICK('702','childmenu','','');
return false;\"> <center>申报 <center> <a>');
//-->
</SCRIPT>
<A class=cn_12px_white id=A_ID_702 onclick="javascript:FUNC_MENUBAR_MENU_CLICK('702',childmenu,'','',"
);return false;"href="#">
"> <center>申报 <center> </A> </TD>

就是点击这个“申报”出现下一个节点,我用
document.name="申报" then 点击不行 name=702或A_ID_702都不行
Set vDoc = WebBrowser1.Document vDoc.All("TD_ID_702").Click 也不中
vDoc.A_ID_702.click()还不行
应该怎么写点击它的代码??

要不那位高手说下怎么用VB直接把JS的语句运行?
...全文
483 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
马叔叔 2009-05-26
  • 打赏
  • 举报
回复
认真学习,不用VB用java可以吗?
谢谢!
zhiyongtu 2009-05-24
  • 打赏
  • 举报
回复
以上的ClickTheId函数具有一定通用性,可用于模拟任何HTML文档(或子文档)中的单击操作,只需传入对该文档(子文档)的引用及要单击元素的ID。如果在文档中找不到指定的元素,会尝试遍历其所有框架文档,找到指定ID的元素后即单击之。

但有两个问题需要注意:1、对于框架操作,由于存在“跨域”操作的可能性,而IE出于安全性的考虑对“跨域”访问默认是禁止的,所以可能找不到指定的元素,这取决于指定的元素与传入的文档之间是否存在“跨域”的问题以及它们之间的“跨域”信任状态;2、如果指定ID的元素不是A、Input等有单击意义的元素,即使该函数找到了对应元素并模拟了单击动作,也没有意义,比如一般情况下如果对一个P元素或者一个Div元素进行单击的话是没有意义的,只有对包含其中的A、Input等元素进行单击才有意义,如果要对包含其中的有单击意义的元素进行单击,请指定该有单击意义元素的ID或者对该函数的功能进行扩展以使函数也能自动查找其中的A等元素。
zydscaline 2009-05-24
  • 打赏
  • 举报
回复
谢谢,受教了,以后还请多多指教!!
zhiyongtu 2009-05-24
  • 打赏
  • 举报
回复
以下变量在模块级定义:
Private frmDenied  As Long

以下两个过程与上述变量放在一个模块中:
Private Sub Command2_Click()
Dim wbDoc As HTMLDocument
Dim blnClicked As Boolean, MyId as String
MyId = "A_ID_702"
frmDenied = 0
Set wbDoc = WebBrowser1.Document
If (Not wbDoc Is Nothing) And WebBrowser1.LocationURL <> "about:blank" Then
blnClicked = ClickTheId(wbDoc, MyId)
If blnClicked Then
MsgBox "The element was clicked.", , "Result"
Else
MsgBox "The element with the specified ID was not found." & _
IIf(frmDenied, "This could be caused by denied access." & _
vbCrLf & "Access to " & frmDenied & " frames was denied!", ""), vbExclamation, "Result"
End If
End If
End Sub

Function ClickTheId(TheDocument As HTMLDocument, TheId As String) As Boolean
Dim ElWithId As Object, oFrame As IHTMLWindow2, oDoc As HTMLDocument, i As Long, bClicked As Boolean
Set ElWithId = TheDocument.getElementById(TheId)
If Not ElWithId Is Nothing Then
On Error Resume Next
ElWithId.focus
On Error GoTo 0
ElWithId.Click
Set ElWithId = Nothing
ClickTheId = True
ElseIf TheDocument.frames.length > 0 Then
For i = 0 To TheDocument.frames.length - 1
Set oFrame = TheDocument.frames(i)
On Error Resume Next
Set oDoc = oFrame.Document
If Err.Number = 70 Then
frmDenied = frmDenied + 1
MsgBox "Error # " & Err.Number & ", " & Err.Description & vbCrLf & _
"Source: " & Err.Source, , "Error"
Else
bClicked = ClickTheId(oDoc, TheId)
If bClicked Then ClickTheId = True: Exit Function
End If
Next i
ClickTheId = False
Else
ClickTheId = False
End If
End Function

在WebBrowser1所在的Form上建一个按钮,命名为Command2,这样单击该按钮的时候就会触发上面的第一个过程进行事件处理;在第一个过程中将会调用后一个Function完成指定的模拟单击动作。

为了帮助你分析相关问题,有关MsbBox的信息提示部分我保留了,以后如果觉得不必要,可以根据需要将它们注释掉。
zhiyongtu 2009-05-24
  • 打赏
  • 举报
回复
狼兄的意思是把类似

<A class=cn_12px_white id=A_ID_702 onclick="javascript:FUNC_MENUBAR_MENU_CLICK('702',childmenu,'',''," 
);return false;"href="#">
"> <center>申报 <center> </A>


这样的元素定义HTML源码代入

html = 源代码

然后Split(html, "onclick=")将由onclick=分隔的各个部分全部取出放入数组,数组的第一个元素(下标为0)当然就是第一个onclick=左边的部分,在这个例子中就是
<A class=cn_12px_white id=A_ID_702 
而在这个例子中,第二个元素(下标为1)就是
"javascript:FUNC_MENUBAR_MENU_CLICK('702',childmenu,'','',"
);return false;"href="#">
"> <center>申报 <center> </A>

这第二个元素由Split(html, "onclick=")(1)便可得到。

然后再对第二个元素进行分隔抽取:
Split(Split(html, "onclick=")(1), """")
这一次是将"号作为分隔符来进行抽取,第一个元素就得到第一个"号左边的部分,即为空字符串,而第二个元素(下标为1)就为第一、二个"号之间的部分,即
javascript:FUNC_MENUBAR_MENU_CLICK('702',childmenu,'',''," );return false;
这就是Split(Split(html, "onclick=")(1), """")(1)的值,也即link的值

将这一字符串作为一个URL交给IE进行Navigate的时候,因为这一字符串是以javascript:开头,所以IE就把它识别为一行javascript语句,就执行之。

如果是把
document.writeln(" <a id=\"A_ID_702\" class="+aclass+"href=\"#\'onclick=\"javascript:FUNC_MENUBAR_MENU_CLICK('702','childmenu','',''); 
return false;\"> <center>申报 <center> <a>');

这个语句赋给html,得到的将是第一个onclick=之后的两个"号之间的部分,也即
javascript:FUNC_MENUBAR_MENU_CLICK('702','childmenu','','');
return false;\
多了一个\符号,前面的部分虽然能够得到执行,但恐怕会出一点小错误,因\符号即不是一个合法语句开始标识,也不是一个注释的开头,大概IE会报“无效的标识符”之类的小错误吧,但只要确定了,也无大碍。
zydscaline 2009-05-24
  • 打赏
  • 举报
回复
zhiyongtu这个放之四海而皆准的贴子肯定是好的,我的这个
http://topic.csdn.net/u/20090517/19/19503fd1-b1fe-430e-a54d-9c449e5cb5d1.html
贴子也能解决了,请去回下接分,这个贴子我等下狼兄的回复
liguicd 2009-05-24
  • 打赏
  • 举报
回复
学习了innnnnnnnnnnnng
zydscaline 2009-05-24
  • 打赏
  • 举报
回复
谢谢zhiyongtu的解说,但我想说对新手来说,句子是越少越好,你说的很好,菜鸟却有点儿感觉很难,相比之下,我觉得northwolves的回贴很好,

[Quote=引用 13 楼 northwolves 的回复:]
VB codeDimhtmlAsString, linkAsStringhtml=源代码
link=Split(Split(html,"onclick=")(1),"""")(1)
Webbrowser1.Navigate link
[/Quote]
在这儿我想问下二位link最后应该等于
\"javascript:FUNC_MENUBAR_MENU_CLICK('702','childmenu','','');return false;\"
还是要去掉双引号和\??
northwolves 2009-05-23
  • 打赏
  • 举报
回复
Dim html As String, link As String
html = 源代码
link = Split(Split(html, "onclick=")(1), """")(1)
Webbrowser1.Navigate link
zydscaline 2009-05-23
  • 打赏
  • 举报
回复
我愚钝,是应该这么写吗?
html=document.writeln(" <a id=\"A_ID_702\" class="+aclass+"href=\"#\'onclick=\"javascript:FUNC_MENUBAR_MENU_CLICK('702','childmenu','','')
zhiyongtu 2009-05-22
  • 打赏
  • 举报
回复
我看了一下,这个是框架集中的一个框架网页吧?那么主网页的代码呢?这个页面在框架中,当然不能直接从WebBrowser1.Document得到这个网页的Document的引用,用前面的方法当然就找不到对应的元素。

把包含框架集定义的主网页的代码发上来,并说明这个菜单网页所在的框架是哪一个。
zydscaline 2009-05-22
  • 打赏
  • 举报
回复
我来传源文件:
<META http-equiv=Content-Language content=zh-cn>
<META content="Microsoft FrontPage 6.0" name=GENERATOR>
<META content=FrontPage.Editor.Document name=ProgId>
<META http-equiv=Content-Type content="text/html; charset=GBK"><BASE target=contents><LINK href="pages/menu/style/style.css" type=text/css rel=stylesheet></HEAD>
<BODY text=#000000 leftMargin=0 topMargin=0 marginheight="0" marginwidth="0">
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD vAlign=top width="100%" background=pages/menu/files/top_bg.jpg height=73>
<TABLE cellSpacing=0 cellPadding=0 width=1005 align=left border=0>
<TBODY>
<TR>
<TD background=pages/menu/files/top01.jpg height=73>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD width="20%"> </TD>
<TD vAlign=top width="54%">
<DIV align=center>申报征收平台</DIV></TD>
<TD align=middle width="26%"> <A class=T_song12_wt href="../FirstPageAction.do?method=firstPage" target=_top><IMG height=14 src="pages/menu/files/m_02.gif" width=16 align=absBottom border=0><FONT color=#000000> 首页</FONT></A> <SPAN class=cn_12px_white> <A class=T_song12_wt onclick=closewin(); href="#" target=_top><IMG height=16 src="pages/menu/files/m_12.gif" width=16 align=absBottom border=0>  关闭 </A></SPAN></TD></TR>
<TR>
<TD> </TD>
<TD> </TD>
<TD> </TD></TR>
<TR>
<TD> </TD>
<TD colSpan=2 height=23>
<FORM name=MENU_FORM method=post></FORM>
<SCRIPT language=javascript>
<!--
var realSize = -1;
var count = -1;
var lastindex = -1;
function FUNC_MENUBAR_MENU_INIT(){
realSize = screen.width-0;
if (473>realSize){
realSize = realSize-0;
count = Math.floor((realSize+1)/79);
}
if (count != -1)
lastindex = 2 * count - 2;
}
var currentMenuName = "";
function FUNC_MENUBAR_MENU_CLICK(menuName, aimFrm, menuLocation, menuTarget){
var tdelement,aelement;
if (currentMenuName != ""){
tdelement=document.all("TD_ID_"+currentMenuName);
aelement=document.all("A_ID_"+currentMenuName);
if (tdelement != null)
tdelement.className = "table1style";
if (aelement != null)
aelement.className = "cn_12px_white";
}
currentMenuName = menuName;
tdelement=document.all("TD_ID_"+currentMenuName);
aelement=document.all("A_ID_"+currentMenuName);
if (tdelement != null)
tdelement.className = "table2style";
if (aelement != null)
aelement.className = "cn_12px_blue";
if (menuLocation != ""){
document.all("MENU_FORM").action="/webroot/sbzs/controller.do?location="+menuLocation+"&remove=";
document.all("MENU_FORM").target=menuTarget;
document.all("MENU_FORM").submit();
}
if (aimFrm != ""){
var aimobj = top.document.all(aimFrm);
var aimsrc = aimobj.src;
var index = aimsrc.indexOf("?", 0);
if (index == -1)
aimsrc = aimsrc + "?" + "parentName" + "=" + menuName;
else{
index = aimsrc.indexOf("parentName", index);
if (index == -1)
aimsrc = aimsrc + "&" + "parentName" + "=" + menuName;
else{
aimsrc = aimsrc.substring(0, index);
aimsrc = aimsrc + "parentName" + "=" + menuName;
}
}
aimobj.src=aimsrc;
}
}
document.onload=FUNC_MENUBAR_MENU_INIT();FUNC_MENUBAR_MENU_CLICK('701', 'childmenu', '', '');
//-->
</SCRIPT>

<TABLE class="" height=23 cellSpacing=0 cellPadding=0 width=realSize border=0>
<TBODY>
<TR>
<SCRIPT language=javascript>
<!--
var tdclass = "table1style";
var aclass = "cn_12px_white";
if (currentMenuName == "701"){
tdclass = "table2style";
}
if (count > -1 && 0 >= count){
document.writeln("<td id=\"TD_ID_701\" style=\"display:none\" width=\"78\" class="+tdclass+"align=\"center\" nowrap>");
}else{
document.writeln("<td id=\"TD_ID_701\"width=\"78\" class=\""+tdclass+"\" align=\"center\" nowrap>");
}
//-->
</SCRIPT>

<TD class=table2style id=TD_ID_701 noWrap align=middle width=78>
<SCRIPT language=javascript>
<!--
var aclass = "cn_12px_white";
if (currentMenuName == "701"){
aclass = "cn_12px_blue";
}
document.writeln("<a id=\"A_ID_701\" class="+aclass+" href=\"#\" onclick=\"javascript:FUNC_MENUBAR_MENU_CLICK('701', 'childmenu', '', '');return false;\"><center>申报</center></a>");
//-->
</SCRIPT>
<A class=cn_12px_blue id=A_ID_701 onclick="javascript:FUNC_MENUBAR_MENU_CLICK('701', 'childmenu', '', '');return false;" href="#">
<CENTER>申报</CENTER></A></TD>

{不能全部放下源码,中间的都一样,我省了}
<TD class=table1style id=TD_ID_706 noWrap align=middle width=78>
<SCRIPT language=javascript>
<!--
var aclass = "cn_12px_white";
if (currentMenuName == "706"){
aclass = "cn_12px_blue";
}
document.writeln("<a id=\"A_ID_706\" class="+aclass+" href=\"#\" onclick=\"javascript:FUNC_MENUBAR_MENU_CLICK('706', 'childmenu', '', '');return false;\"><center>查询</center></a>");
//-->
</SCRIPT>
<A class=cn_12px_white id=A_ID_706 onclick="javascript:FUNC_MENUBAR_MENU_CLICK('706', 'childmenu', '', '');return false;" href="#">
<CENTER>查询</CENTER></A></TD>
<TD width=2048></TD></TR></TBODY></TABLE>
<SCRIPT language=javascript>
<!--
var iFirst = 0;
var iLast = lastindex;
var ids = new Array(11);
ids[0] = "TD_ID_701";
ids[1] = "SEP_ID_702";
ids[2] = "TD_ID_702";
ids[3] = "SEP_ID_703";
ids[4] = "TD_ID_703";
ids[5] = "SEP_ID_704";
ids[6] = "TD_ID_704";
ids[7] = "SEP_ID_705";
ids[8] = "TD_ID_705";
ids[9] = "SEP_ID_706";
ids[10] = "TD_ID_706";
function next(){
if (count == -1)
return;
if (iLast>=ids.length-1) return;
document.all.item(ids[++iLast]).style.display="";
document.all.item(ids[++iLast]).style.display="";
document.all.item(ids[iFirst++]).style.display="none";
document.all.item(ids[iFirst++]).style.display="none";
}
function prior(){
if (count == -1)
return;
if (iFirst<=0) return;
document.all.item(ids[iLast--]).style.display="none";
document.all.item(ids[iLast--]).style.display="none";
document.all.item(ids[--iFirst]).style.display="";
document.all.item(ids[--iFirst]).style.display="";
}
function isRollShow(){
if (count == -1)
return false;
else
return true;
}
//-->
</SCRIPT>
</TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></BODY></HTML>

大虾,HELPME,我要疯了。。。。。。。。
zydscaline 2009-05-22
  • 打赏
  • 举报
回复
以下为IE显示的源文件
<html>
<head>
<title>
个人工作台-[李峰]
</title>
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
</head>
<script language="javascript">
<!--
wWidth = window.screen.width;

if (wWidth*1<=1024) {
document.write("<frameset name='n' frameborder='NO' cols='0,1008,*'>");
} else {
lWidth = (wWidth-1008)/2-1;
document.write("<frameset name='n' frameborder='NO' cols='"+lWidth+",1008,*'>");
}
//-->
</script>

<frame name="left" scrolling="NO" noresize src=""/>

<frameset rows="74,*,23" frameborder="NO" border="0" framespacing="0">

<frame name="rootmenu" scrolling="NO" noresize src="/webroot/sbzs/rootmenu.do"/>
<frameset id="Child" cols="182,9,*" frameborder="NO" border="0" framespacing="0" rows="*">
<frame name="childmenu" frameborder="NO" border="0" framespacing="0" scrolling="no" noresize src="/webroot/sbzs/childmenu.do"/>
<frame name="menubar" frameborder="NO" border="0" framespacing="0" scrolling="no" noresize src="menu/MenuBar.jsp"/>

<frame name="pagearea" frameborder="NO" border="0" framespacing="0" scrolling="yes" noresize src="/webroot/sbzs/viewpage.do"/>

</frameset>
<frame name="bottom" scrolling="NO" noresize src="menu/Bottom.jsp"/>
</frameset>

<frame name="right" scrolling="NO" noresize src=""/>

<noframes>
<body bgcolor="#FFFFFF" text="#000000">
</body>
</noframes>
</html>



取大框架的源码
<FRAMESET border=0 frameSpacing=0 rows=74,*,23 frameBorder=NO><FRAME name=rootmenu src="/webroot/sbzs/rootmenu.do" noResize scrolling=no><FRAMESET id=Child border=0 frameSpacing=0 rows=* frameBorder=NO cols=182,9,*><FRAME border=0 name=childmenu frameSpacing=0 src="/webroot/sbzs/childmenu.do?parentName=701" frameBorder=NO noResize scrolling=no><FRAME border=0 name=menubar frameSpacing=0 src="menu/MenuBar.jsp" frameBorder=NO noResize scrolling=no><FRAME border=0 name=pagearea frameSpacing=0 src="/webroot/sbzs/viewpage.do" frameBorder=NO noResize scrolling=yes></FRAMESET><FRAME name=bottom src="menu/Bottom.jsp" noResize scrolling=no></FRAMESET>

主框架的源码
<FRAME name=rootmenu src="/webroot/sbzs/rootmenu.do" noResize scrolling=no>

应该就这些了吧,今天晚了去不了办公室,你先帮看下,谢谢
zhiyongtu 2009-05-21
  • 打赏
  • 举报
回复
要不你用“另存为”保存下来,然后上传上来,我下载下来测试一下。
zydscaline 2009-05-21
  • 打赏
  • 举报
回复
内部网络,你们没法联接!郁闷中。。。。。。。。。。。。

错误提示:
实时错误91
对象变量或with块变量未设置
zhiyongtu 2009-05-20
  • 打赏
  • 举报
回复
对了,在VB中要引用MSHTML(Microsoft HTML Object Library)才能使用。
zhiyongtu 2009-05-20
  • 打赏
  • 举报
回复
VB可以用的,我测试通过了的。不知你那边有什么特殊情况,不行的话发个全的代码上来大家测试一下。
zhiyongtu 2009-05-20
  • 打赏
  • 举报
回复
把网址贴上来,我上去测试一下。不知问题到底出在哪里,上面的方法我用其它网页测试了是可以的。
zydscaline 2009-05-20
  • 打赏
  • 举报
回复
引用了,不中啊
zydscaline 2009-05-19
  • 打赏
  • 举报
回复
查了下,getElementById是JS里的,VB里面怎么用?要引用什么才行,我单独用这句子总是提示对象未定义
加载更多回复(2)

1,502

社区成员

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

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