javascript - 如何使用getelementsbytagname提取LI值

标签 javascript html vba excel

我正在尝试在 amazon.com 上搜索产品并提取该产品的 asin。 asin 隐藏在 data-asin 标签下的 li 中。我的 excel 宏当前运行所有搜索标签选项并逐一检查亚马逊并收集产品价格。但是我需要这个函数来收集每个项目的 asin

代码如下:

Sub SearchGoogle()
Dim ie As Object
Dim form As Variant
Dim button As Variant
Dim LR As Integer
Dim var As String
Dim var1 As Object
Dim var2 As Object
LR = Cells(Rows.Count, 1).End(xlUp).Row
For x = 2 To LR
var = Cells(x, 1).Value
Set ie = CreateObject("internetexplorer.application")
ie.Visible = True
 With ie
.Visible = True
.navigate "https://www.amazon.com/s/ref=nb_sb_noss?url=search-alias%3Daps&field-keywords=" & Range("azAsin")
While Not .readyState = READYSTATE_COMPLETE
Wend
End With
'Wait some to time for loading the page
While ie.Busy
DoEvents
Wend
Application.Wait (Now + TimeValue("0:00:02"))

While ie.Busy
DoEvents
Wend

Application.Wait (Now + TimeValue("0:00:02"))
'Set var1 = ie.document.getElementsByClassName("sx-price-whole")
'Cells(x, 2).Value = var1(0).textContent
Set var2 = ie.document.getElementById("result_0").getelementsbytagname("data-asin")
MsgBox var2(0).textContent
'Cells(x, 3).Value = var2().innerText
ie.Quit
Set ie = Nothing
Next x
End Sub

当我搜索特定商品时来自 amazon.com 的 HTML 代码:

<li id="result_0" data-result-rank="0" data-asin="B006RN77MI" data-action="sx-detail-display-trigger" class="s-result-item s-result-card-for-container a-declarative celwidget  "><div class="s-item-container" style="height: 367px;"><div class="a-row a-spacing-top-micro a-spacing-micro"><div class="a-row sx-badge-region"><div class="a-row a-spacing-large"></div></div></div><div class="a-row a-spacing-base"><div aria-hidden="true" class="a-column a-span12 a-text-center s-position-relative"><a class="a-link-normal a-text-normal" href="https://www.amazon.com/Ameda-Platinum-Breast-Grounded-Power/dp/B006RN77MI/ref=sr_1_1_a_it?ie=UTF8&amp;qid=1515781416&amp;sr=8-1&amp;keywords=B006RN77MI"><img src="https://images-na.ssl-images-amazon.com/images/I/41NrM6wVJTL._AC_US200_.jpg" srcset="https://images-na.ssl-images-amazon.com/images/I/41NrM6wVJTL._AC_US200_.jpg 1x, https://images-na.ssl-images-amazon.com/images/I/41NrM6wVJTL._AC_US300_FMwebp_QL65_.jpg 1.5x, https://images-na.ssl-images-amazon.com/images/I/41NrM6wVJTL._AC_US400_FMwebp_QL65_.jpg 2x, https://images-na.ssl-images-amazon.com/images/I/41NrM6wVJTL._AC_US500_FMwebp_QL65_.jpg 2.5000x" width="200" height="200" alt="Product Details" class="s-access-image cfMarker" data-search-image-load=""></a><div class="a-section a-spacing-none a-text-center"></div></div></div><div class="a-row a-spacing-none"><div class="a-row a-spacing-mini"><a class="a-link-normal s-access-detail-page  s-color-twister-title-link a-text-normal" title="Ameda Platinum Breast Pump with Grounded Power Cord" href="https://www.amazon.com/Ameda-Platinum-Breast-Grounded-Power/dp/B006RN77MI/ref=sr_1_1_a_it?ie=UTF8&amp;qid=1515781416&amp;sr=8-1&amp;keywords=B006RN77MI"><h2 data-attribute="Ameda Platinum Breast Pump with Grounded Power Cord" data-max-rows="0" class="a-size-base s-inline  s-access-title  a-text-normal">Ameda Platinum Breast Pump with Grounded Power Cord</h2></a></div><div class="a-row a-spacing-none"><a class="a-link-normal a-text-normal" href="https://www.amazon.com/Ameda-Platinum-Breast-Grounded-Power/dp/B006RN77MI/ref=sr_1_1?ie=UTF8&amp;qid=1515781416&amp;sr=8-1&amp;keywords=B006RN77MI"><span class="a-offscreen">$1,995.00</span><span aria-hidden="true" class="a-color-base sx-zero-spacing"><span class="sx-price sx-price-large">
                        <sup class="sx-price-currency">$</sup>
                        <span class="sx-price-whole">1,995</span>
                        <sup class="sx-price-fractional">00</sup>
                    </span>
                </span></a></div><div class="a-row a-spacing-none"><span class="a-size-small a-color-price">Only 1 left in stock - order soon.</span></div><div class="a-row a-spacing-top-mini a-spacing-none"><span name="B006RN77MI">

最佳答案

在您的例子中, asin 不是标签名称,而是一个属性。为了返回值,您可以使用如下代码:

strAsin = ie.document.getElementById("result_0").getAttrubute("data-asin")

注意:这将返回一个字符串,而不是一个对象。

为防止难看的错误,首先进行测试以确认“data-asin”属性存在可能是有意义的。如下代码实现了这一点:

If ie.document.getElementById("result_0").hasAttrubute("data-asin") then
    strAsin = ie.Document.getElementById("result_0").getAttribute("data-asin")
Else
     'Do something if attribute doesn't exist
End if 

关于javascript - 如何使用getelementsbytagname提取LI值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48232136/

相关文章:

javascript - AJAX POST 请求失败

javascript - 如何完成汉堡动画?

java - 在 Tomcat 服务器中仅显示一次 HTML 表单

excel - 交换字符串中的 2 个字符

类中的 VBA 类型?多个输出变量的替代品?

javascript - 如何在 Ionic 3 中包含 .jar 或在 Apex2 中打印

javascript - 发送加载页面所需的自定义 header

html - anchor 标签 href 不工作

javascript - 图层堆叠问题

excel - 如果返回或输出超出 FOR 循环,则 EXCEL 中的自定义函数不起作用