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

使用Python Selenium解析allegro.pl遭反爬拦截的问题求助

问题描述

需要编写allegro.pl的解析器,检查2000个商品链接的库存状态,但该网站反爬防护极强。使用Selenium并配置代理后,仅1-2次迭代IP就被封禁或触发验证码,最终完全无法访问。

核心代码实现
import time
from bs4 import BeautifulSoup
import exel
import zipfile
from selenium import webdriver
from selenium_stealth import stealth

LINK_IMG_ERROR = 'https://assets.allegrostatic.com/metrum/icon/stop-sign-92284fffce.svg'
PROXY_HOST = ''
PROXY_PORT = 8000  # Your proxy port
PROXY_USER = ''
PROXY_PASS = ''

NORMAL_STATUS_CODE = 200
headers = ({
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1.2 Safari/605.1.15',
    'Accepts': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
})

manifest_json = """
{
    "version": "1.0.0",
    "manifest_version": 2,
    "name": "Chrome Proxy",
    "permissions": [
        "proxy",
        "tabs",
        "unlimitedStorage",
        "storage",
        "<all_urls>",
        "webRequest",
        "webRequestBlocking"
    ],
    "background": {
        "scripts": ["background.js"]
    },
    "minimum_chrome_version":"76.0.0"
}
"""

background_js = """
let config = {
        mode: "fixed_servers",
        rules: {
        singleProxy: {
            scheme: "http",
            host: "%s",
            port: parseInt(%s)
        },
        bypassList: ["localhost"]
        }
    };
chrome.proxy.settings.set({value: config, scope: "regular"}, function() {});
function callbackFn(details) {
    return {
        authCredentials: {
            username: "%s",
            password: "%s"
        }
    };
}
chrome.webRequest.onAuthRequired.addListener(
            callbackFn,
            {urls: ["<all_urls>"]},
            ['blocking']
);
""" % (PROXY_HOST, PROXY_PORT, PROXY_USER, PROXY_PASS)


def get_chromedriver(use_proxy=False, headers=None):
    options = webdriver.ChromeOptions()
    if use_proxy:
        plugin_file = 'proxy_auth_plugin.zip'

        with zipfile.ZipFile(plugin_file, 'w') as zp:
            zp.writestr('manifest.json', manifest_json)
            zp.writestr('background.js', background_js)

        options.add_extension(plugin_file)

    options.add_experimental_option("excludeSwitches", ["enable-automation"])
    options.add_experimental_option('useAutomationExtension', False)
    options.add_argument(f'--user-agent={headers}')
    driver = webdriver.Chrome('chromedriver', options=options)

    stealth(
        driver,
        languages=["en-US", "en"],
        vendor="Google Inc.",
        platform="Win64",
        webgl_vendor="Intel Inc.",
        renderer="Intel Iris OpenGL Engine",
        fix_hairline=True,
    )
    return driver


def check_stock_selenium(driver, url_list):
    list_link_error = []
    try:
        for url in url_list:
            driver.get(url=url)
            time.sleep(3)
            html = driver.page_source
            soup = BeautifulSoup(html, 'lxml')
            stock_info = soup.find_all('img', {"class": "meqh_en msa3_z4 mhd5_0m ivrkk m0s5_fg m0t1_7i mse2_56 mg9e_0 mj7a_0 mh36_0 mvrt_16 mvrt_24_l mpof_z0 mjyo_lo"})

            if len(stock_info) > 0 and stock_info[0].get_attribute_list('src') == LINK_IMG_ERROR:
                list_link_error.append(url)
    finally:
        driver.quit()
    if len(list_link_error) > 0:
        return True
    else:
        return False


def main():
    driver = get_chromedriver(use_proxy=True, headers='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36')
    result = check_stock_selenium(driver, exel.get_data('my_spreadsheet.xlsx'))
    driver.close()
    driver.quit()


if __name__ == '__main__':
    main()
解决方向与建议
  • 代理层优化

    • 放弃固定代理,改用高匿动态住宅代理,每次请求切换IP,避免IP被快速拉黑;
    • 验证代理质量,确保代理IP未被allegro.pl列入黑名单,优先选择稳定的付费代理服务;
    • 每次启动浏览器实例时更换代理,而非复用同一代理处理所有请求。
  • 行为模拟优化

    • 替换固定time.sleep(3)为随机延迟,比如random.uniform(2, 6),模拟真实用户的浏览间隔;
    • 添加随机操作:如滚动页面、随机点击页面空白区域、悬停元素等,避免机械性的请求行为;
    • 分批次处理链接,每处理10-20个链接后,暂停5-10分钟,再切换IP继续;
    • 避免连续请求同一域名下的资源,可穿插其他低风险请求打破请求规律。
  • 反检测增强

    • 改用undetected-chromedriver替代原生ChromeDriver,它默认会隐藏大部分自动化特征;
    • 完善stealth配置:添加run_on_insecure_origins=True,调整webgl_vendor和renderer为随机值,避免固定指纹;
    • 添加Chrome启动参数:--disable-blink-features=AutomationControlled,彻底禁用navigator.webdriver特征;
    • 维护User-Agent池,每次启动浏览器或请求时随机选择UA,避免固定标识。
  • 解析逻辑优化

    • 优先使用Selenium原生定位方法(如driver.find_element)获取库存元素,减少BeautifulSoup解析的开销;
    • 抓包分析网站API:查看是否有直接返回库存状态的接口,直接请求API比渲染整页更高效,也更难被反爬检测;
    • 用WebDriverWait等待库存元素加载完成,而非固定延迟,避免过早解析页面。
  • 验证码与封禁处理

    • 集成自动打码服务应对触发的验证码;若验证码出现频繁,暂停当前IP的使用,切换新IP后再继续;
    • 当检测到IP被封禁时,立即切换代理,并延长暂停时间,避免短时间内重复触发封禁机制。
  • 合规性检查

    • 查看allegro.pl的robots.txt和服务条款,确保爬取行为符合网站规定,避免法律风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 09:29:57