2016-02-26 64 views
1

我一直在试图让这个代码工作在工作流程效率的目的,但我似乎无法使其正常工作。Excel亚马逊卖家Web Scraper问题

步骤: 1.登录到亚马逊卖方

  • 使用顺序在列A中的数字,并将它们置于搜索框,以搜寻
  • 查找“预计交货的元件的innerText :“并将信息刮到与订单号相邻的列B中
  • 移到下一个订单号并重复处理,直到订单号列为空。
  • 网页代码(我想要获得被高亮显示):

    enter image description here

    Option Explicit 
    
    Dim HTMLDoc As HTMLDocument 
    Dim MyBrowser As InternetExplorer 
    
    Sub MyAmazonSellereEDD() 
    
        Dim MyHTML_Element As IHTMLElement 
        Dim MyURL As String 
        Dim oSignInLink As HTMLLinkElement 
        Dim oInputEmail As HTMLInputElement 
        Dim oInputPassword As HTMLInputElement 
        Dim oInputSignInButton As HTMLInputButtonElement 
    
        'InputSearchOrder will be the destination for order numbers taken from the workbook 
        Dim InputSearchOrder As HTMLInputElement 
    
        Dim InputSearchButton As HTMLInputButtonElement 
        Dim IE As InternetExplorer 
        Dim AAOrder As Workbook 
        Dim AAws As Worksheet 
        Dim AAws2 As Worksheet 
    
        Dim R As Range 
        Dim x As Integer 
        Dim i As Long 
        Dim ar As Variant 
        Dim elems As IHTMLElementCollection 
        Dim TDelement As HTMLTableCell 
    
        Dim ExcludWords() As Variant, a As Range, b As Long, LR As Long 
    
        ExcludWords = Array("Estimated Delivery:") 
    
    
        MyURL = "https://sellercentral.amazon.com/gp/homepage.html" 
    
        Set IE = New InternetExplorer 
    
        ' Open the browser and navigate. 
        With IE 
         .Silent = True 
         .navigate MyURL 
         .Visible = True 
         Do 
          DoEvents 
         Loop Until .readyState = READYSTATE_COMPLETE 
        End With 
    
    
        ' Get the html document. 
        Set HTMLDoc = IE.document 
    
    
    
        With HTMLDoc 
         .all.Item("username").Value = "[email protected]" 
         .all.Item("password").Value = "*********" 
         .all.Item("sign-in-button").Click 
        End With 
    
         Do 
         DoEvents 
        Loop Until IE.readyState = READYSTATE_COMPLETE 
    
        Application.Wait (Now + TimeValue("0:00:08")) 
    
        'Set AAOrder = Application.Workbooks.Open("Z:\Automation Anywhere\5 Automated Tracking Imports\Amazon Prime\PrimeOrdersWithNoFulfillment.csv") 
        'Set AAws = AAOrder.Worksheets("PrimeOrdersWithNoFulfillment") 
    
    
    
    
    
        x = 2 
        'Do Until Range("A" & x) = "" 
        If Range("B" & x).Value = "" Then 
    
         'If AAws.Range("B" & x).Value = "" Then 
         'x = x + 1 
         Do Until Range("A" & x) = "" 
          Set InputSearchOrder = HTMLDoc.getElementById("sc-search-field") 
          InputSearchOrder.Value = Range("A" & x) 
    
          Set InputSearchButton = HTMLDoc.getElementsByClassName("sc-search-button")(0) 
          InputSearchButton.Click 
           Do 
           DoEvents 
          Loop Until IE.readyState = READYSTATE_COMPLETE 
          Application.Wait (Now + TimeValue("0:00:05")) 
    
    
          Set elems = HTMLDoc.getElementsByTagName("td") 
    
    
          'ExcludWords = Array("Package Weight:", "Tracking ID:", "Ship Date:", "Carrier:", "Shipping Service:") 
    
    
          i = 2 
    
          For Each TDelement In elems 
           If TDelement.className = "data-display-field" And InStr(TDelement.innerText, "Estimated Delivery:") Then 
            Range("B" & x).Value = TDelement.innerText 
            i = i + 1 
           End If 
          Next 
    
    
    
    
    
    
    
          LR = Range("B" & Rows.Count).End(xlUp).Row 
          For i = 1 To LR 
          Set a = Cells(i, "B") 
          For b = 0 To UBound(ExcludWords) 
           a.Formula = Replace((a.Formula), ExcludWords(b), "") 
            Next b 
          Next i 
    
    
         'End If 
         x = x + 1 
         Loop 
    
    
        'Loop 
        End If 
    
        Err_Clear: 
         If Err <> 0 Then 
          Err.Clear 
          Resume Next 
         End If 
    
        MsgBox ("Process is done! :)") 
    
    
        End Sub 
    

    我的问题是,当刮擦数据中,“预计交货:”并且实际估计的交付日期应该是分开的,但仍然应该包含在B列的输出数据中。它所做的只是查找并插入“Estimated Delivery:”,然后使用代码修剪这些字符按照指示。此后空间依然空白。我不确定问题是什么。

    回答

    2

    TDelement您在下面的代码部份仅包括捡“预计交货时间:”在其innerText,随着日期的部分实际上是一个独立的TDelement

    For Each TDelement In elems 
        If TDelement.className = "data-display-field" And InStr(TDelement.innerText, "Estimated Delivery:") Then 
         Range("B" & x).Value = TDelement.innerText 
         i = i + 1 
        End If 
    Next 
    

    ,因为没有任何独特用于引用TDelement的html代码中的信息(例如id,name等),其中包含您可以使用已有的引用的日期与NextSibling一起使用,以便在包含文本“Estimated交货:”。也许尝试这个(目前无法测试任何东西,但应该工作):

    For Each TDelement In elems 
        If TDelement.className = "data-display-field" And InStr(TDelement.innerText, "Estimated Delivery:") Then 
         Range("B" & x).value = TDelement.NextSibling.innerText 
         i = i + 1 
        End If 
    Next 
    
    +0

    我试过了,它抛出“VBA对象不支持此属性或方法”。我意识到它特别不能引用元素,并且我一直在尝试诸如你的解决方法。我需要更新.NextSibling.innerText工作的参考库吗? – Tak

    +0

    所以我搞乱了代码,'Range(“B”&x).value = TDelement.Children(0).innerText'是我得到交付日期信息最近的,但是提供了一个全新的一组问题,因为它向单元格添加了更多的数据,并且在第一个单元格填充了额外的数据之后,宏引发了一个对象错误。 – Tak