Last active
February 8, 2025 14:40
-
-
Save iqiancheng/e2607b654441223c598aaf06cce42173 to your computer and use it in GitHub Desktop.
自动遍历删除淘宝购物车失效的商品(自动点击确认删除)淘宝购物车批量删除脚本(带确认框处理)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 定义一个异步函数来处理删除操作 | |
async function clearCart() { | |
// 使用更通用的属性选择器来找到所有商品项 | |
const cartItems = document.querySelectorAll('[class*="trade-cart-item-info"]'); | |
let deletedCount = 0; | |
const totalItems = cartItems.length; | |
console.log(`找到 ${totalItems} 个商品项`); | |
for (const item of cartItems) { | |
try { | |
// 在每个商品项中找到删除按钮 | |
const deleteButtons = Array.from(item.querySelectorAll('[class*="cartOperationItem--"]')) | |
.filter(button => button.textContent === '删除'); | |
if (deleteButtons.length > 0) { | |
const deleteButton = deleteButtons[0]; | |
// 点击删除按钮 | |
deleteButton.click(); | |
// 等待确认弹窗出现 | |
await new Promise(resolve => setTimeout(resolve, 500)); | |
// 查找确认弹窗中的删除按钮 | |
const confirmDeleteButton = Array.from(document.querySelectorAll('.ant-btn-primary')) | |
.find(button => button.textContent.includes('删除')); | |
if (confirmDeleteButton) { | |
// 点击确认删除按钮 | |
confirmDeleteButton.click(); | |
deletedCount++; | |
console.log(`成功删除第 ${deletedCount} 个商品`); | |
// 等待删除操作完成 | |
await new Promise(resolve => setTimeout(resolve, 1000)); | |
} else { | |
console.log('未找到确认删除按钮'); | |
} | |
} | |
} catch (error) { | |
console.error('删除商品时出错:', error); | |
} | |
} | |
console.log(`批量删除完成! 共删除 ${deletedCount} 个商品`); | |
} | |
// 执行清空购物车操作 | |
clearCart().catch(error => { | |
console.error('执行清空购物车操作时出错:', error); | |
}); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 定义选择器 | |
const SELECTORS = { | |
CART_ITEM: '[class*="trade-cart-item-info"]', | |
INVALID_MARKER: 'div[class^="invalid"]', | |
DELETE_BUTTON: '[class*="cartOperationItem--"]', | |
CONFIRM_DELETE: '.ant-btn-primary' | |
}; | |
// 定义一个异步函数来处理删除操作 | |
async function clearInvalidItems() { | |
// 查找所有商品项 | |
const cartItems = document.querySelectorAll(SELECTORS.CART_ITEM); | |
let deletedCount = 0; | |
let invalidCount = 0; | |
const totalItems = cartItems.length; | |
console.log(`找到 ${totalItems} 个商品项`); | |
for (const item of cartItems) { | |
try { | |
// 检查商品是否失效 | |
const invalidEl = item.querySelector(SELECTORS.INVALID_MARKER); | |
if (invalidEl) { | |
invalidCount++; | |
console.log(`发现第 ${invalidCount} 个失效商品,准备删除...`); | |
// 在每个商品项中找到删除按钮 | |
const deleteButtons = Array.from(item.querySelectorAll(SELECTORS.DELETE_BUTTON)) | |
.filter(button => button.textContent === '删除'); | |
if (deleteButtons.length > 0) { | |
const deleteButton = deleteButtons[0]; | |
// 点击删除按钮 | |
deleteButton.click(); | |
// 等待确认弹窗出现 | |
await new Promise(resolve => setTimeout(resolve, 500)); | |
// 查找确认弹窗中的删除按钮 | |
const confirmDeleteButton = Array.from(document.querySelectorAll(SELECTORS.CONFIRM_DELETE)) | |
.find(button => button.textContent.includes('删除')); | |
if (confirmDeleteButton) { | |
// 点击确认删除按钮 | |
confirmDeleteButton.click(); | |
deletedCount++; | |
console.log(`成功删除第 ${deletedCount} 个失效商品`); | |
// 等待删除操作完成 | |
await new Promise(resolve => setTimeout(resolve, 1000)); | |
} else { | |
console.log('未找到确认删除按钮'); | |
} | |
} | |
} | |
} catch (error) { | |
console.error('删除商品时出错:', error); | |
} | |
} | |
console.log(`批量删除完成! 共发现 ${invalidCount} 个失效商品,成功删除 ${deletedCount} 个`); | |
} | |
// 执行清空失效商品操作 | |
clearInvalidItems().catch(error => { | |
console.error('执行清空失效商品操作时出错:', error); | |
}); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 定义一个异步函数来处理删除操作 | |
async function clearInvalidItems() { | |
// 使用更通用的属性选择器来找到所有商品项 | |
const cartItems = document.querySelectorAll('[class*="trade-cart-item-info"]'); | |
let deletedCount = 0; | |
let invalidCount = 0; | |
const totalItems = cartItems.length; | |
console.log(`找到 ${totalItems} 个商品项`); | |
for (const item of cartItems) { | |
try { | |
// 检查商品是否失效 | |
const msgElement = item.querySelector('[class*="msgWrapper--"]'); | |
const isInvalid = msgElement && ( | |
msgElement.textContent.includes('宝贝已不能购买') || | |
msgElement.textContent.includes('卖家账号出错') || | |
msgElement.textContent.includes('宝贝已不能购买,请联系卖家') | |
); | |
if (isInvalid) { | |
invalidCount++; | |
console.log(`发现第 ${invalidCount} 个失效商品,准备删除...`); | |
// 在每个商品项中找到删除按钮 | |
const deleteButtons = Array.from(item.querySelectorAll('[class*="cartOperationItem--"]')) | |
.filter(button => button.textContent === '删除'); | |
if (deleteButtons.length > 0) { | |
const deleteButton = deleteButtons[0]; | |
// 点击删除按钮 | |
deleteButton.click(); | |
// 等待确认弹窗出现 | |
await new Promise(resolve => setTimeout(resolve, 500)); | |
// 查找确认弹窗中的删除按钮 | |
const confirmDeleteButton = Array.from(document.querySelectorAll('.ant-btn-primary')) | |
.find(button => button.textContent.includes('删除')); | |
if (confirmDeleteButton) { | |
// 点击确认删除按钮 | |
confirmDeleteButton.click(); | |
deletedCount++; | |
console.log(`成功删除第 ${deletedCount} 个失效商品`); | |
// 等待删除操作完成 | |
await new Promise(resolve => setTimeout(resolve, 1000)); | |
} else { | |
console.log('未找到确认删除按钮'); | |
} | |
} | |
} | |
} catch (error) { | |
console.error('删除商品时出错:', error); | |
} | |
} | |
console.log(`批量删除完成! 共发现 ${invalidCount} 个失效商品,成功删除 ${deletedCount} 个`); | |
} | |
// 执行清空失效商品操作 | |
clearInvalidItems().catch(error => { | |
console.error('执行清空失效商品操作时出错:', error); | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment