VB6.0在WebBrowser中如何点击JS网页[或框架网页]按钮

VB6.0在WebBrowser网页中点击选项按钮,但下面两种方法点击无任何反应,也不提示错误。
一、
Dim radioBtn As HTMLInputElement
Set radioBtn = WebBrowser1.document.getElementsByName("C032")(0)'选择第一个选项
radioBtn.Click
二、
WebBrowser1.document.All.Item("C032")(0).Click'选择第一个选项

注:
经过调试,用此代码,能选中第一题的第一个选项,[0]代表第一个选项。但是要如何选中第2题 第3题等之后的答案?
WebBrowser1.document.parentWindow.eval "document.getElementsByClassName('layui-unselect layui-form-radio')[0].click();",

网页界面及源码如下:

img

img

这个你逐层调试下,确定 WebBrowser1.document.All.Item("C032")(0) 是否存在

引用chatGPT作答,从你提供的代码和说明来看,似乎问题出在获取第二个和第三个选项的元素上。下面是一些可能有用的解决方法:

1.获取第二个和第三个选项的元素
你可以尝试使用 getElementsByName() 或者 getElementsByTagName() 方法获取第二个和第三个选项的元素,类似于获取第一个选项的代码,只需要将选项的 name 或者 tagName 修改为对应的值即可。

例如,获取第二个选项可以使用以下代码:

Dim radioBtn As HTMLInputElement
Set radioBtn = WebBrowser1.document.getElementsByName("C033")(0) '选择第二个选项
radioBtn.Click

2.使用 parentWindow.eval() 方法
你提供的代码使用了 parentWindow.eval() 方法来选择第一个选项。如果你能够确定第二个和第三个选项的 HTML 结构和第一个选项相同,你可以尝试使用类似的方法来选择它们。

例如,选择第二个选项的代码可以修改为:

WebBrowser1.document.parentWindow.eval "document.getElementsByName('C033')[0].click();"

这里使用了 getElementsByName() 方法获取第二个选项的元素,并且在 parentWindow.eval() 方法中执行了 click() 方法来模拟点击。

注意,这种方法需要你了解选项的 HTML 结构和属性,并且保证它们与第一个选项相同,否则可能无法正常工作。

希望这些解决方法能帮到你。

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
根据你提供的网页源码和截图,看起来你的网页使用了layui框架和jQuery库,而这些工具提供了更便捷的方式来选择和操作页面元素。

以下是使用jQuery库来点击选项的示例代码:

WebBrowser1.Document.ParentWindow.execScript "$('.question-item:eq(0) .layui-form-radio:eq(0)').click();", "JavaScript"

这里使用了jQuery的选择器来选中第一题的第一个选项,即选择了具有.question-item类的第一个元素中的第一个单选框(即名为“C032”的单选框)。如果要选中其他选项,只需要更改选择器中的数字即可。需要说明的是,这里的选择器是基于网页源码提供的结构进行推断的,实际情况可能有所不同,请根据实际情况进行调整。

如果你不想使用jQuery,可以直接使用原生JavaScript代码。例如,下面的代码也可以达到相同的效果:

WebBrowser1.Document.ParentWindow.execScript "document.querySelectorAll('.question-item')[0].querySelectorAll('.layui-form-radio')[0].click();", "JavaScript"

这里使用了原生的querySelectorAll方法来选择元素,也是选择了第一题的第一个选项。与jQuery示例相比,代码略微冗长一些,但原理相同。

请注意,在使用querySelectorquerySelectorAll等方法选择元素时,需要确保选择器能够准确地选择到要操作的元素。如果选择器不正确,就无法准确操作对应的元素。同时,操作元素也需要遵守网页的逻辑和规则,否则可能会造成意外的结果。
如果我的回答解决了您的问题,请采纳!

以下是可能导致问题的一些常见原因和建议的解决方案:

  1. 您尝试使用getElementsByName获取该选项按钮,但是无法成功点击。请确保该选项按钮存在于页面上,并且其名称正确、唯一。

  2. 另一种方法是使用All.Item来获取选项按钮并单击它。您可以通过以下代码尝试模拟单击:

Dim radioBtn As HTMLInputElement
Set radioBtn = WebBrowser1.document.All.Item("C032")(0)
radioBtn.Checked = True
radioBtn.FireEvent ("onclick")
  1. 如果以上方法仍然无法解决您的问题,请检查是否有任何Javascript或其他动态脚本阻止了单击事件。您可以打开浏览器控制台并查看是否有任何错误消息或警告。

该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
要在VB6.0中使用WebBrowser控件点击JS网页按钮,可以尝试以下方法:

首先,你需要确保WebBrowser控件已经加载了网页,并且网页中的按钮已经加载完成。为了确保按钮已经加载完成,可以在WebBrowser控件的DocumentComplete事件中执行相应的操作。

然后,尝试使用以下代码来点击JS网页按钮:

Dim btn As Object
Set btn = WebBrowser1.Document.GetElementById("btn_id") '替换btn_id为你的按钮ID
btn.Click

其中,GetElementById方法可以通过网页中元素的ID来获取相应的元素对象,然后使用Click方法模拟点击操作。

如果按钮没有ID,可以尝试使用其他属性来查找按钮,例如name、className等。例如:

Dim btn As Object
Set btn = WebBrowser1.Document.GetElementsByTagName("button")(0) '获取第一个button元素
btn.Click

如果网页中存在多个相同的按钮,需要根据具体情况来选择相应的按钮。

如果按钮位于框架网页中,可以使用以下代码来获取框架网页的Document对象,并在其中查找按钮:

Dim frame As HTMLFrameElement
Set frame = WebBrowser1.Document.frames("frame_name") '替换frame_name为框架的名称
Dim doc As HTMLDocument
Set doc = frame.contentDocument
Dim btn As Object
Set btn = doc.GetElementById("btn_id") '替换btn_id为你的按钮ID
btn.Click

其中,frames方法可以通过框架的名称来获取相应的框架元素对象,然后使用contentDocument属性来获取框架的Document对象。

需要注意的是,由于JS网页的实现方式比较灵活,以上方法可能无法适用于所有情况。如果以上方法无法实现相应的操作,可以尝试其他方法,例如模拟键盘按键、发送消息等。


如果以上回答对您有所帮助,点击一下采纳该答案~谢谢