Może zacznę od wiedzy jaką zdobyłem przez te kilka dni:
1. Cloudflare Bot Challenge sprawdza user-agenta, czyli to czy przeglądarka jest zgodna z systemem operacyjnym i jej wersja jest aktualna
2. Gnerowane są hasze JA3 i JA4 czyli fingerprint przeglądarki, ja aby uzyskać większą wiarygodność używałem biblioteki:
tls_client
Czy większa skuteczność? W zależności od testu, trudno jest mi to oszacować, aproksymacja niestety ma duże odchylenie standardowe i po wykonaniu iluś testów ciężko jest mi powiedzieć, czy jest to faktycznie lepsze od zwykłego użycia selenium.
3. Próbowałem pakietu:
undetected-chromedriver
Jednak to repo na github nie jest już wspierane, testy wychodzą też różnie
4. Kożystałem z losowych adresów tor, co ciekawe przeglądanie interetu przez tor-browser nie generuje problemu wiecznie zapętlającej się captcha, której nawet ręcznie nie można przejść, jednak w przypadku selenium on pojawi się zawsze.
5. Obszedłem captche za pomocą wstrzyknięcia skryptu js, który wyciągał takie parametry jak:
pageAction <string> required
The action field can be found in the callback function to load the captcha. If cloudflareTaskType is used, the action is usually "managed" or "non-interactive".
data <string>required
The value of the data field can be taken from the cData parameter.
pageData <string> required
The value of the pageData field can be taken from the chlPageData parameter.
Wzorując się na tym fragmencie dokumentacji technicznej, wiedziałem gdzie tego szukać, ale wyciągnąć dynamicznie renderowane parametry nie było łatwo. Zrobiłem to po przez wstrzykiwanie kodu js w stronę html przed jej pełnym załądowaniem. Ta dokumentacja jest dostępna tutaj: https://docs.capmonster.cloud/docs/captchas/turnstile-task/?roistat_visit=615435
6. Wysyłałem następnie te parametry do api i otrzymywałem token, który wstrzykiwałem w stronę.
7. To rozwiązanie działąło mi krótko, bo tylko przez jeden dzień. Co ciekawe ręcznie nie potrafiłem rozwiązać tego wyzwania, ale wstrzyknięcie tokena działało.
8. Teraz to rozwiązanie już mi nie działa, bo rozwiązanie powoduje zapętlenie
9. Najlepszym rozwiązaniem wydaje się posiadać pulę, zaufanych adresów, ip, które nie są oflagowane
10. Próbowałem użyć także proxy, gdzie wszystkie wydają się być oflagowane
Jakie rozwiązanie tego problemu możecie mi zaproponować?