Power BI - 从 post 请求中获取数据
Power BI - Get data from post request
我正在尝试将 https://www2.cetip.com.br/TitulosCRI 中的 .cvs 文件自动导入到 power BI 中。为了手动下载文件,您必须首先单击显示 "Enviar" 的按钮(发送,葡萄牙语),然后单击显示 "Exportar para CSV" 的按钮(导出为 CSV)。
我的第一个尝试是找到文件的下载 link,但结果是网页 link 本身。
阅读相关内容后,我了解到当我单击按钮时可能会发出 HTTP post 请求。我试图找到一些 Power BI 代码示例来提出此类请求,但我对该主题缺乏了解,因此很难理解所提供的代码。
通过分析页面的源代码,我发现如下代码,可能与请求有关:
<input type="submit" name="btExportarCSV" value="Exportar para CSV" id="btExportarCSV" class="button">
任何人都可以帮助我了解如何使用 Power BI 自动获取此文件吗?
Lucca,我相信你来自巴西,但无论如何我会用英文写,这样人们就可以理解答案,好吗?
多年来我一直在努力抓取这个网页(使用 R,python 和 excel+vba),最后我找到了一个解决方案: and .
我在 Excel + VBA 内找到了解决方案。我 post 吼叫:
Option Explicit
Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" _
(ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, _
ByVal lpsz2 As String) As Long
'------------------------------------------------------
Public Sub AddReference()
ThisWorkbook.VBProject.References.AddFromFile "C:\Windows\SysWOW64\UIAutomationCore.dll"
End Sub
'-------------------------------------------------------------'
Sub baixa_titulos_CRI()
'Dimensioning the vars
Dim IE As Object
Dim county As String
Dim htmlDoc As Object
Dim sURL As String
Dim buttonclick As Object
Dim ShowMore As Object
Dim exportar_para_CSV As Object
'----------------'
Set IE = CreateObject("internetexplorer.application")
sURL = "https://www2.cetip.com.br/TitulosCRI"
With IE
.Navigate (sURL)
.Visible = True
End With
'I put some waits to run the webpage properly.
WaitIE2 IE, 2000
Set htmlDoc = IE.Document
WaitIE2 IE, 1000
'here it will press the button "enviar"
Set button_send = htmlDoc.getElementById("btEnviar")
button_send.Click
WaitIE2 IE, 2000
'here it will press the button "exportar para CSV"
Set exportar_para_CSV = htmlDoc.getElementById("btExportarCSV")
exportar_para_CSV.Click
WaitIE2 IE, 2000
'this is the solution that I found to press the button "Salvar" in IE.
'I also save the directory that I wanted as default so IE save in the path properly.
'I still couldnt find a solution to name of the file and to the path to save.
'The solution I adapted is to list.files and the date it was saved to compare with older files (as I think you'll do it also I mentioned it here)
Dim o As IUIAutomation
Dim e As IUIAutomationElement
Set o = New CUIAutomation
Dim h As Long
h = IE.Hwnd
If h = 0 Then Exit Sub
Set e = o.ElementFromHandle(ByVal h)
Dim iCnd As IUIAutomationCondition
Set iCnd = o.CreatePropertyCondition(UIA_NamePropertyId, "Save")
Dim Button As IUIAutomationElement
Set Button = e.FindFirst(TreeScope_Subtree, iCnd)
Dim InvokePattern As IUIAutomationInvokePattern
Set InvokePattern = Button.GetCurrentPattern(UIA_InvokePatternId)
InvokePattern.Invoke
WaitIE2 IE, 2000
IE.Quit
Set IE = Nothing
End Sub
'-----------------------------------------------------------
Sub WaitIE2(IE As Object, Optional time As Long = 250)
Dim i As Long
Do
Sleep time
Debug.Print CStr(i) & vbTab & "Ready: " & CStr(IE.ReadyState = 4) & _
vbCrLf & vbTab & "Busy: " & CStr(IE.Busy)
i = i + 1
Loop Until IE.ReadyState = 4 Or Not IE.Busy
End Sub
希望对你有帮助
最好的,费利佩·里贝罗
[excel] [vba]
我正在尝试将 https://www2.cetip.com.br/TitulosCRI 中的 .cvs 文件自动导入到 power BI 中。为了手动下载文件,您必须首先单击显示 "Enviar" 的按钮(发送,葡萄牙语),然后单击显示 "Exportar para CSV" 的按钮(导出为 CSV)。
我的第一个尝试是找到文件的下载 link,但结果是网页 link 本身。
阅读相关内容后,我了解到当我单击按钮时可能会发出 HTTP post 请求。我试图找到一些 Power BI 代码示例来提出此类请求,但我对该主题缺乏了解,因此很难理解所提供的代码。
通过分析页面的源代码,我发现如下代码,可能与请求有关:
<input type="submit" name="btExportarCSV" value="Exportar para CSV" id="btExportarCSV" class="button">
任何人都可以帮助我了解如何使用 Power BI 自动获取此文件吗?
Lucca,我相信你来自巴西,但无论如何我会用英文写,这样人们就可以理解答案,好吗?
多年来我一直在努力抓取这个网页(使用 R,python 和 excel+vba),最后我找到了一个解决方案:
我在 Excel + VBA 内找到了解决方案。我 post 吼叫:
Option Explicit
Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" _
(ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, _
ByVal lpsz2 As String) As Long
'------------------------------------------------------
Public Sub AddReference()
ThisWorkbook.VBProject.References.AddFromFile "C:\Windows\SysWOW64\UIAutomationCore.dll"
End Sub
'-------------------------------------------------------------'
Sub baixa_titulos_CRI()
'Dimensioning the vars
Dim IE As Object
Dim county As String
Dim htmlDoc As Object
Dim sURL As String
Dim buttonclick As Object
Dim ShowMore As Object
Dim exportar_para_CSV As Object
'----------------'
Set IE = CreateObject("internetexplorer.application")
sURL = "https://www2.cetip.com.br/TitulosCRI"
With IE
.Navigate (sURL)
.Visible = True
End With
'I put some waits to run the webpage properly.
WaitIE2 IE, 2000
Set htmlDoc = IE.Document
WaitIE2 IE, 1000
'here it will press the button "enviar"
Set button_send = htmlDoc.getElementById("btEnviar")
button_send.Click
WaitIE2 IE, 2000
'here it will press the button "exportar para CSV"
Set exportar_para_CSV = htmlDoc.getElementById("btExportarCSV")
exportar_para_CSV.Click
WaitIE2 IE, 2000
'this is the solution that I found to press the button "Salvar" in IE.
'I also save the directory that I wanted as default so IE save in the path properly.
'I still couldnt find a solution to name of the file and to the path to save.
'The solution I adapted is to list.files and the date it was saved to compare with older files (as I think you'll do it also I mentioned it here)
Dim o As IUIAutomation
Dim e As IUIAutomationElement
Set o = New CUIAutomation
Dim h As Long
h = IE.Hwnd
If h = 0 Then Exit Sub
Set e = o.ElementFromHandle(ByVal h)
Dim iCnd As IUIAutomationCondition
Set iCnd = o.CreatePropertyCondition(UIA_NamePropertyId, "Save")
Dim Button As IUIAutomationElement
Set Button = e.FindFirst(TreeScope_Subtree, iCnd)
Dim InvokePattern As IUIAutomationInvokePattern
Set InvokePattern = Button.GetCurrentPattern(UIA_InvokePatternId)
InvokePattern.Invoke
WaitIE2 IE, 2000
IE.Quit
Set IE = Nothing
End Sub
'-----------------------------------------------------------
Sub WaitIE2(IE As Object, Optional time As Long = 250)
Dim i As Long
Do
Sleep time
Debug.Print CStr(i) & vbTab & "Ready: " & CStr(IE.ReadyState = 4) & _
vbCrLf & vbTab & "Busy: " & CStr(IE.Busy)
i = i + 1
Loop Until IE.ReadyState = 4 Or Not IE.Busy
End Sub
希望对你有帮助
最好的,费利佩·里贝罗
[excel] [vba]