使用Selenium(Python)登录TikTok触发次数限制问题求助
解决TikTok Selenium登录触发“Too many attempts”的方案
TikTok的反爬机制会识别Selenium的自动化特征,导致脚本登录被限制,以下是针对性的解决方法:
- 隐藏Selenium核心特征
TikTok会通过window.navigator.webdriver属性检测自动化工具,需要通过启动参数和CDP命令修改这个属性,避免被识别:
from selenium import webdriver from selenium.webdriver.chrome.options import Options from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC import time import random options = Options() # 关闭自动化控制提示条 options.add_experimental_option("excludeSwitches", ["enable-automation"]) options.add_experimental_option('useAutomationExtension', False) # 禁用Blink的自动化检测特性 options.add_argument('--disable-blink-features=AutomationControlled') driver = webdriver.Chrome(options=options) # 注入脚本,修改navigator.webdriver属性 driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", { "source": """ Object.defineProperty(navigator, 'webdriver', { get: () => undefined }) """ })
- 模拟真实用户的输入行为
直接批量输入字符会被判定为机器人,需要模拟手动输入的节奏:点击输入框后延迟再输入,拆分字符逐个输入并加入随机间隔:
# 处理邮箱/用户名输入 email_input = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@placeholder='Email or username']"))) email_input.click() time.sleep(random.uniform(0.5, 1.5)) # 点击后随机停顿 for char in email: email_input.send_keys(char) time.sleep(random.uniform(0.1, 0.3)) # 单个字符输入间隔 # 处理密码输入 pwd_input = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@placeholder='Password']"))) pwd_input.click() time.sleep(random.uniform(0.5, 1.5)) for char in password: pwd_input.send_keys(char) time.sleep(random.uniform(0.1, 0.3)) # 点击登录前增加延迟 login_btn = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//button[@type='submit']"))) time.sleep(random.uniform(1, 2)) login_btn.click()
- 复用已登录的浏览器环境
如果你手动登录过TikTok,可以让Selenium加载本地Chrome的用户数据目录,这样浏览器的Cookie、缓存和手动登录一致,大幅降低被检测的概率:
# Windows路径示例:替换为你的实际用户数据路径 options.add_argument(r"user-data-dir=C:\Users\YourUsername\AppData\Local\Google\Chrome\User Data") options.add_argument("--profile-directory=Default") # 使用默认配置文件
- 降低请求频率,避免IP被标记
如果已经触发过限制,先暂停1-2小时再测试脚本。如果有条件,可以使用代理IP更换网络环境,避免单一IP被反复标记。
内容的提问来源于stack exchange,提问作者user192837
相关产品推荐
相关产品推荐

