Python ile Capy Puzzle Nasıl Çözülür: Anahtardan Form Gönderimine

solve capy puzzle in python - How to Solve Capy Puzzle in Python, From Key to Form Post

Python ile Capy Puzzle çözmek için sitenin PUZZLE_ anahtarını sayfadan okuyun, capskip paketindeki solver.capy() metodunu bu anahtar ve sayfa URL’siyle çağırın, ardından döndürdüğü üç değeri capy_captchakey, capy_challengekey ve capy_answer form alanlarında birlikte ve hemen gönderin. Sayfayı çekerken de formu gönderirken de aynı requests oturumunu kullanın; böylece sitenin çerezleri cevapla birlikte geri gider. İnsanları şaşırtan kısım sonucun biçimidir. Çoğu CAPTCHA türü tek bir token döndürür; Capy ise yalnızca bir arada işe yarayan üç değer döndürür ve bunlardan birinin süresi çabuk dolar. CapSkip, Capy Puzzle desteğini 1.4.0 sürümünde ekledi. Bu rehber anahtarı, çağrıyı, bilerek konmuş iki saniyelik bekletmeyi, gönderimi, yeniden denemeleri ve çok sayıda çözümü aynı anda çalıştırmayı ele alıyor.

Neye ihtiyacınız var

  • Bir Windows makinesinde çalışan CapSkip 1.4.0 veya üzeri. Capy desteği, CaptchaFox ve Friendly Captcha ile birlikte bu sürümle geldi.
  • Python 3.10 veya üzeri ve capskip paketinin 1.3.0 veya üzeri bir sürümü; capy() metodunu içeren ilk sürüm budur. Örnekler ayrıca requests kütüphanesini, paralel çözümler bölümü ise httpx kütüphanesini kullanır.
  • Hedef sayfadan iki değer: PUZZLE_ ile başlayan Capy anahtarı ve widget’ın çalıştığı sayfanın URL’si. Anahtarın nerede bulunduğunu 1. adım gösteriyor; aynı yer, üçüncü ve isteğe bağlı bir değere ihtiyacınız olup olmadığını da söylüyor.
  • Çözücü için bir adres. Local modunda CapSkip 127.0.0.1 üzerinden yalnızca o cihaza yanıt verir; Server modunda ise ağ adresinizi veya genel IP’nizi dinler, böylece başka bir makinedeki bir betik onu API üzerinden çağırabilir. İkisi de şurada ayarlanır: bağlantı ayarları bölümünde yer alır; ne zaman geçiş yapmanız gerektiğini aşağıda ayrı bir başlık anlatıyor.
# Quoted, so cmd.exe does not read >= as a redirect
pip install "capskip>=1.3.0" requests httpx

1. Adım: PUZZLE_ anahtarını ve Capy host’unu bulun

İhtiyacınız olan her şey hedef sayfadan gelir; anahtar herkese açıktır ve her ziyaretçi için aynıdır. Siteler onu iki yerde taşır. Widget script’inin URL’sindeki k parametresi, requests kütüphanesinin indirdiği HTML’in içindedir. Widget bir tarayıcıda çalıştıktan sonra anahtar, widget’ın forma yazdığı gizli bir capy_captchakey input alanında da durur; DevTools onu orada gösterir. PUZZLE_ ön ekini arayan tek bir düzenli ifade onu iki yerde de bulur.

import re

import requests

PAGE_URL = "https://example.com/login"
session = requests.Session()
html = session.get(PAGE_URL, timeout=30).text

# The widget script's k= parameter. The capy_captchakey input only
# exists once the widget has run in a browser.
key = re.search(r"PUZZLE_[A-Za-z0-9_-]+", html)

# The widget script's own host; None means the default one.
host = re.search(r"(https://[^\"'\s<>]+?)/puzzle/get_js/", html)
api_server = host.group(1) if host else None
print(key and key.group(0), api_server)

Script etiketine bakarken host’unu da not edin. Script URL’sinde /puzzle/get_js/ öncesindeki her şey, anahtarın arkasında durduğu Capy API’sidir ve CapSkip buna api_server der. Varsayılan değeri, canlı servisin çalıştığı https://jp.api.capy.me adresidir; dolayısıyla buna yalnızca bir sayfa widget’ı başka bir yerden yüklediğinde ihtiyacınız olur. Tuzaklardan biri diğer çözücülerin dokümantasyonundan gelir: birkaçı hâlâ bölgesel ön ek olmadan api.capy.me adresini gösterir ve bu host artık çözümlenmiyor. Eski bir örnek bu değeri ayarlıyorsa seçeneği silin.

Sayfa bilerek bir requests.Session üzerinden çekilir. 3. adımda gönderdiğiniz form çoğu zaman sayfanın ayarladığı bir oturum çerezine bağlıdır ve bir oturum nesnesi bu çerezi hiçbir ek kod gerektirmeden geri gönderir.

2. Adım: capy() çağrısı

Python ile Capy Puzzle çözmek için tek bir metoda ihtiyacınız var. Metot anahtarı ve sayfa URL’sini, ayrıca isteğe bağlı anahtar kelime argümanlarını alır; varsayılan host üzerindeki bir sayfa için bu iki değer yeterlidir.

# pip install "capskip>=1.3.0"
from capskip import CapSkip

solver = CapSkip(host="127.0.0.1", port=8080)

result = solver.capy("PUZZLE_YOUR_KEY", "https://example.com/login")

print(result["captchakey"])     # goes in capy_captchakey
print(result["challengekey"])   # goes in capy_challengekey
print(result["answer"])         # goes in capy_answer

Sonuç düz bir dict’tir. Adlandırılmış üç anahtarı okuyun. code anahtarı, sunucunun cevap nesnesinin tamamını, yani dört alanın hepsini içeren ve loglama için kullanışlı olan bir dict’i tutar; respKey ise yalnızca diğer servislerle uyumluluk için var olan boş bir dizedir. Cevap, 0xax8ex0xax84x benzeri bir şeyle başlayan uzun bir dizedir: bir koordinat değil, parça hareket ederken widget’ın kaydedeceği sürükleme izidir.

Metodun kabul ettiği seçenekler

capy() metodu, değeri None olan her anahtar kelime argümanını istek gönderilmeden önce çıkarır; böylece 1. adımdaki host’u her çağrıda verebilir ve gönderilip gönderilmeyeceğine regex’in karar vermesine izin verebilirsiniz.

result = solver.capy(
    key.group(0),
    PAGE_URL,
    # None (no get_js script on the page) is dropped, and CapSkip
    # then uses its default host.
    api_server=api_server,
    # Poll every half second; see the next section for why.
    polling_interval=0.5,
)

capy() metodu api_server dışında proxy, proxytype ve useragent değerlerini, ayrıca saniye cinsinden çağrı başına bir timeout ve polling_interval alır. Bir user agent ayarlarsanız, CapSkip’in bulmacayı çekmek için yaptığı tek istekte gönderilir; buna nadiren ihtiyaç duyarsınız. Bir de version seçeneği vardır, ancak yalnızca puzzle kabul edilir. Capy’nin diğer ailesi olan avatar, farklı bir endpoint’in arkasında duran başka bir challenge türüdür; bu yüzden SDK, sitenin reddedeceği bir cevap döndürmek yerine onu bir ValidationException ile geri çevirir. Bilinmeyen bir anahtar kelime, boş bir anahtar veya sayfa URL’si ya da HTTP, HTTPS, SOCKS5 veya SOCKS5H dışında bir proxy türü, daha hiçbir şey gönderilmeden aynı istisnayı fırlatır.

Bir Capy çözümü neden yaklaşık iki saniye sürer

Tespitin kendisi hızlıdır. CapSkip bulmaca görselini çeker, biraz piksel hesabıyla boşluğu bulur ve sürükleme izini oluşturur; işin içinde ne bir tarayıcı ne de bir model vardır. Sonra bilerek bekler.

Capy, bir bulmacanın çekilmesiyle cevabın alınması arasındaki süreyi ölçer ve bir insanın parçayı sürükleyebileceğinden daha hızlı gelen her şeyi reddeder. CapSkip’in Capy üzerindeki kendi testleri bu alt sınırı yaklaşık bir saniyeye koyuyor. Ret, yanlış bir cevapla aynı mesajı taşır; dolayısıyla fazla hızlı teslim edilen doğru bir çözüm tıpatıp bozuk bir çözücü gibi görünür. Bu yüzden CapSkip her Capy sonucunu, bulmacayı çektikten iki saniye sonrasına kadar bekletir. Bekleme bir sleep çağrısıdır, yani gecikme ekler ama CPU harcamaz.

Varsayılan ayarlarla bir çağrının dört saniyeye yakın sürmesinin nedeni şu: SDK işi CapSkip’e gönderir göndermez yoklama yapar, çeyrek saniye sonra yeniden yoklar ve aralığı her seferinde ikiye katlayarak pollingInterval değerine, yani varsayılan olarak 5 saniyeye kadar açar. Yoklamalar 0, 0.25, 0.75, 1.75 ve 3.75 saniyelerde gerçekleşir, dolayısıyla iki saniyelik bir cevap beşinci yoklamada alınır. Çağrıda polling_interval=0.5 verirseniz (ya da istemcinin çözdüğü şeylerin çoğu Capy ise constructor’da pollingInterval=0.5 ayarlarsanız) çağrı, iş gönderildikten iki saniyeyi biraz aşkın bir süre sonra döner; bizim testlerimizde bu süre yaklaşık 2.3 saniyeydi. Formu göndermeden önce kendi gecikmenizi eklemeyin ve bekletmeyi kısaltmaya da çalışmayın: cevabın kabul edilmesini sağlayan tam olarak bu bekletmedir.

3. Adım: üç değerin hepsini tek bir istekte gönderin

Üç değer, widget’ın forma kendisinin yazacağı alanlara girer. Onları birlikte, formun geri kalanıyla aynı istekte ve sayfayı çeken oturum üzerinden gönderin.

# session is the one Step 1 used, so the page's cookies go back too.
resp = session.post(
    PAGE_URL,  # or wherever the form's action attribute points
    data={
        "username": "YOUR_USERNAME",
        "capy_captchakey": result["captchakey"],
        "capy_challengekey": result["challengekey"],
        "capy_answer": result["answer"],
    },
    timeout=30,
)
print(resp.status_code)

Cevabı tam olarak döndüğü gibi gönderin. Sitenin backend’i onu çekilen bulmacaya göre kontrol eder; dolayısıyla kırpmak, yeniden kurmak ya da herhangi bir şekilde düzeltmek onu geçersiz kılar. requests kütüphanesi form gövdesine yüzde kodlaması (percent-encoding) uygular; bu sorun değildir, çünkü sunucu kontrol etmeden önce onu çözer. Ardından hemen gönderin. CapSkip her çözüm için yeni bir challenge anahtarı üretir ve bulmaca bu anahtara bağlıdır; dolayısıyla anahtar tek kullanımlıktır ve ömrü kısadır, bir çözüm de yalnızca bir gönderimi karşılar.

Gerçek formun gönderdiğini birebir taklit edin. Çoğu sayfa, anti-forgery token’ı gibi kendine ait gizli alanlar taşır; bazıları ise form gönderimi yerine script üzerinden bir JSON gövdesiyle gönderir. DevTools açıkken formu bir kez elle gönderin, isteği kopyalayın ve üç Capy değerini sayfanın koyduğu yere koyun.

4. Adım: bir çözüm başarısız olduğunda yeniden denemeler

Python ile kayda değer bir hacimde Capy Puzzle çözdüğünüzde bazı çözümler başarısız olur. Başarısız bir çözüm, mesajı ERROR_CAPTCHA_UNSOLVABLE içeren bir ApiException olarak gelir; SDK’nın yokladığı endpoint olan res.php üzerinden bu tek kod iki farklı durumu kapsar. Onları birbirinden ayıran şey ne sıklıkta yaşandıklarıdır.

Ne olduNasıl görünürNe yapmalı
CapSkip boşluğu bulamadıAra sıra olur ve bir sonraki deneme genellikle başarılı olurYeniden deneyin. Her deneme farklı bir fotoğraf üzerinde yepyeni bir bulmaca çeker
Capy API’si anahtarı reddettiO tek anahtar için her denemede olur ve CapSkip’teki Capy görev listesi Invalid captcha key gösterirAnahtarı ve api_server değerini kontrol edin. CapSkip reddedilen bir anahtarı asla yeniden denemez, çünkü aynı şekilde yine reddedilirdi

Iskalar nadirdir, dolayısıyla tek bir yeniden deneme neredeyse her şeyi karşılar. CapSkip’in ayarlarındaki Capy bölümünde Retries değerini belirleyin (varsayılan olarak 0’dır ve görev başına en fazla üç yeniden denemeye izin verir) ya da kendi kodunuzda yeniden deneyin:

from capskip import ApiException


def solve_capy(key, url, attempts=3, **options):
    for attempt in range(1, attempts + 1):
        try:
            return solver.capy(key, url, **options)
        except ApiException as exc:
            # A missed hole reads as unsolvable, and the next try
            # draws a new puzzle. Anything else is final.
            if "UNSOLVABLE" not in str(exc) or attempt == attempts:
                raise

capy() metodu, istemcinin 120 saniye olan defaultTimeout değeriyle yoklama yapar, çünkü bir Capy çözümü bir tarayıcı oturumu değil, tek bir çekme işlemi ve biraz aritmetiktir. CapSkip de kendi saatini işletir: Capy bölümünde bir görev, 10 thread’den (Max. Threads) birini en fazla 250 saniye (Wait Timeout) bekleyebilir ve tek bir deneme 60 saniye (Row Timeout) alır. Normal bir çözüm bunların hepsine kat kat sığar.

Çok sayıda Capy bulmacasını aynı anda çözmek

AsyncCapSkip, Python’da bir takma ad değil, gerçek bir asyncio istemcisidir; bu yüzden asyncio.gather birkaç çözümü yan yana çalıştırır. Her çözümü kendi gönderimiyle eşli tutun. Önce yüz çözümü toplayıp sonra göndermek, son çözümler biterken ilk challenge anahtarlarının eskimesine yol açar.

import asyncio

import httpx
from capskip import AsyncCapSkip

solver = AsyncCapSkip(host="127.0.0.1", port=8080, pollingInterval=0.5)
slots = asyncio.Semaphore(10)  # CapSkip's Capy Max. Threads


async def solve_and_submit(key, url, form):
    # One client per job, so each form session keeps its own cookies.
    async with slots, httpx.AsyncClient(
            timeout=30, follow_redirects=True) as client:
        await client.get(url)
        result = await solver.capy(key, url)
        return await client.post(url, data={
            **form,
            "capy_captchakey": result["captchakey"],
            "capy_challengekey": result["challengekey"],
            "capy_answer": result["answer"],
        })


async def main(jobs):
    return await asyncio.gather(
        *(solve_and_submit(*job) for job in jobs), return_exceptions=True)

Semaphore, CapSkip’in thread sayısıyla eşleşir; böylece hiçbir iş, bir oturumu açık tutarak CapSkip’in kuyruğunda beklemez. Ayrıca Python standart kütüphanesinden gelir ve şu başlık altında belgelenmiştir: asyncio.Semaphore. Hacim arttığında proxy de ekleyin. Her çözüm Capy API’sinden yeni bir bulmaca çeker ve tek bir adresten gelen sürekli bir bulmaca akışı, hız sınırlamanın yakalamak için var olduğu kalıbın ta kendisidir. CapSkip’in Capy bölümünde bir proxy havuzu yapılandırın ya da her çağrıda type ve uri içeren bir proxy dict’i verin; proxy yalnızca bulmacanın çekilmesini etkiler, bu da bir Capy çözümünün yaptığı tek istektir. Diğer asyncio kalıpları şurada: Python’da paralel CAPTCHA çözme rehberi.

Çözücüyü başka bir makinede çalıştırmak

Betik ve CapSkip aynı Windows bilgisayarı paylaştığı sürece 127.0.0.1 doğru adrestir. Python kodu bir VPS’e, bir konteynere, bir CI runner’a ya da barındırılan bir notebook’a taşındığında loopback yanlış makineyi gösterir ve ilk çözüm bir NetworkException fırlatır. CapSkip’i Server moduna alın; o zaman ağ adresinizi veya genel IP’nizi dinler, böylece bunların hepsi onu aynı API üzerinden çağırabilir. Rota internetten geçiyorsa statik bir genel IP kullanın, API anahtarı doğrulamasını açın ve bir Windows Firewall kuralıyla portu yalnızca beklediğiniz adreslerle sınırlayın. Çözücü hâlâ sizin kendi Windows makinenizdir ve çözüm başına ücretlendirme hâlâ yoktur.

SDK ortam değişkenlerini kendiliğinden okumaz. Tam örnekte olduğu gibi CAPSKIP_HOST, CAPSKIP_PORT ve CAPSKIP_API_KEY değerlerini kodunuzda okuyup constructor’a verin; böylece aynı betik hem masanızda hem de bir sunucuda çalışır.

Tam çalışan örnek

# pip install "capskip>=1.3.0" requests
import os
import re

import requests
from capskip import (ApiException, CapSkip, CapSkipError,
                     TimeoutException, ValidationException)

PAGE_URL = "https://example.com/login"

solver = CapSkip(
    apiKey=os.getenv("CAPSKIP_API_KEY", "capskip"),
    host=os.getenv("CAPSKIP_HOST", "127.0.0.1"),
    port=int(os.getenv("CAPSKIP_PORT", "8080")),
    # Capy answers after a two second hold; poll often enough to catch it.
    pollingInterval=0.5,
)
session = requests.Session()

html = session.get(PAGE_URL, timeout=30).text
key = re.search(r"PUZZLE_[A-Za-z0-9_-]+", html)
if not key:
    raise SystemExit("No PUZZLE_ key in the HTML; find it in DevTools.")
host = re.search(r"(https://[^\"'\s<>]+?)/puzzle/get_js/", html)

try:
    for attempt in range(1, 4):
        try:
            result = solver.capy(key.group(0), PAGE_URL,
                                 api_server=host.group(1) if host else None)
            break
        except ApiException as exc:
            # A missed hole reads as unsolvable; the next try draws a new puzzle.
            if "UNSOLVABLE" not in str(exc) or attempt == 3:
                raise
            print(f"attempt {attempt}: {exc}")
except ValidationException as exc:
    raise SystemExit(f"not sent: {exc}")
except TimeoutException:
    raise SystemExit("gave up waiting; defaultTimeout is 120 seconds")
except CapSkipError as exc:
    # A third miss, a refused key, or CapSkip unreachable.
    raise SystemExit(f"solve failed: {exc!r}")

# All three together, straight away: the challenge key is single-use.
resp = session.post(
    PAGE_URL,  # or wherever the form's action attribute points
    data={
        "username": "YOUR_USERNAME",
        "capy_captchakey": result["captchakey"],
        "capy_challengekey": result["challengekey"],
        "capy_answer": result["answer"],
    },
    timeout=30,
)
print(resp.status_code)

Üç denemenin üçü de başarısız olursa her şeyden önce anahtara bakın, çünkü reddedilen bir anahtar her seferinde aynı şekilde başarısız olur, bir ıska ise neredeyse hiçbir zaman üç kez üst üste yaşanmaz. Sayfa widget’ı paketlenmiş bir script’ten oluşturuyorsa ve regex hiçbir şey bulamıyorsa Network sekmesini açın; anahtarı ve host’u widget’ın kendi isteğinden kopyalayın. Bu metodun arkasındaki ham endpoint şurada belgelenmiştir: API referansının Capy bölümü.

Sık görülen hatalar ve anlamları

GördüğünüzNedenDüzeltme
capy() üç değerin hepsini döndürdüğü hâlde site gönderimi reddediyorCevap değiştirildi ya da değerlerden yalnızca biri veya ikisi forma ulaştıresult["answer"] değerini diğer iki değerle birlikte, birebir ve tek istekte gönderin
Site gönderimi reddediyor ve oturumun süresinin dolduğunu söylüyorSayfa requests.get() ile çekildi, form ise yeni bir istekle gönderildi; bu yüzden sayfanın çerezleri hiç geri gitmediSayfayı çekmek ve formu göndermek için tek bir requests.Session kullanın
Bir kez çalışan gönderim ikinci denemede başarısız oluyorChallenge anahtarı tek kullanımlıktır ve ömrü kısadırHer gönderim için yeniden çözün ve hemen gönderin
Tek bir anahtar için her denemede bir ApiExceptionCapy API’si anahtarı reddetti ya da api_server yanlış host’u gösteriyorAnahtarı ön eki dahil yeniden kopyalayın ve script etiketinin host’unu kontrol edin
Ara sıra gelen, ERROR_CAPTCHA_UNSOLVABLE içeren bir ApiExceptionCapSkip o bulmacadaki boşluğu bulamadıYeniden deneyin; bir sonraki deneme farklı bir bulmaca çeker
Başka bir servisten örnek kopyaladıktan sonra her çözüm başarısız oluyorÖrnek, api_server değerini artık çözümlenmeyen api.capy.me olarak ayarlıyorSeçeneği kaldırın ve varsayılan host’u kullanın
Daha hiçbir şey gönderilmeden gelen bir ValidationExceptionBoş bir anahtar veya sayfa URL’si, version olarak avatar, HTTP, HTTPS, SOCKS5 veya SOCKS5H dışında bir proxy türü ya da metodun kabul etmediği bir anahtar kelimeAnahtarın boş bir dize olmadığından emin olun ve mesajda adı geçen argümanı düzeltin ya da çıkarın
ERROR_WRONG_USER_KEY veya ERROR_KEY_DOES_NOT_EXIST içeren bir ApiExceptionCapSkip’te API anahtarı doğrulaması açık ve betik varsayılan anahtarı gönderdi ya da hiç anahtar göndermediCAPSKIP_API_KEY değerini CapSkip’te yapılandırılmış bir anahtara ayarlayın
Yoğun paralel yük altında bir TimeoutExceptionKuyrukta, 10 thread’in 120 saniye içinde bitirebileceğinden fazla iş var ya da CapSkip çözümün ortasında yeniden başladıEşzamanlılığı bir semaphore ile sınırlayın ya da defaultTimeout değerini yükseltin
İlk çağrıda bir NetworkExceptionCapSkip çalışmıyor ya da host ve port yanlışCapSkip’i başlatın, ardından Local modunda mı yoksa Server modunda mı olması gerektiğini kontrol edin

FAQ

capy() neden token yerine üç değer döndürür?

Çünkü Capy formunun gönderdiği şey budur. Hiçbir aşamada hiçbir sunucu bir token vermez. Widget’ın kendisi bir challenge anahtarı üretir, ona ait bulmacayı çeker ve sürüklemeyi kaydeder; ardından site, challenge anahtarını ve cevabı kontrol ettirmek için kendi özel anahtarıyla birlikte Capy’ye gönderir. CapSkip widget’ın rolünü üstlenir, dolayısıyla widget’ın forma yazacağı şeyi döndürür.

python-requests user agent’ı cevabın reddedilmesine yol açar mı?

Capy tarafında hayır. Capy cevabı bir tarayıcıya bağlı değildir, CapSkip onun için bir user agent döndürmez ve geçirebileceğiniz isteğe bağlı user agent da yalnızca bulmacayı çeken isteği değiştirir. Yine de sitenin kendisi, kendine ait nedenlerle, kendini python-requests olarak tanıtan bir isteği geri çevirebilir. Böyle olursa oturuma bir kez bir tarayıcı User-Agent’ı ayarlayın; gönderim dahil o oturumdan çıkan her istek bu başlığı taşır.

Cevabı bir Selenium veya Playwright oturumunda kullanabilir miyim?

Evet. Tarayıcıda açık olan sayfanın URL’siyle çözün, ardından kısa bir script ile üç değeri formun capy_captchakey, capy_challengekey ve capy_answer gizli input alanlarına yazın; widget’ın henüz oluşturmadığı input alanlarını da ekleyin ve formu sayfanın normalde yapacağı gibi gönderin. Parçayı tarayıcıda ayrıca sürüklemeyin, çünkü bu ikinci ve farklı bir cevap üretir. Tarayıcı yalnızca bulmacayı geçmek için oradaysa yukarıdaki requests yolu daha basit ve daha hızlıdır.

Barındırılan bir platformdaki Python betiği çözücüye erişebilir mi?

Evet. Bağlantı ayarlarından CapSkip’i Server moduna alın; böylece loopback yerine bir ağ adresini dinler. O adresi betiğinizde CAPSKIP_HOST değişkeninden okuyun ve CapSkip() çağrısına verin. Bir VPS, bir konteyner sunucusu, bir CI runner ve barındırılan bir notebook; hepsi aynı HTTP API üzerinden bağlanır. Rota internetten geçiyorsa statik bir genel IP ve bir güvenlik duvarı kuralı kullanın. Çözücü sizin sahip olduğunuz donanımda kalır, dolayısıyla çözümlerin nasıl sayıldığı konusunda hiçbir şey değişmez. Aynı akışın .NET sürümü şurada ele alınıyor: C# Capy Puzzle rehberi.

Kısa özet

Python ile Capy Puzzle çözmek için sayfayı bir requests oturumuyla çekin, PUZZLE_ anahtarını tek bir regex ile çıkarın ve varsayılan olmayabileceği için widget script’inin host’unu not edin. solver.capy() metodunu anahtar ve gerçek sayfa URL’siyle çağırın ve birkaç saniyesini almasına izin verin; polling_interval=0.5 ile bu süre yaklaşık 2.3 saniyedir. captchakey, challengekey ve answer değerlerini üç capy_ alanında birebir, birlikte ve hemen, aynı oturum üzerinden gönderin. Ara sıra yaşanan ıskalarda yeniden deneyin, hacim büyüdükçe proxy ekleyin ve betik çözücünün makinesinden ayrıldığında Server moduna geçin.

O yeniden denemeyle ilgili son bir nokta. Her deneme farklı bir bulmaca çektiği için bir ıskanın doğru çaresi yeniden denemektir ve kendi makinenizde bir sınırsız captcha çözücü çalıştırdığınızda ikinci bir deneme, faturalanan yeni bir çözüme değil, yalnızca bir iki saniyeye mal olur.