我的任务是对网站进行硬编码增强型电子商务跟踪(不使用任何代码管理)。任务是简单包括“添加到购物篮”。
我期望用一些变量定义数据字段,而不是字符串。
因此,给定this web page,以下脚本会提取我期待的相关数据吗? (SKU,产品名称,价格和数量选择)
// Called when a product is added to a shopping cart.
function addToCart(product) {
ga('ec:addProduct', {
'id': document.getElementsByClassName(‘sku’).text,
'name’: document.getElementsByClassName('pdHero-name h4’).text,
'price’: document.getElementById('salePrice').text,
'quantity’: document.getElementByClassName(‘oakley-custom-selectInner’).text
});
ga('ec:setAction', 'add');
ga('send', 'event', 'UX', 'click', 'add to cart'); // Send data using an event.
}

答案 0 :(得分:0)
当我在页面上运行它们时,上面的所有片段都会返回错误,因此我会尝试它们目前无法正常工作。
最简单的确认方法是在网络浏览器中打开网页,然后尝试在javascript控制台中运行代码段(例如 cmd + alt + j 在Chrome for Mac中。
如果可以的话,通过id
或name
抓取几乎肯定会更好,因为这些因为无聊的原因而不太可能改变 - class
主要用于样式等等它很可能在页面样式发生变化时发生变化。
类名和名称引用html元素的不同部分:
<div class="bold" name="first" id="firstId">here is some value</div>
<div class="bold" name="second" id="secondId">here is a second value</div>
getElementsByClassName('bold')
检查class=
,并在列表中返回上述div的两个 getElementsByName('first')
检查name=
,并且只返回第一个(但在列表中,因为理论上 可能多个具有该名称的元素)getElementById('secondId')
检查id=
,并仅返回第二个。对于前两个函数,在访问任何其他属性之前,您始终需要访问第一个元素,例如: getElementsByName('first')[0].innerText
,但请注意,如果页面中的 no 元素具有该名称,则会引发异常。
另一点需要注意的是:看起来你的代码块中的一堆引号已经被智能引号所取代,如果你在实际代码中使用它们将不起作用(例如‘
或{{ 1}}而不是’
)。如果你在Mac上工作,我会完全推荐turning off smart quotes。
深入研究这个问题可能过于具体,无法对Stack Overflow有用,但如果您对某个字段有任何特殊困难,可能会将其作为单独的问题发布。