iT邦幫忙

0

VBA 點選 div class 按鈕

請問如何以vba登入網頁後,點選網頁連結按鈕(共兩層),但因網頁為公司內網無法提供,還請網大幫忙看看是否有解,謝謝。
(目前登入網頁已學會,但點選按鈕測試一直失敗)
(公司電腦win7、IE8(限制升級))

Dim p As Object
Set myIE = CreateObject("InternetExplorer.Application")
With myIE
.Visible = True
.Navigate "公司網址"

Do While Busy Or .ReadyState <> 4: DoEvents: Loop

Set p = .Document.all.tags("INPUT")
.Document.all.txtUsername.innerText = "xxxxxx" '登入帳號
.Document.all.txtPassword.innerText = "xxxxxx" '登入密碼
.Document.all.ImageButton2.Click '登入

Do While Busy Or .ReadyState <> 4: DoEvents: Loop

點選第一層按鈕
點選第二層按鈕

End With


第一層按鈕

https://ithelp.ithome.com.tw/upload/images/20180614/20109231vYdwmxRBMW.png
https://ithelp.ithome.com.tw/upload/images/20180614/20109231Mq0O9joV08.jpg

第二層按鈕


文字 - 來電內容記錄(新)
https://ithelp.ithome.com.tw/upload/images/20180614/20109231SzsC9Jf19m.png
https://ithelp.ithome.com.tw/upload/images/20180614/20109231HqKxH66hYE.jpg

> 點選按鈕測試一直失敗

出現怎樣的錯誤訊息?
@pcw 我在網路上爬文到以下巨集,但完全沒反應
----------------------------------------------
請先設定 Microsoft HTML Object Library 為引用項目。以下程式可抓取 <div class="data-nav-l"> 第一個項目,亦即「数据中心」字符。
Sub getData()
Dim oHtml As HTMLDocument
Dim oElement As Object
Set oHtml = New HTMLDocument
With CreateObject("WINHTTP.WinHTTPRequest.5.1")
.Open "GET", "http://stockpage.10jqka.com.cn/600000/", False
.send
oHtml.body.innerHTML = .responseText
End With
For Each oElement In oHtml.getElementsByClassName("data-nav-l")
Debug.Print oElement.Children(0).innerText
Next
End Sub
----------------------------------------------
另外爬文到以下巨集,但出現錯誤訊息「物件不支持此屬性或方法」
----------------------------------------------
document.getElementsByClassName('panel-title panel-with-icon')
----------------------------------------------
@pcw 錯誤訊息如下,雖然我覺得好像一定不是醬打,但我好像也真的找不到正確寫法了~~~~~><

Dim p As Object
Set myIE = CreateObject("InternetExplorer.Application")
With myIE
.Visible = True
.Navigate "公司網址"

Do While Busy Or .ReadyState <> 4: DoEvents: Loop

Set p = .Document.all.tags("INPUT")
.Document.all.txtUsername.innerText = "xxxxxx" '登入帳號
.Document.all.txtPassword.innerText = "xxxxxx" '登入密碼
.Document.all.ImageButton2.Click '登入

Do While Busy Or .ReadyState <> 4: DoEvents: Loop

.Document.getElementsByClassName ("panel-title panel-with-icon") '執行階段錯誤 438' 物件不支援此屬性或方法

End With

2 個回答

0
paicheng0111
iT邦高手 1 級 ‧ 2018-06-19 15:23:39
最佳解答

我先用tag去挑,然後再去檢查innertext。
如果tag很多的話,效能會比較差。

Dim p As Object, div as object, a as object
Set myIE = CreateObject("InternetExplorer.Application")
With myIE
    .Visible = True
    .Navigate "公司網址"

    Do While Busy Or .ReadyState <> 4: DoEvents: Loop

    Set p = .Document.all.tags("INPUT")
    .Document.all.txtUsername.innerText = "xxxxxx" '登入帳號
    .Document.all.txtPassword.innerText = "xxxxxx" '登入密碼
    .Document.all.ImageButton2.Click '登入

    Do While .Busy Or .ReadyState <> 4: DoEvents: Loop

    ' 點選第一層按鈕
    for div in .Document.getelementsbytagname("div")
        if div.innertext = "處理中心" then 
            div.click
            exit for
        end if
    next div
    
    ' 點選第二層按鈕
    for a in .Document.getelementsbytagname("a")
        if a.innertext = "來電內容記錄(新)" then 
            a.click
            exit for
        end if
    next a
    
End With

@pcw 感謝幫忙,不過測試時出現語法錯誤訊息,是因為我哪裡需要修改嗎??
https://ithelp.ithome.com.tw/upload/images/20180619/20109231BlrxgALSMZ.jpg

我有修正了,您再試試看。
for loop 中少寫了 each

@pcw 太厲害了!!果然測試已成功,再次感謝你熱心幫忙喔~~~~~/images/emoticon/emoticon41.gif

0
咖咖拉
iT邦研究生 2 級 ‧ 2018-06-14 16:15:26

比較大的問題應該是你要如何Document到這2個地方

Document之後
可以用FOR或是直接用

InvokeMember("click")

模擬點擊

另外模擬點擊無法直接Document取CLASS
之前在寫的時候一直無法取CLASS來做點擊

@冰水 抱歉~~因為我對程式寫法沒那麼專精,可以請教完整語法嗎?

我要發表回答

立即登入回答