淘宝购物车信息获取

Get selected items in Taobao cart

// ==UserScript==
// @name         淘宝购物车信息获取
// @namespace    http://tampermonkey.net/
// @version      0.61
// @description  Get selected items in Taobao cart
// @author       You
// @match        https://cart.taobao.com/*
// @grant        GM_setClipboard
// @license MIT
// ==/UserScript==

(function () {
  "use strict";
  console.log(`Title: `);
  // 创建一个按钮
  let button = document.createElement("button");
  button.textContent = "Get Cart Info";
  button.style.position = "fixed";
  button.style.top = "0";
  button.style.right = "0";
  button.style.zIndex = "9999";
  button.style.fontSize = "20px";
  // button 美化
  button.style.padding = "10px";
  button.style.border = "none";
  button.style.backgroundColor = "#f40";
  button.style.color = "#fff";
  button.style.cursor = "pointer";
  button.style.outline = "none";

  document.body.appendChild(button);
  // json
  let json = {
    items: [],
  };
  // 添加点击事件监听器
  button.addEventListener("click", function () {
    // 获取已经勾选的商品
    let selectedItems = document.querySelectorAll(".trade-cart-item-info-checked");

    // 遍历每一个商品
    for (let item of selectedItems) {
      // 判断是否为空,如果为空则跳过
      // if (
      //   item.parentNode.parentNode.parentNode.parentNode.querySelector(
      //     ".item-pic.J_ItemPic.img-loaded > a"
      //   ) === null
      // ) {
      //   // 跳过
      //   continue;
      // }
      // 获取商品名称
      let title = item
        .querySelector(".trade-cart-item-detail> div > a")
        .getAttribute("title");

      // 获取商品url
      let url = item.querySelector(".trade-cart-item-detail> div > a").getAttribute("href");
            console.log(
       title,url
      );
      // img url
      let img_url = item.querySelector(".trade-cart-item-detail> a > img").src;

      
      // 类型  .trade-cart-item-info-checked > div > div.trade-cart-item-sku.sku--amddnLro > div > div
          let cate = item.querySelector(".trade-cart-item-sku > div > div").textContent.trim();

      // let cate = item.parentNode.parentNode.parentNode.parentNode.querySelector(
      //   ".item-props.item-props-can"
      // );
      // // 遍历类型中的每一个属性 sku-line
      // let cate_str = "";
      // if (cate) {
      //   for (let cate_item of cate.querySelectorAll(".sku-line")) {
      //     cate_str += cate_item.textContent.trim() + "; ";
      //   }
      // }
      //单价  J_Price price-now 的文本内容
      var elements = item.querySelectorAll(".trade-price-container");  
      if (elements.length > 0) {  
          // 使用 length - 1 来获取最后一个元素的索引  
          var priceElement = elements[elements.length - 1];  
        
          // 假设你想获取这个元素的文本内容  
          // var content = lastElement.textContent || lastElement.innerText; // 对于IE浏览器,可能需要innerText  
        
          // console.log(content);  
      } else {  
          console.log("没有找到匹配的元素");  
      }

      let price = priceElement.textContent.trim().replace("优惠价","").replace("¥","");
      
      //数量 text text-amount J_ItemAmount 的value
      let num = item.querySelector(
       " .trade-cart-item-quantity > div > input "
      ).value;
// console.log(value);
      // 总价 J_ItemSum number 的文本内容
      let total = price*num;
      // 输出商品信息
      console.log(
        `Title: ${title} URL: ${url} img_url: ${img_url} cate: ${cate} price: ${price} num: ${num} total: ${total}`
      );
      // 添加到json
      json.items.push({
        title: title.replace(/[^a-zA-Z0-9\u4E00-\u9FA5]/g, "-"),
        url: url,
        img_url: img_url,
        cate: cate.replace(/[^a-zA-Z0-9\u4E00-\u9FA5]/g, "-"),
        price: price,
        num: num,
        total: total,
      });
    }
    // json 去除重复
    let json_items = json.items;
    json.items = [];
    for (let item of json_items) {
      let flag = true;
      for (let item2 of json.items) {
        if (item.cate === item2.cate && item.title === item2.title) {
          flag = false;
          break;
        }
      }
      if (flag) {
        json.items.push(item);
      }
    }

    console.log(JSON.stringify(json));
    // 保存到剪切板
    GM_setClipboard(JSON.stringify(json), "text");
    // 清空变量
    json = {
      items: [],
    };
  });
  // 合并生成json
  // 输出json
})();