如何点击一个网页中的按钮.
在VB里,怎样对一个网页中的按钮发送鼠标点击呢?效果跟用鼠标去点一样.
[在源文件中找不到ID的那种按钮.用不了WebBrowser1.Document.All("Login").Click]
[解决办法]
没有id找个有id的,然后用相对关系来定位按钮。
[解决办法]
蒋晟
说的有难度 我也不懂 帮你顶一下
[解决办法]
Dim Dov As Object
Dim Tag As Object
Dim i As Integer
Set Dov = WebBrowser1.Document
For i = 0 To Dov.All.length - 1
If UCase(Dov.All(i).tagName) = "INPUT" Then
Set Tag = Dov.All(i)
If Tag.Type = "text" Then
Select Case Tag.Name
Case "name"
Tag.Value = "fisheep"
End Select
ElseIf Tag.Type = "submit" Then
Tag.Click
End If
End If
Next i
[解决办法]
使用sendkeys
[解决办法]
VB:
Function js(scripts)
On Error GoTo 1
If scripts = "" Then Exit Function
Set document = WebBrowser1.document
document.parentWindow.execScript scripts, "javascript"
Exit Function
1
MsgBox "运行js脚本时发生错误!"
End Function
javascript:
function findNode(findString,obj){
var findId=true;
var findStrings=findString.split(';');
for(var i=0;i<obj.childNodes.length;i++){
findId=true;
if(obj.childNodes.length>0){
var objs=findNode(findString,obj.childNodes[i]);
if(objs!=null)return objs;
}
for(var k=0;k<findStrings.length;k++){
var temp=findStrings[k].split('=');
eval("var temp2=obj.childNodes[i]."+temp[0])
if(temp2!=temp[1]){
findId=false;
break;
}
}
if(findId){
return obj.childNodes[i];
}
}
return null;
}
例:<input onclick="window.location.href='resourceissue.jsf';" type="button" value="资源发布" style="cursor: pointer;"/>
js "findNode('nodeName=INPUT;value=资源发布',document.documentElement).click()"
注:如你打不的不是你的网站页面,可以用VB的JS函数先执行一下我写的这个javascript:findNode函数如:js "function findNode(findString,obj){...."
上面findNode函数要去掉换行符,这里是为了直观才加上的换行符
[解决办法]
.......飘过~~~~~~帮顶~~~~~~
[解决办法]
例: <IMG SRC="top.png" WIDTH="21" HEIGHT="18" BORDER="0" ALT="">
js "findNode( 'nodeName=IMG;src=top.png;',document.documentElement).click() "
例: <a href="top.html">xxxx</a>
js "findNode( 'nodeName=IMG;src=top.png;#text=xxxx',document.documentElement).click() "
[解决办法]
例: <a href= "top.html "> xxxx </a>
js "findNode( 'nodeName=A;src=top.png;#text=xxxx ',document.documentElement).click() "
[解决办法]
例: <a href= "top.html"> xxxx </a>
js "findNode( 'nodeName=A;src=top.html;#text=xxxx ',document.documentElement).click() "
[解决办法]
从严格意义上来说,哪根本就不是按钮,你如何用点按钮的方法去做呢?
你可以告诉大家哪是什么网页上的吗?
[解决办法]
正如你所说:哪个按钮得登录进去才能看到,大家都看不到,怎么帮你?
[解决办法]
飘过~~~~~~~~~~~~~~~纯帮顶~~~~~
[解决办法]
看了哪个网页的代码以后,只能叹服,真是找不出获取html对象,然后点击的方法,至少我是不行!!
我想,通过mouse_event(API函数)去模拟点击了或许是条捷径
[解决办法]
Private Declare Function GetMessageExtraInfo Lib "user32" () As LongPrivate Declare Sub mouse_event Lib "user32" _ (ByVal dwFlags As Long, _ ByVal dx As Long, _ ByVal dy As Long, _ ByVal cButtons As Long, _ ByVal dwExtraInfo As Long)Private Const MOUSEEVENTF_LEFTDOWN As Long = &H2Private Const MOUSEEVENTF_LEFTUP As Long = &H4sub clk()'至于按钮的坐标值就是x,y,这个你得自己找了,因为窗口放在不同的位置,坐标是不一样的,你可以用getcursorpos取得,'不过,就算你点了,又有什么用呢?点完了还是要验证码的!mouse_event MOUSEEVENTF_LEFTDOWN, x, y, 0, GetMessageExtraInfomouse_event MOUSEEVENTF_LEFTUP, x, y, 0, GetMessageExtraInfoend sub
[解决办法]
id= "tdGetSeed "> 这一段看到没有!!!
你用alert(document.getElementById("tdGetSeed").innerHTML);
就可以找到你要找的按钮的相关信息,以后怎么做我上面说得很明白了,哈哈!!
[解决办法]
如果按钮真就是在tdGetSeed 下面的话完全可以用
document.getElementById( "tdGetSeed ").childNodes[x]. click()
[解决办法]
我用alert(document.getElementById( "tdGetSeed ").innerHTML); 看了是:<form id=frmgetseed style="...." onsubmit="return false"><input id=btnGetSeed style="..." onclick=javascript:getSeedClick.call(this); type=image src="...gif"></form>
现在你不用上面那么多代码了,只要一条就行,那就是:
document.getElementById("btnGetSeed").click()
或
Set document = WebBrowser1.document
document.parentWindow.execScript "getSeedClick.call(document.getElementById('frmgetseed'))", "javascript "
[解决办法]
tdGetSeed 是哪个表格列的ID,根本不是哪个按钮的ID,哪个按是通过前面的脚本生成的,好像是initlize....就是前面第一个脚本,我没有打开哪个网页,楼主自己看吧!
楼主能将验证码识别准确率能达85%以上,配服!不知是用的什么方法?
[解决办法]
用alert(document.getElementById("tdGetSeed").innerHTML); 就能看到哪个按钮的ID是btnGetSeed
内容是:<form id=frmgetseed style= ".... " onsubmit= "return false "> <input id=btnGetSeed style= "... " onclick=javascript:getSeedClick.call(this); type=image src= "...gif "> </form>
所以用:
Set document = WebBrowser1.document
document.getElementById("btnGetSeed").click()
是可以的
[解决办法]
楼主只发帖不结帖的吗??
[解决办法]
貌似有人只喜欢分,不喜欢实际的技术讨论?
要不要我送你点分?
[解决办法]
哈哈,只要好好讨论就好
[解决办法]
我来帮顶一下~~~~
[解决办法]
你还别说,我最厉害的本事就是顶帖了~~~~
这不,又来了~~~~
我顶~~~~~~~~~
[解决办法]
VB版 难得这么热闹了
[解决办法]
我也来凑个热闹, 不过我可是把这个帖子从头到尾看了两遍了啊!
目前我也遇到和楼主一样的问题了!这几天自己实验出了一种通用的方法来点击网页上的任何按钮.用这方法,可以说在我所见过的网页上,没有WebBrowser点不了的.(不知还有没更高深的网页我没接触过,呵呵.)
希望能看到楼主的源码!!哈哈
[解决办法]
呃..........其实我有一句话很想说.........
还是不说了~~~~~~~~~~~~~嘿嘿
继续在半夜飘走~~~~~~~~~~~~~~~
[解决办法]
老马啊老马 到处都有你的身影啊!不过都是灌水的,没有解决问题的回复!哈哈哈……
[解决办法]
怎么没人顶了啊??!老马你怎么也不来了啊???别让帖子沉了,我接着顶 直到楼主出现为止:)
[解决办法]
最近大脑不灵活..............
[解决办法]
晕还没有结贴?
<INPUT onmouseover="javascript:this.src='images/web/anniu-1-2.gif'" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none" onclick=javascript:getSeedClick.call(this); onmouseout="javascript:this.src='images/web/anniu-1.gif';" type=image src="http://win.139.com/passtorch/images/web/anniu-1.gif">
<BUTTON style= "PADDING-RIGHT: 32px; PADDING-LEFT: 2px;
PADDING-BOTTOM: 2px; MARGIN-LEFT: 3px; LINE-HEIGHT:
100%; PADDING-TOP: 2px; HEIGHT: 20px "
onclick=javascript:btnSeedFetcherClick.call(this)> 确定 </BUTTON>
-----------------------
Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, URL As Variant)If URL = 哪个URL Then Dim oDoc, oCol, oItm Set oDoc = WebBrowser1.Document For Each oItm In oDoc.All If LCase(oItm.tagname) = "input" Then If LCase(oItm.Type) = "image" Then oItm.Click '所有全点 End If If LCase(oItm.tagname) = "button" Then '所有全点 oItm.Click End If NextEnd IfEnd Sub
[解决办法]
我也提供类似的问题,就不开新贴了,解决好另开贴散发!!
http://my.ku6.com/?dta=com_video|mos_video|task_new
这是网址
用户名:a01234567 密码:b2345678
如上图,在网页的源代码里都找不到,不知道为什么!!我把网页另存后用frontpage 打开也是没法显示上面图片上的内容
我想能自动点击上面的按钮,还有能自动填写上面的表单并提交
不知道各位有没有好的办法
[解决办法]
上面说的太乱了重发下
我也提问个类似的问题,就不开新贴了,解决后另开贴散分!!
http://my.ku6.com/?dta=com_video ¦mos_video ¦task_new 这是网址
用户名:a01234567 密码:b2345678
---------------------------------
图片如下
---------------------------------
如上图,在网页的源代码里都找不到,不知道为什么!!我把网页另存后用frontpage 打开也是没法显示上面图片上的内容
我想能自动点击上面的按钮,还有能自动填写上面的表单并提交
不知道各位有没有好的办法
[解决办法]
哈哈哈 密码给错了应该是 密码:b12345678
[解决办法]
帖子又要沉了啊,我把他顶起来!
[解决办法]
关注
[解决办法]
<table class="tableform" cellpadding="0" cellspacing="0" id="tTable" align="center" width="96%">
<form id="videoForm" name="videoForm" method="post" action="/?com=video&mos=video&task=add">
<tr>
<td class="formlabel">标 题:<span class="red">*</span></td>
<td>
<input type="text" name="name" id="name" class="ku6nofocus" size="40" maxlength="30" title="长度1-30位(1中文占2位)"/>
</td>
</tr>
<tr>
<td class="formlabel">视频类别:</td>
<td>
<label for="isself1"><input type="checkbox" name="iself" id="isself1" value="1" title="非原创视频故意选择将会被扣除所有收益,并自担相关责任"/>原创</label>
</td>
</tr>
<tr>
<td class="formlabel">所属频道:<span class="red">*</span></td>
<td>
<select name="channel" id="channel"><option value="0">请选择频道</option></select>
<script language="JavaScript">
<!--
new Channel('channel', null);
//-->
</script>
</td>
</tr>
<tr>
<td class="formlabel">视频分类:</td>
<td>
<select name="usersort" id="usersort">
<option value="0" selected="selected">不使用分类</option></select>
<a href="javascript:changeBox('n1','n2');" id="n1">[创建分类]</a>
<label for="t2" id="n2" style="display:none;">
<input type="text" name="usersortname" id="usersortname" size="10" maxlength="20" class="ku6nofocus" style="width:120px;"/>
<input type="button" name="sBtn" id="sBtn" value="增加分类" class="ok" onclick="addUserSort(Common.blogtype.video);" />
<a href="javascript:changeBox('n2','n1');">[取消]</a>
</label>
</td>
</tr>
<tr>
<td class="formlabel">标 签:<span class="red">*</span></td>
<td><input type="text" name="tag" id="tag" class="ku6nofocus" size="40" maxlength="45" title="长度1-44位(1中文占2位,含空格),各TAG使用'空格'分割"/></td>
</tr>
<tr>
<td class="formlabel">介 绍:<span class="red">*</span></td>
<td><textarea name="about" id="about" title="长度1-1000位(1中文占2位)"></textarea></td>
</tr>
<tr>
<td class="formlabel">评 论:</td>
<td>
<input type="checkbox" name="allowcomment" id="allowcomment" value="1" checked="checked" />
<label for="allowcomment">允许游客评论</label>
</td>
</tr>
<tr id="tr_active">
<td class="formlabel">参与活动:</td>
<td>
<div id="c_active"></div>
<SCRIPT LANGUAGE="JavaScript">
<!--
VActive = new Active('VActive','c_active',1195637800);
VActive.showList();
//-->
</SCRIPT>
</td>
</tr>
<tr>
<td class="formlabel"></td>
<td>
<input type="button" name="upBtn" value="提交" class="ok" onclick="CheckForm(true);"/>
<input type="button" value="取消" class="cancel" onclick="document.location='/?com=video&mos=video&task=list'" />
<input type="hidden" name="videoext" id="videoext" value=""/>
<input type="hidden" name="fid" id="fid" value="9042958"/>
</td>
</tr>
</form>
</table>
[解决办法]
li36669957 谢谢你!!!
能说下是如何得到的以上代码的啊??
[解决办法]
右键->查看源文件
[解决办法]
啊!!就这么简单啊 晕死了!
那怎么自动点击上面的那个“浏览”按钮呢??
li36669957 能留下qq吗??
[解决办法]
VB:
Function js(scripts)
On Error GoTo 1
If scripts = " " Then Exit Function
Set document = WebBrowser1.document
document.parentWindow.execScript scripts, "javascript "
Exit Function
1
MsgBox "运行js脚本时发生错误! "
End Function
javascript:
function findNode(findString,obj){
var findId=true;
var findStrings=findString.split( '; ');
for(var i=0;i <obj.childNodes.length;i++){
findId=true;
if(obj.childNodes.length> 0){
var objs=findNode(findString,obj.childNodes[i]);
if(objs!=null)return objs;
}
for(var k=0;k <findStrings.length;k++){
var temp=findStrings[k].split( '= ');
eval( "var temp2=obj.childNodes[i]. "+temp[0])
if(temp2!=temp[1]){
findId=false;
break;
}
}
if(findId){
return obj.childNodes[i];
}
}
return null;
}
例: <input onclick= "window.location.href= 'resourceissue.jsf '; " type= "button " value= "资源发布 " style= "cursor: pointer; "/>
js "findNode( 'nodeName=INPUT;value=资源发布 ',document.documentElement).click() "
注:如你打不的不是你的网站页面,可以用VB的JS函数先执行一下我写的这个javascript:findNode函数如:js "function findNode(findString,obj){.... "
上面findNode函数要去掉换行符,这里是为了直观才加上的换行符
另外还是没看明白你上面的的这段代码到底怎么在vb里面调用!!
[解决办法]
哈哈,我再来顶一下
这真是个好办法,收藏了!!!
[解决办法]
jinder 研究的很有成就,如此总结性的经验,真值得收藏!!
[解决办法]
貌似没有办法,分不分的无所谓了
[解决办法]
不如别结了~~HEHE
[解决办法]
你那个方法中其中'Text1 = <BUTTON 。。。
Text1 =号后面好像不能加<,不然出现缺少表达式的msgbox
[解决办法]
我觉得还有一类链接也没涉及到吧?就是用javascript生成的链接,比如baidu的广告之类的,一个script中有几个链接,对应不同的地址。
[解决办法]
不错,看的起劲
[解决办法]
用webbrowser打开网页后,网页内的所有元素你都可以通过代码来操作,
方法是:1.根据标记名(tagname)的和元素名name来找到元素,
2.给元素赋值或是执行相关的事件.
例1: 给username文本框内填充内容:
Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, URL As Variant)
Dim doc
Dim tg
Set doc = WebBrowser1.Document
For i = 0 To doc.All.length - 1
If (LCase(doc.All(i).tagname)) = "input" Then
if (LCase(doc.All(i).name)) = "username" then
Set tg = doc.All(i)
tg.value=text1.text
end if
End If
Next i
End Sub
例2: 找到提交按钮并点击
Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, URL As Variant)
Dim doc
Dim tg
Set doc = WebBrowser1.Document
For i = 0 To doc.All.length - 1
If (LCase(doc.All(i).tagname)) = "input" Then
if (LCase(doc.All(i).type)) = "submit" then
Set tg = doc.All(i)
tg.click
end if
End If
Next i
End Sub
[解决办法]
上面的是搜到的.在MSDN2找到个答案还没试.IFRAME内的网页的方法不同,可能要用到窗口.试验后再说吧.