Captcha to miecz o dwóch ostrzach. Z jednej strony chroni nas przed zmasowanym atakiem botów, z drugiej zaś może nam utrudnić / zablokować dostęp w różne miejsca.
Prawdę powiedziawszy dzisiejsze elemelki radzą sobie z rozwiązywaniem captcha lepiej od ludzi, więc z tą ochroną różnie bywa.
Konkretny przykład: JoeMonster. Czytam ich od ponad dwudziestu lat, oczywiście przez RSS (aktualnie: Miniflux). Ostatnio chyba się wycwanili i zaczęli używać Cloudflare, bo mój Miniflux zaczął narzekać:

Zaglądam więc na Joe "ręcznie" i faktycznie pojawiła się captcha od Cloudflare. Nie musiałem nic klikać, automacik uznał, że moja przeglądarka jest wystarczająco ludzka i dwie sekundy później łaskawie zezwolił na audiencję na stronie głównej JM. Widać jednak Miniflux ze swoim curl-em nie ogarnął tematu. Jak to obejść?
Pierwsza krew: SSH + proxy
Najpierw spróbowałem wersji z tunelem ssh i lokalnym proxy. Optymistycznie, bo metoda zadziałała niedawno dla innego blogu, na którym miałem podobny problem. Idea jest taka, że zestawiamy tunel SSH między Minifluxem a komputerem lokalnym, na jakimś wysokim porcie (np. 1080), następnie ustawiamy na chwilę SOCKS proxy w lokalnej przeglądarce na tenże właśnie tunel i próbujemy otworzyć niedziałający URL lokalnie - jak się pojawi jakaś captcha, po prostu ją rozwiązujemy, a serwer widzi ruch z maszyny z Minifluxem i po kłopocie. Ale tutaj metoda nie zadziałała, bo w przypadku Cloudflare rozwiązanie captcha kończy się zostawieniem ciasteczka *w lokalnej przeglądarce*, a więc Miniflux dalej będzie lądował w malinach.
Część druga: Playwright, headless, cały na biało
Zgodnie z maksymą jak trwoga, to do Boga, odpalam elemelka, wyłuszczam mu detalicznie o co biega. Ten najpierw instaluje sobie pod maską Playwright (biblioteka dla skryptów do udawania, że się ma prawdziwą przeglądarkę), potem próbuje się wbić na JM, dostaje captcha od CF, próbuje się przez nią przegryźć, ale nie udaje mu się, bo najwyraźniej po stronie CF mają jakieś bardziejsze algorytmy. Nie będzie elemelek pluł im w twarz, nieprawdaż.
Część trzecia: operacja ciasteczko
Kolejny pomysł: wziąć ciasteczko z zalogowanej sesji Firefoxa i przetransferować je jakoś do Minifluxa - w ten sposób CF będzie "myślał", że to ja, a tymczasem to Miniflux. Tylko że w Firefoxie nie ma już opcji oglądania ciasteczek, trzeba na piechotę odpytywać lokalną bazę sqlite, nie chce mi się, zlecam zadanie elemelkowi. A poza tym trochę za bardzo uprościłem ten model - ciasteczko po przeniesieniu w inne środowisko obumiera natychmiast, bo szyfrowanie, bo tożsamość maszyny, bo Wogle. Back to square one.
Część czwarta: ostatnia nadzieja
Tonący brzytwy się chwyta, spróbowałem napisać sobie automatyczną przelotkę w Pythonie, która będzie pobierała raz dziennie feed JM na lokalnym kompie (wtedy captcha CF pojawi mi się normalnie na ekranie) a następnie eksponowała go w postaci end-pointu http dla Minifluxa, który będzie dzięki temu widział już gwarantowany "czysty" feed. Wszystko też za pomocą Playwright, ale lokalnie, z opcją -headful dzięki czemu okienko przeglądarki pojawia się interaktywnie i mogę tam zakliknąć captcha jeżeli zajdzie potrzeba. Niestety, CF jest na tyle sprytny, że captcha nie przechodzi nawet w trybie interaktywnym, jeżeli przeglądarka jest "kierowana" przez Playwright. Uruchomiona myszoklikiem - działa. Uruchomiona automatem pythonowym - nie działa. Noż urwał nać, taka wasza dyszlem chrzczona...
Grande Finale: ić pan stont
Efekt końcowy: wróciłem na tarczy. Po prawie dwóch godzinach nierównej walki postanowiłem ostatecznie wypiętrolić JoeMonstera z Minifluxa. Od dzisiaj będę tam zaglądać wyłącznie ręcznie, na piechotę, bezpośrednio w przeglądarce, jak jakieś zwierzę. Jak mi się przypomni.
Dziwne czasy.
Jeżeli chcesz do komentarza wstawić kod, użyj składni:
[code]
tutaj wstaw swój kod
[/code]
Jeżeli zrobisz literówkę lub zmienisz zdanie, możesz edytować komentarz po jego zatwierdzeniu.