使用Python Selenium+Chrome登录eToro遭反爬拦截的解决问询
解决eToro识别Selenium拦截登录的方案
eToro通过检测Selenium的特征标识拦截登录,以下是几种可行的绕过方案:
1. 移除Selenium核心特征标识
网站通常会检测window.navigator.webdriver属性,以及Chrome启动时的自动化相关参数。可以通过以下方式处理:
from selenium import webdriver from selenium.webdriver.chrome.options import Options options = Options() # 禁用自动化扩展提示 options.add_argument("--disable-extensions") # 隐藏Chrome正在被自动化控制的提示 options.add_experimental_option("excludeSwitches", ["enable-automation"]) options.add_experimental_option('useAutomationExtension', False) driver = webdriver.Chrome(options=options) # 执行JS移除webdriver属性 driver.execute_script("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})") driver.get("https://www.etoro.com/login") # 后续输入账号密码操作...
2. 加载本地真实Chrome用户数据
使用本地Chrome的用户数据目录启动Selenium,让浏览器环境和你日常使用的完全一致,大幅降低被检测概率:
from selenium import webdriver from selenium.webdriver.chrome.options import Options options = Options() # 替换为你本地Chrome的用户数据路径,Windows一般是C:\\Users\\你的用户名\\AppData\\Local\\Google\\Chrome\\User Data # macOS一般是/Users/你的用户名/Library/Application Support/Google/Chrome options.add_argument(r"user-data-dir=C:\Users\YourName\AppData\Local\Google\Chrome\User Data") driver = webdriver.Chrome(options=options) driver.get("https://www.etoro.com/login") # 后续登录操作...
注意:启动前要关闭所有本地Chrome窗口,否则会报错。
3. 使用undetected-chromedriver库
这个库是专门为绕过反爬检测开发的,会自动处理Selenium的特征隐藏,用法和原生Selenium几乎一致:
# 先安装库:pip install undetected-chromedriver import undetected_chromedriver as uc driver = uc.Chrome() driver.get("https://www.etoro.com/login") # 输入虚构账号密码,比如: username_input = driver.find_element("id", "username") password_input = driver.find_element("id", "password") username_input.send_keys("fake_user_123") password_input.send_keys("wrong_pass_456") # 点击登录按钮 driver.find_element("css selector", "button[type='submit']").click()
使用这个库后,基本能模拟真实浏览器环境,触发正常的"invalid username/password"错误提示。
4. 额外优化:添加真实请求头和模拟人类操作
- 设置浏览器语言、时区等参数,让环境更真实:
options.add_argument("--lang=en-US") options.add_argument("--timezone=America/New_York")
- 避免快速连续操作,添加随机延迟:
import time import random # 输入账号后随机延迟0.5-2秒 time.sleep(random.uniform(0.5, 2)) # 输入密码后再延迟 time.sleep(random.uniform(0.5, 2))
内容的提问来源于stack exchange,提问作者leeon
相关产品推荐
相关产品推荐

