Привет! Давай разберу по порядку — что происходит, почему сайт тебя палит и что с этим делать.

ЧТО ЭТО ВООБЩЕ
Это не «капча SofaScore», а защита Cloudflare — конкретно challenge-страница (окно «Verify you are human» / Turnstile). Cloudflare стоит перед сайтом как фильтр и для каждого запроса считает «уровень доверия». Если он низкий — показывает проверку. Причём пройти её один раз мало: пока общий скоринг твоего клиента низкий, окно будет вылезать снова и снова.

ПОЧЕМУ САЙТ ПОНИМАЕТ, ЧТО ЭТО БОТ
Cloudflare смотрит не на что-то одно, а на совокупность сигналов:
1) IP и прокси. Дата-центровые прокси (да и обычный VPS-IP) Cloudflare знает по диапазонам и заранее ставит им низкий рейтинг. Отсюда и разница, которую ты видишь: без прокси, с домашнего IP, доверие выше — но всё равно недостаточно из-за пунктов ниже.
2) TLS-отпечаток (JA3/JA4). У каждого HTTP-движка своя «подпись» при установке соединения. Встроенный HTTP-клиент автоматизации отдаёт подпись, не совпадающую с настоящим Chrome, — Cloudflare это видит ещё до загрузки страницы.
3) Отпечаток браузера. Canvas/WebGL, список шрифтов, разрешение экрана, navigator.webdriver, набор и порядок заголовков (sec-ch-ua, Accept-Language и т.д.). У инструмента автоматизации всё это часто «не как у живого браузера».
4) Поведение. Нет движений мыши, переходы слишком быстрые, нет естественных пауз и «нагулянных» cookie — для поведенческого анализа это красный флаг.
Cloudflare складывает всё это в один скоринг. Поэтому «подкрутить что-то одно» обычно не помогает — не хватает сразу по нескольким пунктам.

ЧТО ДЕЛАТЬ (правильный путь — API)
Главное: с фронтендом воевать не нужно. SofaScore сам подгружает все данные с открытого JSON API — сайт просто рисует то, что берёт оттуда. Значит, можно ходить сразу в API, минуя страницу с проверкой.
Как найти нужные запросы:
— открой нужную страницу sofascore.com в обычном Chrome
— F12 → вкладка Network → фильтр Fetch/XHR
— обнови страницу и смотри запросы к api.sofascore.com — это и есть источник данных. Правый клик по запросу → Copy → Copy as cURL, чтобы увидеть его целиком, вместе с заголовками.
Примеры эндпоинтов (api.sofascore.com/api/v1/...):
— живые матчи: /sport/football/events/live
— сезоны турнира: /tournament/{id}/seasons
— таблица: /tournament/{id}/season/{seasonId}/standings/total
— детали матча: /event/{eventId}
В ZennoPoster это делается кубиком HTTP-запроса (GET), а ответ — готовый JSON, который парсишь через обработку текста или C#-код. Браузер вообще не нужен → нет challenge, работает быстрее и стабильнее.

Важный нюанс: SofaScore подкрутил защиту и на самом API — «голые» REST-запросы могут отдавать 403. Поэтому запрос должен выглядеть как из браузера: живой User-Agent, заголовки Accept, Accept-Language и Referer:
https://www.sofascore.com/ . По сути берёшь заголовки из того самого Copy as cURL и подставляешь в свой запрос. Даже с этим API на порядок проще, чем прохождение Turnstile на странице.

ЕСЛИ ВСЁ-ТАКИ НУЖЕН ИМЕННО БРАУЗЕР
Если задача не «собрать данные», а именно эмулировать клики на живом сайте — учти, что с Cloudflare это гонка вооружений и 100% способа нет. В общих чертах играет роль: резидентные/мобильные прокси вместо дата-центра (по IP-репутации это главный фактор), антидетект-браузер с «живым» отпечатком (у нас для этого есть ZennoBrowser) и человекоподобные тайминги/поведение. Но под сбор данных это оверкилл.

ИТОГ
1. Не бейся о фронтенд — иди в API.
2. Найди нужные запросы через DevTools → Network (Copy as cURL).
3. Повтори их в ZennoPoster GET-запросом с браузерными заголовками.
4. Браузер + прокси — только если реально нужна эмуляция кликов.
Начни с API — с большой вероятностью задача закроется без всякой борьбы с защитой.