ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 246|回复: 8

[求助] 請教:VBA開啟ie網頁,輸入數值並查詢

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-9-21 15:09 | 显示全部楼层 |阅读模式
本帖最后由 JoeyChu 于 2024-9-21 16:50 编辑

網頁:https://domestic.judicial.gov.tw/judbp/wkw/WHD9HN01.htm

需求:
1.打開網頁(成功)
2.於[身分證字號/護照號碼]欄位輸入excel特定單元格的數值
3.於[類別]欄位的下拉選項,選擇01繼承事件(這個操作動作可有可無,如果我無法做到就直接查詢)
4.點擊查詢



雖然打開網頁了
但第二個動作:自動輸入數值,我就開始卡了

明明查到[身分證字號/護照號碼]欄位的input name是"idno"
但不知為何試了網上多種方法都輸入不進去,也不知從何改起(抱歉我是程式小白,打的程式碼都是東拼西湊有點亂,請見諒)


請問有大大可以協助嗎?
即使不協助修改,能提點一下,給我個方向也好,指出問題在哪,我才知道要往哪裡查詢、修正錯誤

下面附上我的程式碼:



Subbestdaylong_open_ie()

UrL=Range("B1").Value

DimsAsString

s=ActiveSheet.Cells(24,1).Value

DimpAsObject,myIEAsObject,ShellAsObject,eachWindowAsObject

SetmyIE=CreateObject("InternetExplorer.Application")
WithmyIE
.Visible=True
.NavigateUrL

'.Document.getelementbyid("idno").innertext="ActiveSheet.Cells(24,1)"


'.Document.getelementbyid("idno").Click


'.FindElementById("idno").SendKeys(s)
'.FindElementById("ace-iconfafa-search").Click
'EndWith

'.getElementById("idno").Value=varResults.GetText(1)


SetmyIE=Nothing

'WithObjCollection.document
.getElementById("idno").Value=ActiveSheet.Cells(24,1)
EndWith


Stop
myIE.Quit
SetmyIE=Nothing





EndSub



TA的精华主题

TA的得分主题

发表于 2024-9-21 17:18 | 显示全部楼层

  1. Sub IEtest()

  2. Dim TheBrowser As New SHDocVw.InternetExplorerMedium
  3. Url = "https://domestic.judicial.gov.tw/judbp/wkw/WHD9HN01.htm"

  4. TheBrowser.Visible = True
  5. TheBrowser.Navigate (Url)

  6. Do Until TheBrowser.ReadyState = READYSTATE_COMPLETE '如果IE加载宏完成
  7.    DoEvents '在窗体加载时转交操作权
  8. Loop
  9. With TheBrowser
  10.    .Document.getelementbyid("idno").Value = "key" 'key is you keyin
  11. End With
  12. MsgBox "success"
  13. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-9-21 18:25 | 显示全部楼层
本帖最后由 JoeyChu 于 2024-9-21 18:28 编辑

感謝您的回覆~~
但顯示 (圖1)使用者自訂型態尚未定義 無法執行
想請教是不是因為vba無法識別New SHDocVw.InternetExplorerMedium呢?
或者是我操作上的問題呢
我剛剛有試圖把您的代碼跟我原本的代碼,修改融合一起
雖然可執行,但仍無法自動輸入數值(圖2)
不知是什麼原因
您有空的話方便解惑嗎 感恩!~
1.jpg
2.png

TA的精华主题

TA的得分主题

发表于 2024-9-22 11:31 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
因为你提供的网站我上不去,所以我用百度做了测试,下面见图:
如果你不成功,请看一下你找到的关键id值是否正确。。
image.jpg
  1. Sub bestdaylong_open_ie()

  2. URL = Range("B2").Value   'B2's cell value = 'https://www.baidu.com/'
  3. key = Cells(25, 1).Value  'key is you keyin

  4. Dim TheBrowser As New SHDocVw.InternetExplorerMedium
  5. 'URL = "https://domestic.judicial.gov.tw/judbp/wkw/WHD9HN01.htm"

  6. TheBrowser.Visible = True
  7. TheBrowser.Navigate (URL)

  8. Do Until TheBrowser.ReadyState = READYSTATE_COMPLETE '如果IE加载宏完成
  9.    DoEvents '在窗体加载时转交操作权
  10. Loop
  11. With TheBrowser
  12.    .Document.getelementbyid("kw").Value = key
  13.    .Document.getelementbyid("su").Click
  14. End With
  15. MsgBox "success"
  16. Set myIE = Nothing
  17. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2024-9-22 11:34 | 显示全部楼层
JoeyChu 发表于 2024-9-21 18:25
感謝您的回覆~~
但顯示 (圖1)使用者自訂型態尚未定義 無法執行
想請教是不是因為vba無法識別New SHDocV ...

image.png

TA的精华主题

TA的得分主题

发表于 2024-9-22 16:53 来自手机 | 显示全部楼层
Document.getelementbyid("idno").innertext="ActiveSheet.Cells(24,1)"

这是js代码,ie webbrowser 有这个方法吗?
js="Document.getelementById("idno").innertText='aaa'
.Document.parentWindow.execScript js

你的页面打不开,如果是输入文本框,不能 innerText 要用value

另外,最好用selenium,ie浏览器比较老,很多页面不兼容

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-9-22 23:19 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
excel玉米 发表于 2024-9-22 11:31
因为你提供的网站我上不去,所以我用百度做了测试,下面见图:
如果你不成功,请看一下你找到的关键id值是 ...

感謝您的回覆!不好意思我的狀況有點多

我有自[引用-VBAProject]勾選了[microsoft internet controls]的選項(如圖1)
然後我也試著用您以百度做測試的代碼來執行看看,發現有打開百度網頁,但仍也無法自動輸入數值查詢(如圖2)

因此我再次用您提供的代碼做了修改,並重新嘗試後發現有打開百度網頁,並自動輸入數值查詢(如圖3)
但當我替換成我需要的網址及關鍵id後,仍舊是打開網頁,但無法自動輸入數值(如圖4)

我有查看過網頁原始碼,但關鍵id應該就是(如圖5)的"idno"對嗎?
另外我也查看了這個網頁的[查詢]按鈕id是什麼,但好像有兩個耶(如圖6)?
不確定是"I770711465521655"還是"btn btn-xs btn-info btn-round",是不是我不會看網頁原始碼的意思,所以一開始就打錯關鍵id?


如您有空的話,能否再幫我看一下我的問題在哪呢?
不好意思,感恩!~
1.jpg
2.jpg
3.jpg
4.jpg
5.jpg
6.jpg

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-9-22 23:36 | 显示全部楼层
zpy2 发表于 2024-9-22 16:53
Document.getelementbyid("idno").innertext="ActiveSheet.Cells(24,1)"

这是js代码,ie webbrowser 有 ...

感謝您的回覆!因您提到的專有名詞有點多,我對程式碼的理解有限並不是很懂,但"不能用innerText 要用value"以及"ie瀏覽器比較老"的問題,我有嘗試用另一個代碼,以edge瀏覽器來操作,但一樣是能開啟網頁,卻不能自動輸入數值(如圖7)
而selenium瀏覽器,因我沒用過,且網上查到的代碼更複雜,我難以操作,所以只能先用edge試試看了
如果我理解有誤,問題不是出在這的話,再勞煩您有空的話告知我,感恩~
7.jpg

TA的精华主题

TA的得分主题

发表于 2024-9-23 13:14 | 显示全部楼层
本帖最后由 prome3 于 2024-9-23 16:03 编辑

网上有人说ReadyState属性不可靠。以下代码是在楼上代码的基础上,改为等待数秒时间后输入文本并点击查询,可以改成自己的网址和控件ID后试试:


Option Explicit


Public Sub AutoSearch()

    Dim url As String
    Dim ie As SHDocVw.InternetExplorerMedium
    Dim input_box As Object
    Dim submit_button As Object
    Dim cell_value As String
    Dim seconds_elapsed As Long
   
    ' Url to nevigate to
    url = "https://www.baidu.com/"
   
    Set ie = New SHDocVw.InternetExplorerMedium
    ie.Visible = True
    ie.Navigate url

    Do  ' Wait for several seconds till page is fully loaded
        DoEvents
        Application.Wait Now + TimeSerial(0, 0, 1)
        seconds_elapsed = seconds_elapsed + 1
    Loop Until seconds_elapsed = 5

    ' Value to put into input box
    cell_value = Sheet1.Range("A1").Value
   
    Set input_box = ie.Document.getElementById("kw")
    input_box.Value = cell_value

    Set submit_button = ie.Document.getElementById("su")
    submit_button.Click

End Sub


Public Sub CloseAllIExplore()
    Shell "cmd.exe /c taskkill /f /im iexplore.exe"
End Sub

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-19 02:41 , Processed in 0.044967 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表