我正在尝试将{.3}中的.cvs文件自动添加到Power BI中。为了手动下载文件,您必须先单击“ Enviar”按钮(发送,使用葡萄牙语),然后单击“ Exportar para CSV”按钮(导出为CSV)。
我的第一个尝试是找到文件的下载链接,但事实证明它是网页链接本身。
通过阅读,我了解到单击按钮时正在发出HTTP发布请求。我试图找到一些Power BI代码的示例来进行此类请求,但是由于对主题的了解不足,因此很难理解所提供的代码。
通过分析页面的源代码,我找到了下面的代码,这可能与请求有关:
<input type="submit" name="btExportarCSV" value="Exportar para CSV" id="btExportarCSV" class="button">
有人可以帮助我了解如何使用Power BI自动获取此文件吗?
答案 0 :(得分:0)
卢卡(Lucca),我相信您是巴西人,但是无论如何,我都会用英语书写,这样人们才能理解答案,好吗?
几年来,我一直在努力抓取该网页(使用R,python和excel + vba),最后我找到了解决方案:here和here。
我在Excel + VBA中找到了一个解决方案。我在下面发帖:
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
我希望对您有帮助
最好的Felipe Ribeiro
[excel] [vba]