使用Javascript从脚本标记中抓取信息

使用Javascript从脚本标记中抓取信息,javascript,web-scraping,Javascript,Web Scraping,我正在尝试从网页上的脚本标记中获取信息。我已经知道了如何获取信息,但我不知道如何将其操纵到数据对象中 我能够使用document.querySelector(x.innerHTML)获取信息。下面是显示的innerHTML(第一部分似乎没有格式化为代码) " Y=YUI(YUI\U配置)。使用( “squarespace商业分析” function(Y) { Y.on('domready', function() { Y.Squarespace.CommerceAnalytics.c

我正在尝试从网页上的脚本标记中获取信息。我已经知道了如何获取信息,但我不知道如何将其操纵到数据对象中

我能够使用document.querySelector(x.innerHTML)获取信息。下面是显示的innerHTML(第一部分似乎没有格式化为代码)

" Y=YUI(YUI\U配置)。使用( “squarespace商业分析”

function(Y) {
  Y.on('domready', function() {
    Y.Squarespace.CommerceAnalytics.checkoutConfirmed({'id':'12345676','orderNumber':'00065','websiteId':'12345678','purchasedCartId':'1234567','testMode':true,'grandTotal':{'currencyCode':'USD','value':3239,'decimalValue':'32.39','fractionalDigits':2},'grandTotalFormatted':'$32.39','subtotal':{'currencyCode':'USD','value':2300,'decimalValue':'23.00','fractionalDigits':2},'subtotalFormatted':'$23.00','taxTotal':{'currencyCode':'USD','value':204,'decimalValue':'2.04','fractionalDigits':2},'taxTotalFormatted':'$2.04','shippingTotal':{'currencyCode':'USD','value':735,'decimalValue':'7.35','fractionalDigits':2},'shippingTotalFormatted':'$7.35','billingDetails':{'customer':{'address':{'city':'New York','region':'NY','country':'United States'}}},'items':[{'sku':'123456','productName':'This is a Product','unitPrice':{'currencyCode':'USD','value':2300,'decimalValue':'23.00','fractionalDigits':2},'quantity':1}]});
  });
});
"


这段代码显示了我得到的innerHTML,我希望将每个数据项(id、orderNumber、productName等)格式化为一个对象,这样我就可以使用GTM更好地跟踪电子商务。如果用
替换所有
,我不知道如何以我需要的方式操作它“
s,这将是可以解析的JSON,因此如果使用正则表达式将
checkoutconfirm
)匹配,您可以提取几乎JSON,将其转换为JSON,然后对其进行解析:

const html=document.querySelector('script[type=“dontexecute”]”)。innerHTML;
const singleQuotedJSON=html.match(/checkoutConfirmed\(.+?)\;/)[1];
const actualJSON=singleQuotedJSON.replace(/“/g,”);
const obj=JSON.parse(actualJSON);
console.log(obj);
Y=YUI(YUI\u配置)。使用(
“squarespace商业分析”,
功能(Y){
Y.on('domready',function(){
Y.Squarespace.CommerceAnalytics.CheckOutConfirmmed({'id':'12345676','orderNumber':'00065','websiteId':'12345678','PurchasedPartId':'1234567','testMode':true,'grandTotal':{'currencyCode':'USD','value':3239,'decimalValue':'32.39','FractalGits':2},'grandTotalFormatted':'32.39','subtotal':{'currencyCode':'USD','value':2300,'decimalValue':'23.00','TaxTotalGits':2},'subtotalFormatted':'23.00','taxTotal':{'currencyCode':'USD','value','value':204,'decimalValue':'2.04','taxTotalFormatted':'2.04','shippingTotal':{'currencyCode':'USD','value','735,'decimalValue':'7.35','TaxTotalGits'2},'shippingTotalFormatted':'7.35美元','billingDetails':{'customer':{'address':{'city':'New York','region':'NY','country':'United':'United value':'USD','value':2300,'decimalValue':'23.00','Fractildis':[{'sku':'123456','productName':'这是一种产品','unitPrice':{'currencyCode':'USD','value','2300,'decimalValue':'23.00','decimalValue','2});
});

})
嗨,谷歌搜索出来的开发者!CertainPerformance的答案是一般抓取的最佳答案,但如果您所关心的只是在给定的订单确认页面上获取此特定的Squarespace订单详细信息,下面是您想要的对象的快速路径:

Y.Squarespace.CommerceAnalytics._yuievt.events["commerceTrack:commerce-checkout-confirmed"].details[0]

玩得开心!=)

嘿,非常感谢!这看起来很接近,但有几件事。首先,当我使用console.log(actualJSON)时我没有在控制台中看到双引号。其次,看起来对象的格式可能很奇怪?我不确定。客户信息似乎没有输出,当我尝试obj.sku时,它没有定义。我复制了代码,直接从您的问题中刮取-如果您得到的输出与您按下时的输出不同”运行代码段"在上面的答案中,那么实际站点上的代码一定与您发布的代码不同。我考虑过这一点,但即使我将您的标记复制为我正在提取的HTML,codePen似乎仍然与您上面的答案的格式不同。我将看看是否可以将输出添加到我的问题中。如果您将我链接到codePen,我可以使用它再看一看,看看是什么原因导致了这些不一致性对我来说也是一样的。Codepen的自定义控制台不同于Stack Snippets的自定义控制台,但记录的对象基本上还是一样的,只是呈现方式不同而已。在浏览器控制台中检查记录的对象,它们应该是相同的