IE单击没有与其关联的按钮(使用Excel VBA) [英] IE click on a button that has no link associated to it (using Excel VBA)

查看:74
本文介绍了IE单击没有与其关联的按钮(使用Excel VBA)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想单击网页上的按钮",但是我的问题是此按钮似乎没有链接到该按钮.顺便说一句,您可以看到我对Web浏览器的语言完全不熟悉. 无论如何,我最经常使用Internet Explorer,这是到目前为止的代码

I want to click on a "button" on a web page, but my problem is that this button doesn't seem to have link attach to it. By the way I'm phrasing this you can see I'm not familiar at all with the language of web browser. Anyway I most use internet explorer and here's the code I have so far

Sub click_button_no_hlink()


Dim i As Long
Dim IE As Object
Dim Doc As Object
Dim objElement As Object
Dim objCollection As Object

Set IE = CreateObject("InternetExplorer.Application")               'create IE instance

IE.Visible = True

IE.Navigate "https://apex.xyz.qc.ca/apex/prd1/f?p=135:LOGIN_DESKTOP::::::"  ' Adress of web page

Do While IE.Busy                                                     'loading page
    Application.Wait DateAdd("s", 1, Now)
Loop

'-------------Usually I would do something like that and it would works well.-----------------
Set link = IE.document.getElementsByTagName("a")
For Each l In link
    a = l.innerText
    If l.innerText = "Créer" Then                    '
        l.Click
        Exit For
    End If
Next
'-------------That method works fine on other type of hlink to the page by the way------------


'-----------------------I also tried various methods around this with no luck------------------------------
Set objCollection = IE.document.getElementsByClassName("rc-content-buttons")                  'recherche du bouton "Créer"
'---------------------------------

'--------------------or this also doesn't work-------------------------------
For Each btn In IE.document.getElementsByClassName("rc-content-buttons")
    If btn.getAttribute("id") = "B91938241817236808" Then
        btn.Click
        Exit For
    End If
Next btn

End Sub 

为清楚起见,以下是我要与之交互的按钮"周围的网页代码.

For sake of clarity here's the code of the web page around the "button" I'm trying to interact with.

我进行了很多研究,但现在我处于死胡同.任何帮助将不胜感激.
提前发送.

I've made many research but I'm in a dead end right now. Any help will be greatly appreciate.
Tx in advance.

解决的最终代码:在DOMENIC,QHARR和Yu Zhou的帮助下

SOLVED FINAL CODE: With help from DOMENIC and QHARR and Yu Zhou

Sub click_button_no_hlink()


Dim i As Long
Dim IE As Object
Dim Doc As Object
Dim objElement As Object
Dim objCollection As Object

Set IE = CreateObject("InternetExplorer.Application")               'create IE instance

IE.Visible = True

IE.Navigate "https://apex.xyz.qc.ca/apex/prd1/f?p=135:LOGIN_DESKTOP::::::"  ' Adress of web page

While IE.Busy: DoEvents: Wend             'loading page

IE.document.querySelector("[value='Créer']").FireEvent "onclick"   'works like a charm

            '  IE.document.querySelector("div.rc-content-buttons input").Click         
                     'also works but speaks less by itself when reading code
            '  IE.document.getElementById("B91938241817236808").Click
                     'also works 

End Sub

推荐答案

它在输入中而不是tag元素,因此收集标签不会捕获您想要的内容.按照注释中的建议使用id是一种方法.如果找不到元素,请检查您的元素是在父框架中还是需要协商的iframe中.通用语法是

It is within an input not a tag element so gathering a tags will not capture what you want. Using the id, as suggested in comments is one way to go. If you get element not found then check whether your element is within a parent frame or iframe which needs to be negotiated. General syntax for that is

ie.document.getElementsByTagName("frame")(appropriateIndexHere).contentDocument.getElementById("B91938241817236808")
ie.document.getElementsByTagName("iframe")(appropriateIndexHere).contentDocument.getElementById("B91938241817236808")

如果ID是动态的,则可以使用value属性

If the id is dynamic you can use the value attribute

ie.document.querySelector("[value='Créer']")
ie.document.getElementsByTagName("frame")(appropriateIndexHere).contentDocument.querySelector("[value='Créer']") 'etc

由于有一个事件,您可能需要触发它.

As there is an event, you may need to fire it.

ie.document.querySelector("[value='Créer']").FireEvent "onclick"
ie.document.getElementsByTagName("frame")(appropriateIndexHere).contentDocument.querySelector("[value='Créer']").FireEvent "onclick"  'etc

并使用适当的页面加载等待.所以,

And use a proper page load wait. So this,

Do While IE.Busy                                                     'loading page
    Application.Wait DateAdd("s", 1, Now)
Loop

应该是

While ie.Busy Or ie.ReadyState <> 4: DoEvents:Wend

这篇关于IE单击没有与其关联的按钮(使用Excel VBA)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆