Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/91.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html lls rng.Value=currentColumn.outerText 设置rng=rng偏移量(,1) i=i+1 下一列 outputRow=outputRow+1 设置rng=rng偏移量(1,-i) i=0 下一行 Application.ScreenUpdating=True 端接头_Html_Vba_Excel_Web Scraping - Fatal编程技术网

Html lls rng.Value=currentColumn.outerText 设置rng=rng偏移量(,1) i=i+1 下一列 outputRow=outputRow+1 设置rng=rng偏移量(1,-i) i=0 下一行 Application.ScreenUpdating=True 端接头

Html lls rng.Value=currentColumn.outerText 设置rng=rng偏移量(,1) i=i+1 下一列 outputRow=outputRow+1 设置rng=rng偏移量(1,-i) i=0 下一行 Application.ScreenUpdating=True 端接头,html,vba,excel,web-scraping,Html,Vba,Excel,Web Scraping,输出: Option Explicit Declare PtrSafe Sub sleep Lib "kernel32" Alias "Sleep" (ByVal dwmilliseconds As Long) Public Sub VIES2() Application.ScreenUpdating = False Dim IE As Object 'Uruchomienie Internet Explorera i wstrzymanie dalszej akcj

输出:

Option Explicit
Declare PtrSafe Sub sleep Lib "kernel32" Alias "Sleep" (ByVal dwmilliseconds As Long)

Public Sub VIES2()
    Application.ScreenUpdating = False
    Dim IE As Object

    'Uruchomienie Internet Explorera i wstrzymanie dalszej akcji az uzyska stan gotowosci
    Set IE = CreateObject("InternetExplorer.Application")
    IE.Visible = True
    IE.navigate "http://ec.europa.eu/taxation_customs/vies/?locale=pl"

    Do While IE.ReadyState <> 4: DoEvents: Loop

    'Wypelnienie formularza odpowiednimi wartosciami i klikniecie przycisku sprawdzenia
    IE.document.getElementById("countryCombobox").Value = "IT"
    IE.document.getElementById("number").Value = "01802840023"
    IE.document.getElementById("requesterCountryCombobox").Value = "IT"
    IE.document.getElementById("requesterNumber").Value = "01802840023"
    IE.document.getElementById("submit").Click

    sleep (5000) 'or increase to 10000
    Dim tbl  As Object

    Set tbl = IE.document.getElementById("vatResponseFormTable")

    Dim ws As Worksheet
    Set ws = ActiveWorkbook.Worksheets.Add
    ws.Name = "Results"
    Dim rng As Range, currentRow As Object, currentColumn As Object, i As Long, outputRow As Long

        outputRow = outputRow + 1
        Set rng = ws.Range("B" & outputRow)

        For Each currentRow In tbl.Rows
            For Each currentColumn In currentRow.Cells
                rng.Value = currentColumn.outerText
                Set rng = rng.Offset(, 1)
                i = i + 1
            Next currentColumn
            outputRow = outputRow + 1
            Set rng = rng.Offset(1, -i)
            i = 0
        Next currentRow
        Application.ScreenUpdating = True
End Sub

尽管QHarr的解决方案在我这方面起到了作用,但我在脚本中提供了另一个没有硬编码延迟的解决方案

使用IE作为您的问题是:

Sub Get_Data()
    Dim HTML As HTMLDocument, post As Object, elems As Object
    Dim elem As Object, r&, c&

    With New InternetExplorer
        .Visible = False
        .navigate "http://ec.europa.eu/taxation_customs/vies/?locale=pl"
        While .Busy = True Or .readyState < 4: DoEvents: Wend
        Set HTML = .document

        With HTML
            .getElementById("countryCombobox").Value = "IT"
            .getElementById("number").Value = "01802840023"
            .getElementById("requesterCountryCombobox").Value = "IT"
            .getElementById("requesterNumber").Value = "01802840023"
            .getElementById("submit").Click

            Do: Set post = .getElementById("vatResponseFormTable"): DoEvents: Loop While post Is Nothing

            For Each elems In post.Rows
                For Each elem In elems.Cells
                    c = c + 1: Cells(r + 1, c) = elem.innerText
                Next elem
                c = 0: r = r + 1
            Next elems
        End With
        .Quit
    End With
End Sub
使用
xmlhttp
请求(比IE快得多):

要添加到库中的引用:

1. Microsoft Internet Controls
2. Microsoft HTML Object Library
1. Microsoft XML, V6
2. Microsoft HTML Object Library

虽然QHarr的解决方案在我这方面是可行的,但我在脚本中提供了另一个没有硬编码延迟的解决方案

使用IE作为您的问题是:

Sub Get_Data()
    Dim HTML As HTMLDocument, post As Object, elems As Object
    Dim elem As Object, r&, c&

    With New InternetExplorer
        .Visible = False
        .navigate "http://ec.europa.eu/taxation_customs/vies/?locale=pl"
        While .Busy = True Or .readyState < 4: DoEvents: Wend
        Set HTML = .document

        With HTML
            .getElementById("countryCombobox").Value = "IT"
            .getElementById("number").Value = "01802840023"
            .getElementById("requesterCountryCombobox").Value = "IT"
            .getElementById("requesterNumber").Value = "01802840023"
            .getElementById("submit").Click

            Do: Set post = .getElementById("vatResponseFormTable"): DoEvents: Loop While post Is Nothing

            For Each elems In post.Rows
                For Each elem In elems.Cells
                    c = c + 1: Cells(r + 1, c) = elem.innerText
                Next elem
                c = 0: r = r + 1
            Next elems
        End With
        .Quit
    End With
End Sub
使用
xmlhttp
请求(比IE快得多):

要添加到库中的引用:

1. Microsoft Internet Controls
2. Microsoft HTML Object Library
1. Microsoft XML, V6
2. Microsoft HTML Object Library

大多数情况下,如果没有REST/SOAP来完成这类任务,您应该进行搜索。 使用
internetexplorer
实例进行此操作完全是一种过度使用

试试这个简单的函数,它使用
SOAP
服务验证增值税号码:

Function IsVatValid(country_code, vat_number)

Dim objHTTP         As Object
Dim xmlDoc          As Object

Set objHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
sURL = "http://ec.europa.eu/taxation_customs/vies/services/checkVatService"

sEnv = "<s11:Envelope xmlns:s11='http://schemas.xmlsoap.org/soap/envelope/'>" & _
               "<s11:Body>" & _
                    "<tns1:checkVat xmlns:tns1='urn:ec.europa.eu:taxud:vies:services:checkVat:types'>" & _
                    "<tns1:countryCode>" & country_code & "</tns1:countryCode>" & _
                    "<tns1:vatNumber>" & vat_number & "</tns1:vatNumber>" & _
                    "</tns1:checkVat>" & _
               "</s11:Body>" & _
               "</s11:Envelope>"


objHTTP.Open "Post", sURL, False
objHTTP.setRequestHeader "Content-Type", "text/xml"
objHTTP.setRequestHeader "SOAPAction", "checkVatService"
objHTTP.send (sEnv)
objHTTP.waitForResponse

Set xmlDoc = CreateObject("HTMLFile")
xmlDoc.body.innerHTML = objHTTP.responsetext

IsVatValid = CBool(xmlDoc.getElementsByTagName("valid")(0).innerHTML)

Set xmlDoc = Nothing
Set objHTTP = Nothing

End Function

大多数情况下,如果没有REST/SOAP来完成这类任务,您应该进行搜索。 使用
internetexplorer
实例进行此操作完全是一种过度使用

试试这个简单的函数,它使用
SOAP
服务验证增值税号码:

Function IsVatValid(country_code, vat_number)

Dim objHTTP         As Object
Dim xmlDoc          As Object

Set objHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
sURL = "http://ec.europa.eu/taxation_customs/vies/services/checkVatService"

sEnv = "<s11:Envelope xmlns:s11='http://schemas.xmlsoap.org/soap/envelope/'>" & _
               "<s11:Body>" & _
                    "<tns1:checkVat xmlns:tns1='urn:ec.europa.eu:taxud:vies:services:checkVat:types'>" & _
                    "<tns1:countryCode>" & country_code & "</tns1:countryCode>" & _
                    "<tns1:vatNumber>" & vat_number & "</tns1:vatNumber>" & _
                    "</tns1:checkVat>" & _
               "</s11:Body>" & _
               "</s11:Envelope>"


objHTTP.Open "Post", sURL, False
objHTTP.setRequestHeader "Content-Type", "text/xml"
objHTTP.setRequestHeader "SOAPAction", "checkVatService"
objHTTP.send (sEnv)
objHTTP.waitForResponse

Set xmlDoc = CreateObject("HTMLFile")
xmlDoc.body.innerHTML = objHTTP.responsetext

IsVatValid = CBool(xmlDoc.getElementsByTagName("valid")(0).innerHTML)

Set xmlDoc = Nothing
Set objHTTP = Nothing

End Function


您想从目标页面中刮取什么?该页面验证给定的税务ID是否为活动ID。如果是正面验证:Tak,数字增值税aktywny identityficator zapytania Wapiaaawk ftvgN如果是负面验证:Nieważny数字增值税dla transakcji Transcaniciznych w obrębie UE()。为什么要粘贴
html元素
?只需尝试粘贴可见文本的部分。顺便说一句,当你的脚本出现在新页面上时,我没有看到任何等待。只有这部分
Tak,numer-VAT-aktywny
或与之连接的表格数据?因为,我可以看到您在脚本中尝试了
标记名(“表”)
。根据结果,文本“Tak,numer VAT aktywny”,然后是唯一的搜索标识号,即“WAPIAAAWK iaFNr”,或者只是Nieważny numer VAT dla TRANSAKJI TRANSANICZNYCH w obręUE(więcej informacji można znaleźćw“Najczęściej zadawanych pytaniach”-pytania 7、11、12、13和20)。此时的脚本并非针对目标内容-最初我只是尝试如何实现这一点(我正在学习VBA)但我意识到,我得到的内容与屏幕上和HTML中实际显示的内容完全不同。你想从目标页面中获取什么?该页面验证给定的税号是否为活动税号。如果是积极验证:Tak,数字VAT aktywny identifikator zapytania Wapiaaawk ftvgN如果是负v验证:Nieważny数字增值税dla交易违规行为。为什么要粘贴
html元素
?只需尝试粘贴可见文本的部分。Btaw,我看不到脚本中出现新页面时有任何等待。只有这部分
Tak、numer-VAT-aktywny
或连接到它的表格数据?因为我可以看到您尝试了
标记名(“table”)
在脚本中。根据结果,输入文本“Tak,numer VAT aktywny”,然后输入唯一的搜索标识号,即“wapiaaawk iaFNr”或Nieważny numer VAT dla transakcji incrafanicznych w obrębie UE(więcej informacji można znaleźćwściez zadawanych pytaniach)-Pytanich 7、11、12、13、20)。此时的脚本不是针对目标内容的-最初我只是尝试了如何实现这一点(我正在学习VBA)但我意识到,我获取的内容与屏幕上和HTML中实际显示的内容完全不同。您尝试过上述内容吗?在我的电脑上,即使有10000个,我也需要运行时错误“424”对象。我假设它表示id为“vatResponseFormTable”的元素缺少。当我添加部件以显示类元素“布局内容”中包含的内容时它再次显示了上一页中的所有内容…您是否尝试增加睡眠时间值?您可能会有一个缓慢加载的页面。如果您在代码窗口大小为一半的情况下逐步完成此操作,您应该能够监视事件并看到…是的,我尝试了。我刚才尝试了50000次,但不幸的是仍然没有任何结果。是否有可能与此有关Excel/IE/OS版本?您是否尝试过上述操作?在我的电脑上,即使有10000个,我仍需要运行时错误'424'对象。我假设这意味着缺少id为“vatResponseFormTable”的元素。当我添加部件以显示类元素“layout content”中包含的内容时它再次显示了上一页中的所有内容…您是否尝试增加睡眠时间值?您可能会有一个缓慢加载的页面。如果您在代码窗口大小为一半的情况下逐步完成此操作,您应该能够监视事件并看到…是的,我尝试了。我刚才尝试了50000次,但不幸的是仍然没有任何结果。是否有可能与此有关Excel/IE/OS版本?很好。再加上我的一个版本。如果可以的话,我通常会回答这些问题,但我会等待你或TechScript/OmegaStripes给出一个我可以学习的非常好的答案。我仍然在与你提到的queryselector进行斗争。我非常高兴知道你已经找到了我最喜欢的巨人。
TechScript
是我的vba大师之一,在我需要帮助的时候他帮了我很多。非常感谢你们两位:)SIM卡是完美的工作解决方案,QHarr是引导我找到一个几乎可以工作的解决方案——我仍然不明白为什么在我这一头,在你的代码和我的代码中都使用了中断或确认文本框,而设置长达一分钟的等待点并不是:(很好。另外还有我的一个。如果可以的话,我通常会回答这些问题,但要等你或tehscript/Omegalipes来