VBA Excel单击href并填写表格
我想用vba从网站上获取一些数据。 我想要的数据来自此网站: 我想要代码做的是用铅笔点击紫色条 这样屏幕就会显示过滤器,然后在过滤器中填充特定的时间范围。 完成此操作后,我希望获得显示的数据 我可以导航到该网站,然后单击紫色条,这样就会出现过滤屏幕。但是我不能填写日期 这是我目前掌握的代码:VBA Excel单击href并填写表格,excel,vba,Excel,Vba,我想用vba从网站上获取一些数据。 我想要的数据来自此网站: 我想要代码做的是用铅笔点击紫色条 这样屏幕就会显示过滤器,然后在过滤器中填充特定的时间范围。 完成此操作后,我希望获得显示的数据 我可以导航到该网站,然后单击紫色条,这样就会出现过滤屏幕。但是我不能填写日期 这是我目前掌握的代码: Dim IE As New SHDocVw.InternetExplorer Dim HTMLDoc As MSHTML.HTMLDocument Dim HTMLInput As MSHTML.I
Dim IE As New SHDocVw.InternetExplorer
Dim HTMLDoc As MSHTML.HTMLDocument
Dim HTMLInput As MSHTML.IHTMLElement
Dim HTMLAs As MSHTML.IHTMLElementCollection
Dim HTMLA As MSHTML.IHTMLElement
Dim pastDate As MSHTML.IHTMLElement
Dim futuredate As MSHTML.IHTMLElement
IE.Visible = True
IE.Navigate "https://www.uitvoeringarbeidsvoorwaardenwetgeving.nl/mozard/!suite16.scherm1168?mGmr=66"
Do While IE.ReadyState <> READYSTATE_COMPLETE
Loop
Set HTMLDoc = IE.Document
Set HTMLAs = HTMLDoc.getElementsByTagName("a")
For Each HTMLA In HTMLAs
'Debug.Print HTMLA.className, HTMLA.getAttribute("href"), HTMLA.getAttribute("rel"), HTMLA.innerText
If HTMLA.getAttribute("href") = "https://www.uitvoeringarbeidsvoorwaardenwetgeving.nl/mozard/!suite16.scherm1168?mGmr=66#editmodal" Then
HTMLA.Click
Exit For
End If
Next HTMLA
Do While IE.ReadyState <> 4 Or IE.Busy:
DoEvents: Loop
Set HTMLInput = HTMLDoc.getElementById("frm_FKMT_B931_542_823883_dva_id1")
HTMLInput.Value = "01-01-2020" 'THIS GIVES AN ERROR?
Dim IE作为新的SHDocVw.InternetExplorer
将HTMLDoc设置为MSHTML.HTMLDocument
将HTMLInput设置为MSHTML.IHTMLElement
将HTMLAs设置为MSHTML.IHTMLElementCollection
将HTMLA设置为MSHTML.IHTMLElement
将pastDate设置为MSHTML.IHTMLElement
将futuredate设置为MSHTML.IHTMLElement
可见=真实
即“导航”https://www.uitvoeringarbeidsvoorwaardenwetgeving.nl/mozard/!suite16.scherm1168?mGmr=66“
在IE.ReadyState ReadyState\u完成时执行此操作
环
设置HTMLDoc=IE.Document
设置HTMLAs=HTMLDoc.getElementsByTagName(“a”)
对于HTMLAs中的每个HTMLA
'Debug.Print HTMLA.className、HTMLA.getAttribute(“href”)、HTMLA.getAttribute(“rel”)、HTMLA.innerText
如果HTMLA.getAttribute(“href”)=“https://www.uitvoeringarbeidsvoorwaardenwetgeving.nl/mozard/!suite16.scherm1168?mGmr=66#editmodel“那么
HTMLA。点击
退出
如果结束
下一个HTMLA
在IE.ReadyState 4或IE.Busy时执行以下操作:
DoEvents:循环
设置HTMLInput=HTMLDoc.getElementById(“frm\u FKMT\u B931\u 542\u 823883\u dva\u id1”)
HTMLInput.Value=“01-01-2020”'这会给出一个错误吗?
最后一行代码给出了一个错误,我不明白为什么
这是我要更改其值的网站中的HTML代码:
<input name="FKMT_B931_542_823883_dva" class="datumveld form-control" id="frm_FKMT_B931_542_823883_dva_id1" type="text" pattern="(0[1-9]|1[0-9]|2[0-9]|3[01]).(0[1-9]|1[012]).[0-9]{4}">
感谢并为这个不公平或问得不好的问题感到抱歉,如果你们还需要什么,请随时提问
谢谢 这是填充第一个日期字段的示例。IDs似乎不太稳定。
注意:输入的日期有一个模式
pattern=“(0[1-9]| 1[0-9]| 2[0-9]| 3[01])(0[1-9]| 1[012])[0-9]{4}”
有一些html事件。我不知道是否有必要触发它们以使对话真正起作用
你检查过这个页面在IE中是否工作了吗
Sub OpenAndFillForm()
Dim browser As Object
Dim url As String
Dim nodeToClick As Object
Dim nodeForm As Object
Dim nodeFirstDate As Object
url = "https://www.uitvoeringarbeidsvoorwaardenwetgeving.nl/mozard/!suite16.scherm1168?mGmr=66"
Set browser = CreateObject("internetexplorer.application")
browser.Visible = True
browser.navigate url
Do Until browser.readyState = 4: DoEvents: Loop
Set nodeToClick = browser.document.getElementByID("tabel2").getElementsByTagName("a")(0)
nodeToClick.Click
Application.Wait Now + TimeValue("00:00:02")
Set nodeForm = browser.document.getElementByID("tabel12")
Set nodeFirstDate = nodeForm.getElementsByClassName("datumveld")(0)
nodeFirstDate.Value = "31-12-2019"
End Sub
第一个标记很简单:
Set e=IE.document.getElementByID(“tabel2”).GetElementsByTagName(“a”)(0)
下一行只是单击分隔的元素:e.click
谢谢!我算出了点击部分,现在我无法在startdate事件中填写我想要的值,尽管它被设置为输入,我可以得到ID谢谢你的回答!我将尝试并检查它是否有效!该页面在IE中工作!你的代码成功了!但是我不明白为什么我的代码不起作用?你能解释一下这个值吗?就像我说的ID看起来不太稳定。这是您的代码frm\u FKMT\u B931\u 542\u 823883\u dva\u id1中的ID,这是“我的”html代码frm\u FKMT\u B931\u 542\u 823497\u dva\u id1中相同元素的ID。它们是不同的,因为服务器单独生成它们。所以你不能用它们来识别元素。每次你看到ID或css类的“神秘”名称时,不要相信。啊,非常感谢!一开始我不明白你说的ID不稳定是什么意思,但现在我明白了!:)谢谢你的帮助!如果我还有什么问题可以问你吗please@T.M.谢谢我是新来的,所以谢谢你的帮助!:)我还有一个问题,我正在从网站上获取数据,但是当你向下滚动时,网站会更新数据,所以我需要向下滚动等待,向下滚动等待,然后获取数据,现在有人知道如何进行此操作吗