Greasy Fork is available in English.

京东商品列表页面产品

Get product information from JD page

// ==UserScript==
// @name         京东商品列表页面产品
// @namespace    http://tampermonkey.net/
// @version      1.1
// @description  Get product information from JD page
// @match        https://*.jd.com/*
// @grant        none
// @require      https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.1.1/crypto-js.min.js
// ==/UserScript==

(function() {
    'use strict';
    window.addEventListener('load', function() {
        function createTable() {
            // 创建div元素
            let div = document.createElement('div');
            div.style.position = 'fixed';
            div.style.top = '10px';
            div.style.right = '10px';
            div.style.zIndex = '9999';
            div.style.backgroundColor = 'white';
            div.style.maxHeight = '80%';
            div.style.overflowY = 'scroll';
            // 创建表格
            let table = document.createElement('table');
            table.style.borderCollapse = 'collapse';
            let style = document.createElement('style');
            style.innerHTML = `
                table td, table th {
                    border: 1px solid #ddd;
                    padding: 8px;
                }

                table tr:nth-child(even) {
                    background-color: #f2f2f2;
                }

                table tr:hover {
                    background-color: #ddd;
                }

                table th {
                    padding-top: 12px;
                    padding-bottom: 12px;
                    text-align: left;
                    background-color: #4CAF50;
                    color: white;
                }
            `;
            document.head.appendChild(style);
            // 添加表头
            let thead = document.createElement('thead');
            let tr = document.createElement('tr');
            let th1 = document.createElement('th');
            th1.innerText = '商品编码';
            let th2 = document.createElement('th');
            th2.innerText = '商品名称';
            let th3 = document.createElement('th');
            th3.innerText = '商品价格';
            let th4 = document.createElement('th');
            th4.innerText = '店铺名称';
            let th5 = document.createElement('th');
            th5.innerText = '是否自营';
            let th6 = document.createElement('th');
            th6.innerText = '评论数量';
            tr.appendChild(th1);
            tr.appendChild(th2);
            tr.appendChild(th3);
            tr.appendChild(th4);
            tr.appendChild(th5);
            tr.appendChild(th6);
            thead.appendChild(tr);
            table.appendChild(thead);
            let tbody = document.createElement('tbody');
            table.appendChild(tbody);
            document.body.appendChild(table);

            // 添加表格内容
            let products = document.querySelectorAll('.gl-item');
            products.forEach(product => {
                let jd_sku = product.getAttribute('data-sku');
                let good_name = product.querySelector('.p-name a em').innerText;
                let good_price = product.querySelector('.p-price i').innerText;
                let p_comment = product.querySelector('.p-commit strong a').innerText;
                let storeNameElement = product.querySelector('.p-shop a');
                let storeName = storeNameElement ? storeNameElement.getAttribute('title') : '';
                //判断是否有自营标签
                let isSelfOperatedElement = product.querySelector('.p-icons .goods-icons');
                let isSelfOperated = isSelfOperatedElement ? '是' : '否';

                // 将产品信息添加到表格内容中
                let tr = document.createElement('tr');
                let td1 = document.createElement('td');
                //商品编码
                td1.innerText = jd_sku;
                let td2 = document.createElement('td');
                //商品名称
                td2.innerText = good_name;
                let td3 = document.createElement('td');
                //商品售价
                td3.innerText = good_price;
                let td4 = document.createElement('td');
                td4.innerText = storeName;
                let td5 = document.createElement('td');
                //是否自营
                td5.innerText = isSelfOperated;
                let td6 = document.createElement('td');
                //评论数
                td6.innerText = p_comment;
                tr.appendChild(td1);
                tr.appendChild(td2);
                tr.appendChild(td3);
                tr.appendChild(td4);
                tr.appendChild(td5);
                tr.appendChild(td6);
                tbody.appendChild(tr);
            });
            table.appendChild(tbody);
            // 将表格添加到div中
            div.appendChild(table);
            // 将div添加到页面上
            document.body.appendChild(div);

            // 获取表头行
            let headerRow = table.rows[0];

            // 获取表头单元格
            let headerCells = headerRow.cells;

            // 创建表头数组
            let headers = ["jd_sku","good_name","good_price","storeName","isSelfOperated","p_comment"];


            // 创建数据数组
            let data = [];

            // 遍历数据行(跳过表头行)
            for (let i = 1; i < table.rows.length; i++) {
            //for (let i = 1; i < 11; i++) {
                // 获取当前行
                let row = table.rows[i];

                // 创建数据对象
                let rowData = {};

                // 遍历数据单元格
                for (let j = 0; j < row.cells.length; j++) {
                    // 获取单元格文本
                    let cellText = row.cells[j].textContent;

                    // 获取对应的表头文本
                    let headerText = headers[j];

                    // 将单元格文本添加到数据对象中
                    rowData[headerText] = cellText;
                }

                // 将数据对象添加到数据数组中
                data.push(rowData);
            }

            // 遍历数据行(跳过表头行)
            for (let i = 1; i < table.rows.length; i+=10) {
                let data_part = [];
                for (let j = i; j < i+10 && j < table.rows.length; j++) {
                    // 获取当前行
                    let row = table.rows[j];

                    // 创建数据对象
                    let rowData = {};

                    // 遍历数据单元格
                    for (let k = 0; k < row.cells.length; k++) {
                        // 获取单元格文本
                        let cellText = row.cells[k].textContent;

                        // 获取对应的表头文本
                        let headerText = headers[k];

                        // 将单元格文本添加到数据对象中
                        rowData[headerText] = cellText;
                    }

                    // 将数据对象添加到数据数组中
                    data_part.push(rowData);
                }
                // 将数据数组转换为JSON字符串
                let datas_json = JSON.stringify(data_part);

                // 输出JSON字符串
                console.log(data_part);
            }

            // 添加一个显示隐藏按钮
            let button = document.createElement('button');
            button.innerText = '显示/隐藏列表';
            button.style.position = 'fixed';
            button.style.top = '10px';
            button.style.left = '10px';
            button.style.zIndex = '9999';
            document.body.appendChild(button);

            // 给按钮绑定点击隐藏/显示功能
            let isTableVisible = true;
            button.addEventListener('click', function() {
                if (isTableVisible) {
                    table.style.display = 'none';
                    isTableVisible = false;
                    table.remove();
                } else {
                    table.style.display = 'block';
                    isTableVisible = true;
                    createTable();
                }
            });
        }

        createTable();
        });
})();