VB6.0在WebBrowser下无法触发提交按钮

VB6.0在WebBrowser下无法触发<提交试卷>按钮,请求帮助
已知此方式WebBrowser1.document.getElementById("rWaqiaFByAeNfCkL").Click无效。

img

网页源代码:div class="west" handler="west" solt="west"> div class="ds_container ds_control no_padding" id="rWaqiaFByAeNfCkL" style="top: 0px; width: 300px; bottom: 0px; margin-right: 0px; margin-left: -300px;" ctrl_type="Container" caption="WestView"> div class="ds_exam_timer"> div class="ds_exam_post">提交试卷

在VB6.0中,可以通过WebBrowser控件来模拟用户在网页上的操作,包括点击按钮、填写表单等。如果您想在WebBrowser中触发提交试卷按钮,可以按照以下步骤进行操作:

  1. 首先,您需要在WebBrowser控件中加载试卷页面。可以使用WebBrowser的Navigate方法来加载页面,例如:
WebBrowser1.Navigate "http://www.example.com/exam.html"
  1. 加载页面后,您需要等待页面加载完成。可以使用WebBrowser的DocumentComplete事件来检测页面是否加载完成,例如:
Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, URL As Variant)
    If URL = "http://www.example.com/exam.html" Then
        ' 页面加载完成,可以进行操作
    End If
End Sub
  1. 页面加载完成后,您可以使用WebBrowser的Document对象来获取页面中的元素,例如按钮。可以使用Document的GetElementsByTagName方法来获取所有的按钮元素,例如:
Dim buttons As Object
Set buttons = WebBrowser1.Document.GetElementsByTagName("button")
  1. 获取按钮元素后,您可以遍历所有的按钮元素,找到提交试卷按钮。可以使用按钮元素的InnerText属性来获取按钮的文本内容,例如:
Dim button As Object
For Each button In buttons
    If button.InnerText = "提交试卷" Then
        ' 找到提交试卷按钮,可以进行点击操作
        button.Click
        Exit For
    End If
Next
  1. 点击按钮后,您需要等待页面重新加载。可以使用WebBrowser的DocumentComplete事件来检测页面是否重新加载完成,例如:
Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, URL As Variant)
    If URL = "http://www.example.com/result.html" Then
        ' 页面重新加载完成,可以获取结果
    End If
End Sub

以上就是在VB6.0中使用WebBrowser控件触发提交试卷按钮的步骤。需要注意的是,由于WebBrowser控件是基于Internet Explorer的,因此可能存在兼容性问题。如果您遇到了问题,可以尝试使用其他的浏览器控件或者第三方库来实现。

基于new Bing的编写解答:
根据您提供的信息,网页源代码中提交试卷按钮的id为"rWaqiaFByAeNfCkL",但是在WebBrowser下无法触发点击事件。可能存在以下几种原因:

  1. 按钮所在的div层级较多,需要按照层级逐一获取相应元素,才能触发点击事件;
  1. WebBrowser中可能存在JavaScript等安全限制,需要先取消安全限制,才能触发元素的点击事件;
  1. 网页中可能使用了异步加载或ajax请求,需要等待页面完全加载完成后才能触发点击事件。

您可以尝试以下方法:

  • 使用WebBrowser1.document.getElementsByName("提交试卷")(0).Click(),以获取name为“提交试卷”的元素,并触发点击事件;
  • 取消WebBrowser的安全限制,方法为:在 VB6.0 工具栏中选择“项目”>“引用”,然后勾选“Microsoft HTML Object Library”和“Microsoft Internet Controls”,在代码中添加以下语句:WebBrowser1.Silent = True, WebBrowser1.RegisterAsBrowser = True,接着再次尝试触发点击事件;
  • 使用WebBrowser1.navigate 方法打开页面后,在DocumentCompleted事件中添加以下代码,等待页面加载完成后再触发点击事件:
 Private Sub WebBrowser1_DocumentCompleted(ByVal pDisp As Object, URL As Variant)
     If (pDisp Is WebBrowser1.Object) Then
         Dim Wb As SHDocVw.WebBrowser
         Set Wb = pDisp
         If (Wb.ReadyState = READYSTATE_COMPLETE) Then
             WebBrowser1.document.getElementById("rWaqiaFByAeNfCkL").Click
         End If
     End If
 End Sub

可以借鉴下

下午做webbrowser登陆和讯博客发贴,遇到两个问题

一 webbrowser填写好登陆框,点登陆按钮没有反映。我确定webbrowser正确找到了登陆按钮。这个登陆按钮有 click事件,被点击时会触发一个javascript函数,但是应该没区别啊。即使那个函数里有做了什么,webbrowser点击登陆按钮应该也会 像手工点击一样触发整个函数过程吧。至今没有找到原因,采取的解决办法是从其他登陆框登陆进去了。现在门户网站都有通行证一说,很多地方都可以登陆,一旦 登陆,就可以访问网站的所有应用,比如邮箱、博客、相册等。

二 提交日记的时候,webbrowser点提交按钮,又没反应。
提交日记只能点这个地方的提交按钮,可没有其他地方可以替代。不过这次找到原因了,

那个按钮有click和mousedown两个javascript事件函数。手动点击,会先触发鼠标的mousedown事件函数,再触发click事件函数;
而webbrowser点击时候,就只触发了click事件函数。因此要用程序补上mousedown函数里的操作,之后webbrowser再提交,OK了!

 btn.Focus();
                btn.InvokeMember("mousedown");
                btn.InvokeMember("click");
                btn.InvokeMember("onmousedown");
                btn.InvokeMember("onclick");

引用chatGPT作答,根据您提供的信息,可能存在以下问题:

1.按钮ID不正确:请确保使用的ID正确,检查页面源代码中是否有其他具有相同ID的元素。

2.按钮未完全加载:在单击按钮之前,请确保页面已完全加载,可以使用WebBrowser1.ReadyState属性进行检查。如果ReadyState不等于4,则表示页面仍在加载中,您需要等待页面完全加载后再进行操作。

3.按钮被禁用:请检查按钮是否被禁用,如果是,则无法单击按钮。您可以通过检查按钮的disabled属性进行检查,如果disabled属性设置为true,则表示按钮被禁用。

4.代码执行顺序不正确:请确保代码执行顺序正确。例如,在单击按钮之前,您需要确保已对按钮进行了正确的DOM元素选择。

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
首先,确认该按钮的ID为rWaqiaFByAeNfCkL,可以在WebBrowser中使用F12开发者工具查看源代码进行确认。

如果直接调用WebBrowser1.document.getElementById("rWaqiaFByAeNfCkL").Click无效,那么可以尝试模拟单击鼠标左键的方式。

以下是示例代码:

Private Sub Command1_Click()
    Dim oElem As Object
    
    Set oElem = WebBrowser1.Document.getElementById("rWaqiaFByAeNfCkL")
    
    oElem.Focus
    oElem.FireEvent ("onclick")
End Sub

代码解释:

  1. 首先获取按钮元素对象,使用Set关键字将对象引用赋值给oElem变量。
  2. 然后将焦点聚焦到按钮元素上,使用Focus方法。
  3. 最后触发该元素的onclick事件,使用FireEvent方法。

注意事项:

  1. 如果网页使用的是Ajax或者其他异步加载技术,可能需要等待一段时间才能获取到元素对象。可以使用Do While或者Do Until循环等待元素对象出现,或者使用Application.Wait等待一定时间。
  2. 如果以上方法仍然无效,可以考虑使用键盘模拟按键的方式触发提交操作。

希望这些信息可以帮到你!
如果我的回答解决了您的问题,请采纳!

网页代码中只有样式代码,而"west"句柄代码没有,而按钮无响应,很大可能就是句柄中的某个函数出现错误,导致提交失败。