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

使用Selenium配置代理爬取被屏蔽网站soccerstats.com失败求助

问题分析与解决方案

核心问题

你的代码存在以下关键问题导致代理无法正常工作:

  • 重复配置代理(同时使用Proxy对象和--proxy-server参数)引发冲突
  • 未区分代理类型(HTTPS/SOCKS5),统一按SOCKS5配置导致HTTPS代理失效
  • 未验证代理可用性,随机选择的代理可能已失效
  • 缺乏反检测配置,目标网站可能识别出Selenium爬虫

修复后的代码

import random
import pandas as pd
from selenium.webdriver.common.by import By
from selenium.webdriver import Chrome, ChromeOptions
from selenium.common.exceptions import WebDriverException

# 读取代理列表并保留类型信息
csv_file = pd.read_csv('proxies.csv')
proxies_list = [
    {'ip_port': f"{row['IPs']}:{row['Ports']}", 'type': row['Type']}
    for _, row in csv_file.iterrows()
]

def get_working_proxy(proxies):
    """测试代理可用性,返回第一个能正常连接的代理"""
    options = ChromeOptions()
    options.add_argument('--headless=new')  # 无头模式加快测试速度
    options.add_argument('--disable-gpu')
    options.add_argument('--no-sandbox')
    
    # 随机打乱代理顺序测试
    for proxy in random.sample(proxies, len(proxies)):
        proxy_str = proxy['ip_port']
        # 根据代理类型生成对应参数
        if 'SOCKS5' in proxy['type']:
            proxy_arg = f'socks5://{proxy_str}'
        elif 'HTTPS' in proxy['type']:
            proxy_arg = f'https://{proxy_str}'
        else:
            proxy_arg = f'http://{proxy_str}'
        
        options.add_argument(f'--proxy-server={proxy_arg}')
        
        try:
            driver = Chrome(options=options)
            driver.set_page_load_timeout(10)  # 设置10秒超时
            driver.get('https://www.soccerstats.com/')
            if driver.title:  # 验证页面是否加载成功
                driver.quit()
                return proxy_arg
        except WebDriverException:
            driver.quit()
            continue
    return None

# 获取可用代理
working_proxy = get_working_proxy(proxies_list)
if not working_proxy:
    print("没有可用的代理,请更新代理列表")
    exit()

# 初始化浏览器并添加反检测配置
options = ChromeOptions()
options.add_argument(f'--proxy-server={working_proxy}')
options.add_experimental_option('detach', True)
# 反检测配置
options.add_argument('--disable-blink-features=AutomationControlled')
options.add_experimental_option('excludeSwitches', ['enable-automation'])
options.add_experimental_option('useAutomationExtension', False)
options.add_argument('--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36')

try:
    driver = Chrome(options=options)
    driver.get('https://www.soccerstats.com/')
    driver.implicitly_wait(10)  # 隐式等待元素加载
    element = driver.find_element(By.XPATH, '//input[@name="theteam"]')
    element.send_keys('Barcelona FC')
    element.click()
except WebDriverException as e:
    print(f"访问失败:{e}")
    driver.quit()

关键修复说明

  • 代理类型适配:根据CSV中的Type字段,为不同类型代理生成对应前缀的--proxy-server参数,避免类型不匹配
  • 代理可用性测试:新增函数提前验证代理能否访问目标网站,跳过失效代理
  • 移除重复配置:仅使用--proxy-server参数配置代理,消除冲突
  • 反检测优化:添加禁用自动化识别的选项,修改User-Agent,降低被网站拦截的概率
  • 超时控制:设置页面加载超时,避免因代理过慢导致程序卡死

额外建议

  • 免费代理稳定性极差,建议使用付费代理服务或自建代理池
  • 优先使用WebDriverWait替代implicitly_wait,实现更精准的元素等待
  • 定期更新代理列表,剔除失效或慢响应的代理

内容的提问来源于stack exchange,提问作者K. M.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 21:33:28