Greasy Fork

Greasy Fork is available in English.

查看拼嘻嘻商品

一键查看拼嘻嘻商品!

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         查看拼嘻嘻商品
// @namespace    http://tampermonkey.net/
// @version      0.3
// @license MIT
// @description  一键查看拼嘻嘻商品!
// @author       老萨
// @match        *://*.yangkeduo.com/*
// @match        *://open.weixin.qq.com/*
// @run-at document-end
// @grant        GM_xmlhttpRequest
// @grant GM_setValue
// @grant GM_getValue
// @grant GM.setValue
// @grant GM.getValue
// @grant GM_addStyle
// ==/UserScript==

// $("body").prepend('<div Style="position:fixed;bottom:140px;right:10px;backgroundColor:white;padding:10px;zIndex:100">'+
// 				'<input type="text" id="add_paramas"  placeholder="输入额外参数" />'+
// 			  '</div>');
// 全局变量
let isRunning = false;
let windowId = '';
let add_paramas="";
let capturedData = [];
let storageData= {};
// 检查当前页面URL
function checkAndPrintHTML() {
    const currentURL = window.location.href;
	checkurl_addfloatbtn();
	getstorage();
    if (currentURL.includes('open.weixin.qq.com')||currentURL.includes('pinduoduo:')) {
        window.location.href = 'https://mobile.yangkeduo.com/index.html';
    }
    if (currentURL.includes('goods.html')||currentURL.includes('goods2.html')) {
        // console.log('Current page HTML:', document.documentElement.outerHTML);
		//alert(document.documentElement.outerHTML);
		// 初始化时从storage加载保存的值
		// chrome.storage.local.get(['isRunning', 'windowId'], function(result) {
			if (isRunning) {
				// Convert HTML to a valid string for btoa
				const encodedHTML = btoa(unescape(encodeURIComponent(document.documentElement.outerHTML)));
				const dataToSend = {
					data: encodedHTML,
					key: windowId
				};
                postdata(dataToSend);
				// chrome.runtime.sendMessage({ action: 'postdata', data: dataToSend },function(response){

				// });
			}
		// });
		
		
    }
}

function getstorage(){
    // isRunning = JSON.parse(localStorage.getItem('isRunning')) || false;
    // windowId = localStorage.getItem('windowId') || '';
	// add_paramas= localStorage.getItem('add_paramas') || '';
    // capturedData = JSON.parse(localStorage.getItem('capturedData')) || [];
    isRunning=JSON.parse(GM_getValue("isRunning", false));
    storageData=JSON.parse(GM_getValue("storageData", null));
    if (storageData && Object.keys(storageData).length > 0) {
        isRunning = storageData.isRunning;
        windowId = storageData.windowId;
        add_paramas = storageData.add_paramas;
        capturedData = storageData.capturedData;
    }
    // windowId=GM_getValue("windowId", null);
    // add_paramas=GM_getValue("add_paramas", null);
    // capturedData=GM_getValue("capturedData", null);
    console.log("缓存数据状态", isRunning, windowId, capturedData);
}
// 保存值到storage
 function saveToStorage() {
    // localStorage.setItem('isRunning', JSON.stringify(isRunning));
    // localStorage.setItem('windowId', windowId);
	// localStorage.setItem('add_paramas', add_paramas);
    // localStorage.setItem('capturedData', JSON.stringify(capturedData));
    storageData = {
        isRunning: isRunning,
        windowId: windowId,
        add_paramas: add_paramas,
        capturedData: capturedData
    };
    console.log("保存数据状态:", storageData);
    GM_setValue("storageData",JSON.stringify(storageData));
    GM_setValue("isRunning",JSON.stringify(isRunning));
    GM_setValue("windowId",windowId);
    GM_setValue("add_paramas",add_paramas);
    GM_setValue("capturedData",capturedData);
}

// 更新按钮状态
function updateButtonState() {
    const startBtn = document.getElementById('startBtn');
    const stopBtn = document.getElementById('stopBtn');
    if(isRunning){
		document.getElementById('startBtn').style.backgroundColor = 'grey';
	
		document.getElementById('stopBtn').style.backgroundColor = 'yellow';
		startBtn.disabled = true;
		stopBtn.disabled = false;
	}else{
		document.getElementById('startBtn').style.backgroundColor = 'yellow';
	
		document.getElementById('stopBtn').style.backgroundColor = 'grey';
		stopBtn.disabled = true;
		startBtn.disabled = false;
	}
    
}
// 开始执行事件
function start_getgoods() {
    
    saveToStorage();
    updateButtonState();
	getID();
	// content.js
	// window.postMessage({action: "fetchData"},'*');
	// chrome.runtime.sendMessage({ action: 'getID' }, function(response) {
      
    // });

}
function getID(){
    //获取请求的id
    return new Promise((resolve,reject) =>{
        GM_xmlhttpRequest({ //获取列表
            method : "GET",
            url : "http://121.37.208.194:8383/getID",
            onload: function(response){
                let res = response.response
                // 获取groupID
                console.log(response.response, '服务器响应')
                dogetdatawork(response.response);
                
            }
        })
    })
}
function postdata(data){
    GM_xmlhttpRequest({ //获取列表
        method : "POST",
        url : "http://121.37.208.194:8383/data",
        headers: {
            'Content-Type': 'application/json'
        },
        data:JSON.stringify(data),
        onload: function(response){
            let res = response.response
            // 获取groupID
            console.log(response.response, '服务器POSTDATA响应')
            doupdatadatawork(response.response);
            
        }
    });
}
function dogetdatawork(response){
	
	console.log('dogetdatawork:', response);
	if(response === '' || response === null || response === undefined){
		alert("任务获取失败");
		stop_getgoods();
		return;
	}
	if(response!==null){
		const id = response;
		const gd_src='https://mobile.yangkeduo.com/goods.html?goods_id=';
		var url = gd_src+ id;
		if (add_paramas.includes(gd_src)) {
			const regex = new RegExp(gd_src + '(\\d+)', 'g');
			add_paramas = add_paramas.replace(regex, '');
			
		}
		if(add_paramas != '' && add_paramas != null && add_paramas != undefined){
			url=url+add_paramas;
		}
		console.log('打开新的商品id:', id);
		//return id;
		window.location.href = url;
	}else{
		stop_getgoods();
	}

}
function doupdatadatawork(response){
	console.log('是否继续下一个商品:', response);
	setTimeout(() => {
		if(response==='YES'&&isRunning){
			start_getgoods();
		}else{
			stop_getgoods();
		}
	}, 2000);
	return;
}

function stop_getgoods(){
    isRunning = false;
    saveToStorage();
    updateButtonState();
}
function checkurl_addfloatbtn(){
	// 检测当前页面的URL
	if (window.location.href.includes('yangkeduo.com/')) {
		getstorage();
		// 创建浮动的输入框和按钮
		const firstfloatingDiv = document.createElement('div');
		firstfloatingDiv.style.position = 'fixed';
		firstfloatingDiv.style.bottom = '160px';
		firstfloatingDiv.style.right = '10px';
		firstfloatingDiv.style.backgroundColor = 'white';
		firstfloatingDiv.style.border = '1px solid #ccc';
		firstfloatingDiv.style.padding = '10px';
		firstfloatingDiv.style.zIndex = '1000';
		// {{ edit_1 }} 新增输入框
		const newInputBox = document.createElement('input');
		newInputBox.type = 'text';
		newInputBox.id = 'add_paramas'; // 新输入框的ID
		// 设置输入框的默认值为之前存储的add_paramas
		newInputBox.value = add_paramas || '';
		newInputBox.placeholder = '输入新值'; // 新输入框的占位符
		newInputBox.oninput = function(e) {
			// 处理新输入框的输入
			add_paramas = e.target.value;
			saveToStorage();
		};
		newInputBox.style.width="300px";
        newInputBox.style.height="60px";
		// 将输入框和按钮添加到浮动的div中
		firstfloatingDiv.appendChild(newInputBox);
		
		// 将浮动的div添加到页面中
		document.body.appendChild(firstfloatingDiv);

		// 创建浮动的输入框和按钮
		const floatingDiv = document.createElement('div');
		floatingDiv.style.position = 'fixed';
		floatingDiv.style.bottom = '80px';
		floatingDiv.style.right = '10px';
		floatingDiv.style.backgroundColor = 'white';
		floatingDiv.style.border = '1px solid #ccc';
		floatingDiv.style.padding = '10px';
		floatingDiv.style.zIndex = '1000';
		
		// {{ edit_1 }} 结束
		// 创建输入框
		const inputBox = document.createElement('input');
		inputBox.type = 'text';
		inputBox.id = 'windowId';
		// 设置输入框的默认值为之前存储的windowId
		inputBox.value = windowId || '';
		inputBox.placeholder = '输入窗口编号';
		inputBox.oninput = function(e) {
			windowId = e.target.value;
			saveToStorage();
		};

		// 创建启动按钮
		const startButton = document.createElement('button');
		startButton.id = 'startBtn';
		startButton.innerText = '启动';
		startButton.style.marginLeft = '10px';
		startButton.style.width = '60px';
		
		startButton.onclick = function() {
			isRunning = true;
			start_getgoods();
		};

		// 创建停止按钮
		const stopButton = document.createElement('button');
		stopButton.id = 'stopBtn';
		stopButton.innerText = '停止';
		stopButton.style.marginLeft = '10px';
		stopButton.style.width = '60px';
		stopButton.onclick = function() {
			stop_getgoods();
		};
		
		// 将输入框和按钮添加到浮动的div中
		floatingDiv.appendChild(inputBox);
		floatingDiv.appendChild(startButton);
		floatingDiv.appendChild(stopButton);
		
		// 将浮动的div添加到页面中
		document.body.appendChild(floatingDiv);
		const navigationDiv = document.createElement('div');
		navigationDiv.style.marginTop = '10px';

		const homeButton = document.createElement('button');
		homeButton.innerText = '首页';
		homeButton.style.marginRight = '10px';
        homeButton.style.width = '108px';
        homeButton.style.height = '20px';
        homeButton.style.backgroundColor='yellow';
		homeButton.onclick = function() {
			window.location.href = 'https://mobile.yangkeduo.com/index.html';
		};

		const historyButton = document.createElement('button');
		historyButton.innerText = '浏览历史';
        historyButton.style.width = '108px';
        historyButton.style.height = '20px';
        historyButton.style.backgroundColor='yellow';
        historyButton.style.marginLeft='20px';
		historyButton.onclick = function() {
			window.location.href = 'https://mobile.yangkeduo.com/footprint.html';
		};

		navigationDiv.appendChild(homeButton);
		navigationDiv.appendChild(historyButton);
		floatingDiv.appendChild(navigationDiv);
		updateButtonState();
	}	
}

 checkAndPrintHTML();