泥潭日报 uscardforum · 每日精选

Temu 自动价保 Tampermonkey 脚本分享/ 一键价保

内容摘要

Temu 自动价保脚本的深入技术分析与修复建议,重点关注 SPA 渲染机制、选择器失效及点击模拟问题,并提出 MutationObserver 等解决方案。

1. 关键信息

  • (之前已归纳)脚本功能: 分享Temu自动价保Tampermonkey脚本,旨在自动化订单的Price Adjustment,帮助用户拿回差价(如税费)。
  • (之前已归纳)作者经验 (DP): OP (colo7r) 称其个人单账号每周三单,持续使用脚本进行价保,自11月底以来未被“杀号”,甚至有几次因快递原因退款也未受影响,账号“鲁棒”。
  • (之前已归纳)其他用户DP: dogga也表示单笔价保超过$50未被“杀号”。
  • (之前已归纳)多账号操作: 有用户 (gin_m) 提到“一个手机5个号拉满”的玩法,每天下3-4单,但其手机最终“死透了”,暗示多账号操作风险高。
  • (之前已归纳)脚本问题: HarryG和两只饺子反馈脚本存在bug,如无法点击提交、卡住、页面返回顶部等。OP承认保存了错误版本,表示会修复。
  • (之前已归纳)脚本安装建议: 用户建议将脚本文件名称结以.user.js结尾,以便于一键安装。
  • (新增)脚本核心问题分析: 用户 zhzja8 对脚本进行了深入分析,指出了脚本“无法触发”或“点击无效”的几个核心问题:
    • SPA 路由与执行时机: Temu 是单页应用 (SPA),页面内容变化不刷新。脚本依赖 document-idlesetInterval,可能在初始加载时未在正确上下文挂载,或因 CSP 限制导致轮询未启动。
    • 选择器失效: 脚本通过文本匹配(如 'Price match/adjustment')来识别订单入口,但 Temu 按钮文本常含不可见字符,且 DOM 结构复杂,简单的 innerText 匹配在 React 渲染下不稳定。
    • clickByCenterTop 局限性: 脚本通过查找中心点模拟点击,但 Temu 按钮上层常覆盖透明的“埋点层”或“响应层”,elementFromPoint 可能获取到此透明层,导致点击无效。

2. 羊毛/优惠信息

  • (之前已归纳)通过自动化价保,用户可以更便捷地“撸”Temu的差价,相当于“购 bai 买 piao”或拿回税费。

3. 最新动态

  • (之前已归纳)脚本作者计划修复现有bug,建议关注GitHub仓库更新。
  • (之前已归纳)Temu前端可能会更新,导致脚本失效。
  • (新增)修复方案建议:
    • 增强入口检测: 结合 SVG 图标或父级容器属性,而非仅匹配文本。
    • 解决 SPA 跳转不触发: 使用 MutationObserver 监听 DOM 变化,或在脚本开头声明对 bgt_orders.html 的特定处理。监听 URL 变化,强制重新扫描。
    • 跳过“中心点检测”直接触发 React Fiber: 直接从 DOM 节点获取 React Internal Handler,优先尝试调用 React 的 onClick

4. 争议或不同意见

  • (之前已归纳)价保是否影响账号: OP (colo7r) 认为价保不影响活动参与和账号安全,但Wechat和gin_m认为大额价保或多账号操作会触发风控,导致“杀号”。
  • (之前已归纳)风控机制: 用户猜测Temu可能使用AI算法进行风控,并鼓励分享“dp”来探索“cutoff”。

5. 行动建议

  • (之前已归纳)谨慎使用: 脚本虽能自动化价保,但存在被Temu风控“杀号”的风险,尤其是在涉及大额退款或多账号“拉满”时。
  • (之前已归纳)关注更新: 脚本存在bug,建议等待作者修复后的新版本。
  • (之前已归纳)分享DP: 鼓励用户分享自己的价保经验和账号状态“dp”,以帮助社区了解Temu的风控边界。
  • (之前已归归纳)多账号风险: 尝试“一个手机5个号拉满”等激进玩法可能导致手机或账号“死透了”。
  • (之前已归纳)免责声明: 脚本仅供学习交流,商业用途需谨慎。
  • (之前已归纳)脚本作者可考虑的改进: 建议脚本作者在发布时将文件命名为.user.js,以方便用户一键安装。
  • (新增)技术调试建议:
    • 打开订单页,按 F12,在 Console 输入 document.querySelectorAll('*').filter(el => el.innerText.includes('Price match'))
    • 如果返回数组为空,说明 innerText 方案失效,需改用模糊类名选择器(如 [class*="order"])。
    • zhzja8 表示可协助编写基于 MutationObserver 的“增强版”节点监听函数。
原始内容
--- 第 1 楼来自 colo7r 的回复 (2026-01-16 01:02:28 PST) ---

前情提要:
【引用自 immcat】:
[黑五献礼]Temu能买什么
最近很多小伙伴在刷 Temu offer,但如今活动规则变化大、坑点不少,加上temu商品质量参差不齐,虽然大家都想用 offer 购 bai 买 piao,但更希望买到真正划算好用的东西。下面推荐的是200左右及以下的东东以配合Temu offer。文后有彩蛋,请看完
撸 Temu 撸了两个月了,每周三单,Price Adjustment 一般能把税费拿回来。自己没碰过前端的东西,vibe coding 撸了一个油猴脚本,自动Request Price Adjustment.

image1717×528 68.7 KB

image350×289 16 KB

github.com/Colo7r/TemuPriceAdjustment

temu.js

main

// ==UserScript==
// @name Temu 助手 v0.43
// @namespace http://tampermonkey.net/
// @version 0.43
// @description 列表->difference->弹窗Receive->Submit(点中心topElement + 遮挡/React兜底)->detail返回;GM跨子域状态 + unsafeWindow 事件构造回到页面上下文
// @author You
// @match *://temu.com/*
// @match *://*.temu.com/*
// @run-at document-idle
// @grant GM_getValue
// @grant GM_setValue
// @grant unsafeWindow
// ==/UserScript==

(function () {
'use strict';

/********************
* CONFIG
********************/

此文件已被截断。 显示原始文件

油猴脚本使用方法
安装油猴插件

浏览器需先安装 Tampermonkey(推荐 Chrome / Edge)。

Chrome 商店搜索 Tampermonkey,点击「添加到 Chrome」。
安装完成后,右上角会出现一个黑底白圈的油猴图标。

新建脚本

点击油猴图标 → 选择「创建新脚本」
删除模板内容
把仓库里的代码复制进去:

temu.js on GitHub
保存(Ctrl+S)。

访问 Temu 页面

打开 Temu 订单列表页面(例如:

https://www.temu.com/my_order_list.html)

脚本会自动加载。
注意事项

免责声明:脚本仅供学习与技术交流,请勿用于商业用途。
Temu 前端可能会更新,如果按钮位置或逻辑变动,脚本可能无法使用。
若点击无效,可尝试:

刷新页面重新加载
检查油猴是否启用此脚本
打开 F12 控制台查看报错信息

可能会影响活动参与

--- 第 2 楼来自 xsun1229 的回复 (2026-01-16 07:15:14 PST) ---

是不是应该号彻底死了以后再request

--- 第 3 楼来自 colo7r 的回复 (2026-01-16 07:26:54 PST) ---

不需要,price adjustment不会影响你的活动参与

--- 第 4 楼来自 jnnksn 的回复 (2026-01-16 07:39:01 PST) ---

Mark

--- 第 5 楼来自 Wechat 的回复 (2026-01-16 07:40:08 PST) ---

影响的。

--- 第 6 楼来自 colo7r 的回复 (2026-01-16 07:40:46 PST) ---

我自己的账号一直在price adjustment现在还没断,我只有一个账号,基本上一周三单拉满,要不然我也懒得搞这么个东西

--- 第 7 楼来自 gin_m 的回复 (2026-01-16 07:47:50 PST) ---

那是你没碰到金额大的 一大就死了。 不过你就1个号问题不大

--- 第 8 楼来自 colo7r 的回复 (2026-01-16 07:48:33 PST) ---

什么叫金额大,单个账号金额大还是多个账号

--- 第 9 楼来自 Wechat 的回复 (2026-01-16 07:49:06 PST) ---

应该是人工智能算法,欢迎你探索模型的cutoff在哪

--- 第 10 楼来自 colo7r 的回复 (2026-01-16 07:49:31 PST) ---

我实际上退款都有几次了,也没被杀 ,不过是因为快递原因导致的

--- 第 11 楼来自 gin_m 的回复 (2026-01-16 07:50:06 PST) ---

都是看金额的 我们都是一个手机5个号拉满的

--- 第 12 楼来自 Wechat 的回复 (2026-01-16 07:51:17 PST) ---

被杀了记得报dp,我支持你

--- 第 13 楼来自 两只饺子 的回复 (2026-01-16 07:52:28 PST) ---

一个手机怎么5个号?重复登陆?

--- 第 14 楼来自 colo7r 的回复 (2026-01-16 07:53:15 PST) ---

直接切换账号就可以 ,但是我是真的懒得卖二手,要不然我也拉满

--- 第 15 楼来自 Wechat 的回复 (2026-01-16 07:53:29 PST) ---

注册登陆新的呗,就是字面的意思,碰运气的事

--- 第 16 楼来自 colo7r 的回复 (2026-01-16 07:56:29 PST) ---

,等别人来贡献单账号 dp 吧,我从 11 月底开始没断过

--- 第 17 楼来自 dogga 的回复 (2026-01-16 18:01:36 PST) ---

我也没断过,我还单笔 price match 过 $50 以上,啥事没有

--- 第 18 楼来自 yy28998310 的回复 (2026-01-17 09:17:09 PST) ---

大佬你每个手机拉满5个号,平均每天下几单?

--- 第 19 楼来自 HarryG 的回复 (2026-01-17 10:50:06 PST) ---

试了一下,有时候点不到submit,有时候会有从别的网站的price match卡住,有时候返回会回到顶部从头再来

--- 第 20 楼来自 gin_m 的回复 (2026-01-17 10:54:15 PST) ---

现在没下了 一般每天下3-4单吧

--- 第 21 楼来自 yy28998310 的回复 (2026-01-17 10:56:24 PST) ---

为啥现在不下了,风控吗?

--- 第 22 楼来自 gin_m 的回复 (2026-01-17 10:59:13 PST) ---

手机死透了

等新机来了继续

--- 第 23 楼来自 jamiegoesplaces 的回复 (2026-01-17 16:42:21 PST) ---

来了来了

--- 第 24 楼来自 jamiegoesplaces 的回复 (2026-01-17 16:43:42 PST) ---

希望2026全年都可以撸 还可以撸49个循环 image100×100 5.23 KB

--- 第 25 楼来自 CubeOvO 的回复 (2026-01-17 16:43:51 PST) ---

一键自ban?

--- 第 26 楼来自 扎不多德乐 的回复 (2026-01-17 17:38:13 PST) ---

先mark下,一般不在temu上买东西

--- 第 27 楼来自 colo7r 的回复 (2026-01-17 18:39:34 PST) ---

我修一下吧,保存错版本了

--- 第 28 楼来自 colo7r 的回复 (2026-01-17 18:39:57 PST) ---

我的号比较鲁棒,自己用了很久了没什么问题

--- 第 29 楼来自 yy28998310 的回复 (2026-01-17 18:54:06 PST) ---

每个新号都配一个新电话号码和PayPal吗

--- 第 30 楼来自 两只饺子 的回复 (2026-02-11 11:27:13 PST) ---

东西出不来,也没看到有啥异常,坏了?

image1007×550 108 KB

--- 第 31 楼来自 元素轉換 的回复 (2026-02-11 14:55:25 PST) ---

建議檔案名稱結尾用.user.js方便一鍵安裝腳本

--- 第 32 楼来自 zhzja8 的回复 (2026-03-29 02:45:46 PDT) ---

经过对你脚本代码的分析,结合 Temu 订单页的实际渲染机制,我发现了导致你脚本“无法触发”或“点击无效”的几个核心问题。
1. 致命伤:脚本执行时机与 SPA 路由

Temu 是一个典型的 单页应用 (SPA)。当你从首页点击进入“我的订单”时,页面并没有刷新,只是内容变了。

你的代码问题: 你的脚本主要依赖 document-idle 和 setInterval。虽然 setInterval 理论上能轮询,但如果初始加载时脚本没能在正确的上下文挂载(或者因为 CSP 限制被拦截),轮询可能根本没启动。
解决方案: 必须使用 MutationObserver 监听 DOM 变化,或者在脚本开头强制声明对 bgt_orders.html 的特定处理。

2. 选择器失效(关键原因)

在你的代码中,识别订单入口靠的是:
entry: ['Price match/adjustment', '价格调节']

问题在于:

文本匹配: Temu 的按钮文本经常包含不可见字符、空格或由多个 <span> 拼凑而成。
DOM 结构: 现在的 Temu 订单页,这些按钮往往嵌套在高度混淆的 div 中(如你提供的源码中的 {#2064} 等标识符)。简单的 innerText 匹配在复杂的 React 渲染下非常不稳定。

3. clickByCenterTop 的局限性

你的脚本核心逻辑是寻找“中心点”并模拟点击:
const top = document.elementFromPoint(x, y);
const target = top || el;

问题在于: Temu 在按钮上层经常覆盖有一层透明的“埋点层”或“响应层”。elementFromPoint 拿到的可能是这个透明层,而这个层如果不透传事件(Pointer-events),你的 dispatchClickAt 就会点在空处。

建议的修复方案
修改建议 A:增强入口检测

不要只匹配文本,建议结合 SVG 图标 或 父级容器属性。Temu 的“价格调节”按钮通常紧跟在“Track”或“Buy again”后面。
修改建议 B:解决 SPA 跳转不触发

将你的 setInterval 逻辑改为更主动的监听。在脚本最前面加入:
// 监听 URL 变化,强制重新扫描
window.addEventListener('popstate', () => {
console.log("URL 变化,尝试唤醒脚本...");
if (location.href.includes('bgt_orders.html')) {
execute();
}
});

修改建议 C:跳过“中心点检测”直接触发 React Fiber

Temu 使用 React。与其寻找坐标点,不如直接从 DOM 节点获取它的 React Internal Handler。你代码里有 getReactProps,但只在 Submit 用了。建议在列表页点击入口时也优先尝试调用 React 的 onClick。
快速调试步骤:

打开订单页,手动按 F12。
在 Console 输入:document.querySelectorAll('*').filter(el => el.innerText.includes('Price match'))。
如果返回数组为空,说明 innerText 方案彻底失效,需要改用 [class*="order"] 这种模糊类名选择器。

需要我帮你针对你现在的代码,写一段基于 MutationObserver 的“增强版”节点监听函数吗?