使用VBA从网页中获取数据
我正在尝试从该网页获取一些数据: 我希望在每个智能手机和每种合同类型的正确站点上都有完整的表格 设置一次性付款:Anschlusspreis 手机一次性付款:智能手机 总额:Gesamt 合同月付款:基本金额 手机月付:智能手机Zuzahlung 这些都存储在JavaScript部分中,JavaScript部分包含大量的字母 我正在尝试使用Excel VBA:使用VBA从网页中获取数据,vba,excel,Vba,Excel,我正在尝试从该网页获取一些数据: 我希望在每个智能手机和每种合同类型的正确站点上都有完整的表格 设置一次性付款:Anschlusspreis 手机一次性付款:智能手机 总额:Gesamt 合同月付款:基本金额 手机月付:智能手机Zuzahlung 这些都存储在JavaScript部分中,JavaScript部分包含大量的字母 我正在尝试使用Excel VBA: Sub Button1_Click() 'On Error GoTo Errorhandler Dim ie As Objec
Sub Button1_Click()
'On Error GoTo Errorhandler
Dim ie As Object, doc As Object, rng As Object, ticker As String, quote As String
Set ie = CreateObject("InternetExplorer.Application")
i = 1
'Application.StatusBar = "Your request is loading. Please wait..."
ie.navigate "http://www.vodafone.de/privat/handys-tablets-tarife/smartphone-tarife.html"
'ie.navigate ticker
Do
DoEvents
Loop Until ie.readyState = READYSTATE_COMPLETE
Set doc = ie.document
quote = doc.getElementsByID("connectionFeeVal").innerText
Cells(3, 3).Value = quote
MsgBox ("done")
'Errorhandler:
'If Err = 91 Then MsgBox "Error Message"
ie.Application.Quit
End Sub
但它在“DoEvents”上不断循环
有人知道我为什么以及如何解决这个问题吗?也许还有人知道如何从这个页面获取所有这些数据
提前谢谢。而不是:
Do
DoEvents
Loop Until ie.readyState = READYSTATE_COMPLETE
你可以试试:
Do While ie.Busy: DoEvents: Loop
Do Until ie.ReadyState = READYSTATE_COMPLETE: DoEvents: Loop
with ie
...
end with
除了使用IE自动化,您还可以使用http请求对象:
Dim oRequest As Object
Set oRequest = CreateObject("WinHttp.WinHttpRequest.5.1")
oRequest.Open "GET", "http://www.vodafone.de/privat/handys-tablets-tarife/smartphone-tarife.html"
oRequest.Send
MsgBox oRequest.ResponseText
它比IE解决方案更快,而且不需要那么多资源
如果您在代理服务器后面,则可以使用以下内容:
Const HTTPREQUEST_PROXYSETTING_PROXY = 2
Dim oRequest As Object
Set oRequest = CreateObject("WinHttp.WinHttpRequest.5.1")
oRequest.setProxy HTTPREQUEST_PROXYSETTING_PROXY, "http://proxy.intern:8080"
oRequest.Open "GET", "http://www.vodafone.de/privat/handys-tablets-tarife/smartphone-tarife.html"
oRequest.Send
MsgBox oRequest.ResponseText
当然,您必须根据您的值调整代理
由于您对德语页面感兴趣,这里还有德语的简短解释:
还解释了如何将表单的值传递给Web服务器,这可能对您也有帮助。有时DoEvents会出现问题。您也可以尝试以下三行:
Do While.IE.Busy Application.Wait DateAdd(“s”,1,Now)Loop
非常感谢,我没想到会这么容易。