当前位置: 首页 > news >正文

闲鱼自动发布工具,python基础框架软件,自动擦亮批量发布

闲鱼这个平台吧,玩过的都知道,卖东西得天天擦亮,不然曝光掉得跟跳水似的。我有一堆闲置要出,手动去点实在是烦,干脆花一个下午写了个自动发布+擦亮的小工具。核心就是用 Python 搭了个基础框架,跑在本地,能批量发商品,也能定时帮你把在售的都擦一遍。原理不复杂,但细节坑不少,这里把关键代码和思路分享一下。

整个工具基于 Selenium 模拟浏览器操作,因为闲鱼的反爬机制对 requests 这类直接请求封得很死,走浏览器自动化反而最稳。结构上我拆成了几个模块:登录态保持、商品数据读取、发布流程、擦亮任务。先看登录这块,我直接复用浏览器已有的用户数据,避免每次都扫码或者输密码。Chrome 的话指定 user-data-dir 就行,记得把路径写对,Mac 和 Windows 路径不一样,这点小坑卡了我十分钟。

from selenium import webdriver
from selenium.webdriver.chrome.options import Optionsdef get_logged_driver(user_data_path):options = Options()# 指定你的Chrome用户数据目录,保持登录状态options.add_argument(f"user-data-dir={user_data_path}")# 避免被检测到自动化特征options.add_argument("--disable-blink-features=AutomationControlled")options.add_experimental_option("excludeSwitches", ["enable-automation"])options.add_experimental_option('useAutomationExtension', False)driver = webdriver.Chrome(options=options)driver.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument', {'source': 'Object.defineProperty(navigator, "webdriver", {get: () => undefined})'})return driver

有了 driver,我手动登录一次闲鱼后,之后再启动脚本就直接是登录态了,舒服。这里有个小细节:--disable-blink-features=AutomationControlled 和那一段 CDP 命令是用来隐藏 webdriver 特征的,闲鱼前端会检测这些,不藏的话发布按钮可能都点不了。

商品数据我习惯用 Excel 维护,一个表格对应一批要发的东西。用 pandas 读进来,遍历每一行构造发布参数就行。这样子批量上新的时候,改改表格就好,不用动代码。

import pandas as pddef load_products(excel_path):df = pd.read_excel(excel_path)# 表格列名示例:title, description, price, category, images, tags# images字段可以放本地图片路径,多张用逗号分隔products = []for _, row in df.iterrows():product = {'title': row['title'],'desc': row.get('description', ''),'price': str(row['price']),'category': row['category'],'images': [img.strip() for img in row['images'].split(',')],'tags': row.get('tags', '')}products.append(product)return products

这里图片字段处理得比较简单,拆出本地路径列表,后面上传时会依次填入。闲鱼现在最多支持 9 张图,最好在表格里自己控制一下。

发布流程是最复杂的部分,要模拟点击“发布闲置”按钮、选择分类、填写标题描述价格、上传图片、添加标签,最后点发布。每一步都要等元素可交互,而且闲鱼的页面结构偶尔会变,所以定位尽量用相对稳定的属性,比如 placeholder 或者文本内容。核心发布函数大概长这样:

import time
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ECdef publish_one(driver, product):wait = WebDriverWait(driver, 10)# 点击底部“卖闲置”按钮(需要先进入闲鱼首页)driver.get('https://2.taobao.com')sell_btn = wait.until(EC.element_to_be_clickable((By.XPATH, '//*[text()="卖闲置"]')))sell_btn.click()time.sleep(2)  # 页面跳转等待,实际可以用显式等待# 选择分类,根据product['category']匹配,示例选“数码”category_btn = wait.until(EC.element_to_be_clickable((By.XPATH, f'//div[contains(@class,"category-item") and text()="{product["category"]}"]')))category_btn.click()# 填写标题title_input = wait.until(EC.presence_of_element_located((By.XPATH, '//input[@placeholder="宝贝标题"]')))title_input.clear()title_input.send_keys(product['title'])# 描述,通常在iframe里,需要先切换iframe = driver.find_element(By.XPATH, '//iframe[contains(@id,"ueditor")]')driver.switch_to.frame(iframe)desc_area = driver.find_element(By.XPATH, '//body')desc_area.clear()desc_area.send_keys(product['desc'])driver.switch_to.default_content()# 价格price_input = driver.find_element(By.XPATH, '//input[@placeholder="价格"]')price_input.clear()price_input.send_keys(product['price'])# 上传图片:找到上传按钮对应的input[type=file],逐个发送本地路径upload_input = driver.find_element(By.XPATH, '//input[@type="file" and @multiple]')images_str = '\n'.join(product['images'])  # Selenium支持多个文件用换行分隔路径upload_input.send_keys(images_str)# 等待图片上传完成,简单硬等一下,实际可以轮询图片数量time.sleep(3 + len(product['images']))# 添加标签if product['tags']:tag_input = driver.find_element(By.XPATH, '//input[@placeholder="添加标签"]')tag_input.send_keys(product['tags'])# 回车确认标签tag_input.send_keys(Keys.ENTER)# 发布submit_btn = driver.find_element(By.XPATH, '//*[text()="发布"]')submit_btn.click()time.sleep(3)print(f"发布成功: {product['title']}")

上面的代码只是一个基础流程,实际跑的时候会遇到很多细节问题:图片上传后前端可能要校验,等待时间需要根据网络调整;发布按钮可能有多个,要精确定位;有些类目需要额外填写原价、成色等属性,这块就得根据类目做更细的匹配。不过这个框架已经能覆盖大部分普通闲置的发布了。而我实际用的时候,发现如果一次发太多条,闲鱼会弹验证码,所以加了个随机间隔和每日上限控制。

擦亮功能就简单多了,从“我发布的”列表里拿到所有在售宝贝,逐个点“擦亮”即可。擦亮本质就是点一下那个按钮,让宝贝重新获得流量。代码大致是遍历列表,找到所有“擦亮”元素,一个个点击,中间加点延时防止操作太快。

def refresh_all(driver):driver.get('https://2.taobao.com/')wait = WebDriverWait(driver, 10)# 进入“我发布的”mine_btn = wait.until(EC.element_to_be_clickable((By.XPATH, '//*[text()="我发布的"]')))mine_btn.click()time.sleep(2)# 获取所有擦亮按钮,注意有些宝贝可能已擦亮过,按钮会变灰或消失refresh_buttons = driver.find_elements(By.XPATH, '//*[text()="擦亮"]')for btn in refresh_buttons:try:btn.click()print("擦亮成功")time.sleep(2)except:print("擦亮失败,可能已经擦亮过了")continue

这个擦亮思路比较粗暴,但是能用。我通常把它放到每日定时任务里,Windows 就用任务计划程序,Mac 或 Linux 用 cron,每天上午自动跑一次,保持曝光。当然,如果你的宝贝数量很多,最好加上异常重试和失败日志,否则 network 一波动就中断了。

整个工具的技术亮点我觉得在于:用 Selenium 的 user-data-dir 保持登录态,免除重复扫码的麻烦;用 Excel 管理商品数据,做到发布流程和数据分离;把发布和擦亮拆成两个独立任务,可以单独执行。虽然代码写得不那么漂亮,但是胜在实用。我自己用着挺顺手,偶尔调整一下 Excel 就能批量上新旧衣服、数码小件。缺点也有,就是依赖本机浏览器环境,不能完全无头跑服务端,但如果只是个人用,足够了。

如果你也有类似的批量发布需求,可以考虑基于这个框架改一改,增加更多类目的适配。不过要提醒一句,自动化操作有违平台规则的风险,不要频繁大量操作,用作个人辅助还行,别用来做商业化批量铺货,封号就别怪我没提醒哈。

http://www.zskr.cn/news/1455653.html

相关文章:

  • NX/UG二次开发:NX的方式替换面
  • 铁死亡研究要检测哪些指标?
  • 告别平台限制:WorkshopDL让非Steam玩家也能畅玩创意工坊模组
  • 别再只用默认配色了!Seaborn热力图调色板保姆级指南(附代码对比图)
  • PaddleOCR-VL-1.6核心技术解密:区域优化与渐进式训练原理剖析
  • [Java学习日记10】聊聊checked exception和runtime exception
  • 无水印视频下载神器哪个好? 无水印视频下载工具软件推荐,无水印视频下载神器盘点 - 工具软件使用方法推荐
  • css手写奥运五环
  • 基于Seeeduino XIAO与Grove模块的环境监测系统开发实践
  • Joy-Con Toolkit高级配置与性能优化技术方案
  • 2026年嘉德实创冷库服务商推荐榜单:医药GSP冷库、食品速冻冷库、冷链物流系统与温湿度监测工程实力品牌解析 - 品牌企业推荐师(官方)
  • 26NOI内训day6 西安高新一中
  • 基于IMU传感器与Python的单摆周期精确测量:从硬件搭建到STFT分析
  • 异步音乐生成API架构深度解析与实战集成指南
  • AI工具如何接管企业搜索?揭秘2024头部公司已验证的7步整合路径
  • 从电磁感应到无线充电:DIY线圈点亮LED实验全解析
  • OpenAI万亿IPO前夜豪赌AI基建,谷歌、英伟达等巨头跟风,普通人要为此买单?
  • 宇树科技冲刺“具身智能第一股”,机器人产业将如何重塑半导体产业链?
  • 破局期刊撰稿投稿难题:依托 Paperxie 期刊论文专属创作模块,高效打通从选题到成文全链路
  • Java反射的意义
  • 2026 年中国算力市场分化,芜湖如何破局轻资产运营、国产算力替代与产业生态培育?
  • ES|QL助力LLM工作负载调试:解决延迟、成本与GPU饱和问题
  • 向量空间JBoltAI:包装合规审核的AI解法
  • 终极免费方案:3步解锁Wand专业版完整功能,开启游戏修改新纪元
  • XZ1813,120VIN,外置MOS,异步降压芯片
  • 2026库尔勒汽车维修哪家靠谱?本地15年老店多维度实测横向测评 - GrowthUME
  • # [特殊字符] Linux 学习笔记(一):环境搭建与 C 语言开发初体验
  • SteamBot架构设计深入解析:5大核心模块实现自动化交易最佳实践
  • 2026年信创协同系统哪家的靠谱?一文搞懂你该怎么选
  • 探讨在不同物理显示媒介上优化响应式栅格系统设计规范色彩空间与视觉对比度的规范体系