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

如何在Python代码中绕过Captcha?求自动验证方案及可用库

Kompass爬虫滑块验证码绕过方案及工具推荐

一、绕过滑块验证的最优方案

1. 先优化爬虫行为,降低被检测概率

  • 复用浏览器实例:你现在每次循环都新建uc.Chrome实例然后关闭,频繁创建会话会被网站判定为异常。把driver初始化放在循环外,所有链接爬完再quit,或者用单例模式管理。
  • 模拟人类操作节奏:不要固定time.sleep(5),改用random.uniform(3, 8)生成随机延迟;爬取时模拟页面滚动、随机点击空白区域,不要直接加载完就拿源码。
  • 随机化请求标识:用fake_useragent生成不同的User-Agent,配合undetected-chromedriver的配置,禁用浏览器的自动化特征检测(比如执行driver.execute_script("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})"))。
  • IP轮换:用高匿代理IP池,每次请求切换IP,避免同一IP短时间内频繁访问。

2. 直击问题根源:避开页面验证

  • 抓包找API接口:打开浏览器开发者工具的Network面板,刷新目标页面,找返回企业数据的AJAX接口(一般是JSON格式),直接请求这些接口,完全绕开页面的滑块验证。
  • 第三方打码服务:如果必须处理滑块,用付费打码平台,这类平台有人工或AI识别验证码,通过API返回验证结果,配合selenium完成滑块拖动。

二、推荐的Python工具库

  • undetected-chromedriver:你当前在用的库,针对Chrome反检测做了优化,正确配置后能绕过大部分基础自动化检测,减少滑块触发概率。
  • selenium-wire:可以拦截浏览器的所有请求,方便你找到网站的后端API接口,直接请求接口获取数据,不用再处理页面验证码。
  • fake_useragent:生成随机的User-Agent字符串,模拟不同浏览器、设备的请求标识,降低被识别为爬虫的风险。
  • ddddocr:开源的OCR工具,支持识别滑块验证码的缺口位置,配合selenium的ActionChains模拟人类拖动轨迹,完成滑块验证。
  • captcha-solver:集成多种第三方打码平台的库,适合处理复杂滑块验证码,只需调用API就能获取验证结果,省心但需要付费。

你的爬虫代码

def get_data():
    NAME = []
    TURNOVER = []
    SIZE = []
    EMPLOYEES = []
    FULL_ADDRESS = []
    POST_TOWN = []
    POST_CODE = []
    SIC_CODE = []
    DIRECTORS = []
    TELEPHONE = []
    EMAIL = []
    WEBSITE = []

    df = pd.read_csv('./Links.csv')
    R_LINKS = df['LINKS'].to_list()

    for links in R_LINKS:
        print(links)

        driver = uc.Chrome()

        try:
            driver.get(links)
            time.sleep(5)
            content = driver.page_source
            soup = BeautifulSoup(content, 'html.parser')
            driver.quit()
            body = soup.body
            company_name = body.find_all(
                'h1', {'itemprop': 'name'})[0].getText()
            NAME.append(company_name.strip())

            kompass_id = body.find_all('tr', {'class': 'trKid'})[
                0].find('td').getText()
            number = body.find_all('input', {
                                   'id': f'freePhone-contactCompanyForCompany-{kompass_id}'})[0].get('value')
            TELEPHONE.append(number)

            website = body.find_all('a', {'id': 'webSite_presentation_0'})[
                0].getText()
            WEBSITE.append(website)

            employees = soup.find_all('td', text=re.compile('Employees'))[
                0].getText()
            EMPLOYEES.append(employees)
            address = body.find_all('p', {'class': 'blockAddress'})[
                0].getText().split()

            postcode = address[len(address) - 2] + ' ' + \
                address[len(address) - 1]
            POST_CODE.append(postcode)

            fulladdress = []
            for a in body.find_all('p', {'class': 'blockAddress'}):
                address = a.getText()
                fulladdress.append(address.strip())
            addressses = ' '.join(fulladdress).split()
            FULL_ADDRESS.append(' '.join(addressses))

            type = soup.find('th', text=re.compile('SIC07'))
            SIC_CODE.append(type.parent.findNext('td').contents[0].strip())

            directors = []
            for d in body.find_all('p', {'class': 'executiveName'}):
                director = d.getText()
                directors.append(director.strip())
            DIRECTORS.append(' '.join(directors))
        except:
            pass

    print('POST_CODE', POST_CODE)

    new_df = pd.DataFrame({
        'POST_CODE': POST_CODE,
        'FULL_ADDRESS': FULL_ADDRESS,
        'SIC_CODE': SIC_CODE,
        'DIRECTORS': DIRECTORS,
        'NAME': NAME,
        'POST_CODE': POST_CODE,
        'TELEPHONE': TELEPHONE,
        'WEBSITE': WEBSITE
    })
    new_df.to_csv('data.csv', mode='a', index=False, header=False)

目标链接

  • https://gb.kompass.com/c/unisto-ltd/gb82592280/
  • https://gb.kompass.com/c/spotler/gb25036694/
  • https://gb.kompass.com/c/parts-plus/gb55346048/

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 12:57:24