You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何规避Selenium检测?寻求电商商品批量编辑自动化替代方案

电商批量商品编辑:解决Selenium反检测+用已打开浏览器执行操作方案

一、用已打开的「人类浏览器」执行脚本

直接连接你日常使用的Chrome实例(自带登录状态、用户行为特征,大幅降低被检测概率),步骤如下:

1. 手动启动带调试端口的Chrome

  • Windows:右键Chrome快捷方式 → 属性 → 目标栏末尾添加 --remote-debugging-port=9222 --user-data-dir="C:\MyChromeProfile"(注意前面有空格,路径可自定义)
  • Mac:打开终端执行 open -a "Google Chrome" --args --remote-debugging-port=9222 --user-data-dir="$HOME/MyChromeProfile"
  • 启动后手动登录电商平台,确保商品主列表页面可正常访问

2. 编写连接脚本并实现批量编辑逻辑

以下是完整代码,注意替换页面元素选择器为实际平台的对应选择器:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.action_chains import ActionChains
import random
import time

TARGET_TEXT = "PAKIET OCHRONY - GWARANCJA NA 2 LATA"

# 连接已打开的Chrome实例
options = webdriver.ChromeOptions()
options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")
driver = webdriver.Chrome(options=options)

def edit_single_product(product_index):
    # 切回商品主列表窗口
    driver.switch_to.window(driver.window_handles[0])
    
    # 定位第n个商品的EDIT按钮(替换为实际页面的CSS选择器/XPath)
    edit_btn_selector = f'.product-list-item:nth-child({product_index}) .edit-button'
    edit_btn = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.CSS_SELECTOR, edit_btn_selector))
    )
    # 模拟人类鼠标移动后点击
    ActionChains(driver).move_to_element(edit_btn).pause(random.uniform(0.3, 0.8)).click().perform()
    
    # 切换到新打开的编辑窗口
    WebDriverWait(driver, 10).until(lambda d: len(d.window_handles) > 1)
    driver.switch_to.window(driver.window_handles[1])
    
    # 执行编辑操作:点击按钮(替换为实际选择器)
    action_btn = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.CSS_SELECTOR, '.required-action-btn'))
    )
    ActionChains(driver).move_to_element(action_btn).pause(random.uniform(0.2, 0.6)).click().perform()
    
    # 等待页面加载完成(等待关键元素出现)
    WebDriverWait(driver, 15).until(
        EC.presence_of_element_located((By.CSS_SELECTOR, '.product-input-field'))
    )
    
    # 输入目标文本(模拟人类逐字输入)
    input_field = driver.find_element(By.CSS_SELECTOR, '.product-input-field')
    input_field.clear()
    for char in TARGET_TEXT:
        input_field.send_keys(char)
        time.sleep(random.uniform(0.05, 0.15))
    
    # 选择弹出的常量选项(替换为实际选择器)
    constant_option = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.CSS_SELECTOR, '.constant-suggestion-item'))
    )
    ActionChains(driver).move_to_element(constant_option).pause(random.uniform(0.3, 0.7)).click().perform()
    
    # 点击保存按钮
    save_btn = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.CSS_SELECTOR, '.save-product-btn'))
    )
    ActionChains(driver).move_to_element(save_btn).pause(random.uniform(0.4, 0.9)).click().perform()
    
    # 等待保存完成后关闭窗口
    WebDriverWait(driver, 15).until(EC.staleness_of(save_btn))
    driver.close()

# 循环处理第1到第10个商品(可按需调整范围)
for idx in range(1, 11):
    edit_single_product(idx)
    # 模拟人类操作间隔,随机化避免规律
    time.sleep(random.uniform(2, 4))

driver.quit()

二、额外反检测优化建议

如果连接已打开浏览器仍遇到检测问题,可补充以下操作:

  • 操作间隔完全随机化:用random.uniform(1.5, 4)代替固定等待时间
  • 避免连续批量操作:每处理5-10个商品,手动在浏览器中浏览其他页面1-2分钟,模拟正常用户行为
  • 禁用自动化标识(若连接新实例时需要):保留你之前代码中的disable-blink-features、excludeSwitches等配置
  • 避免快速切换窗口:每次切换窗口后添加0.5-1秒的随机等待

三、关键注意事项

  • 必须先启动带调试端口的Chrome并登录电商平台,再运行脚本
  • 所有元素选择器(如.edit-button)需用浏览器F12开发者工具获取,替换代码中的占位选择器
  • 脚本运行时不要手动操作浏览器窗口,避免干扰脚本执行
  • 若遇到验证码,可在代码中添加等待逻辑:比如input("请完成验证码后按回车继续..."),等待手动处理后再继续

内容的提问来源于stack exchange,提问作者Janekk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 11:02:14