• 17-04-2024, 15:08:54
    #1
    Merhaba, captcha çözümü için bir kod yazdım. Ekrana gelen captcha'nın resmi dosyalar içerisine kaydediliyor, kaydedilen resim 2captcha'ya gönderilerek çözülüyor. Çözüm alınıyor ve alındıktan sonra klavye aracılığı ile 4 haneli sayı ve harflerden oluşan captcha kodunu ekrana girme bölümünde sorun yaşıyorum. Kullandığım kütüphaneden dolayı integer hatası alıyorum. Captcha kodlarında integer algılanmadığı için hata veriyor ve kodu giremiyor. Tahminimce aşağıda verdiğim kütüphanede integer beklentisi içinde olduğu için diğer harfleri algılayamıyor ve hata veriyor. Bu konuda nasıl bir yol izlemem lazım, yardımcı olabilir misiniz.

    Bunlar benim kodlarım
    import tkinter as tk
    from threading import Thread
    import pyautogui
    import time
    from clicksend import *
    import threading
    from PIL import ImageGrab
    import keyboard
    from pynput import keyboard
    import pygame
    from twocaptcha import TwoCaptcha
    import requests
    from pynput.keyboard import Controller as KeyboardController
    keycodes = {
        "F1": 0x3B, "F2": 0x3C, "F3": 0x3D, "F4": 0x3E, "F5": 0x3F, "F6": 0x40, "F7": 0x41, "F8": 0x42, "F9": 0x43, "F10": 0x44, "F11": 0x57, "F12": 0x58,
        "0": 0x0B, "1": 0x02, "2": 0x03, "3": 0x04, "4": 0x05, "5": 0x06, "6": 0x07, "7": 0x08, "8": 0x09, "9": 0x0A,
        "A": 0x1E, "B": 0x30, "C": 0x2E, "D": 0x20, "E": 0x12, "F": 0x21, "G": 0x22, "H": 0x23, "I": 0x17, "J": 0x24, "K": 0x25, "L": 0x26, "M": 0x32, "N": 0x31, "O": 0x18, "P": 0x19, "Q": 0x10, "R": 0x13, "S": 0x1F, "T": 0x14, "U": 0x16, "V": 0x2F, "W": 0x11, "X": 0x2D, "Y": 0x15, "Z": 0x2C,
        "ESC": 0x01, "TAB": 0x0F, "ENTER": 0x1C,
        "DOWN_ARROW": 0x50, "UP_ARROW": 0x48, "RIGHT_ARROW": 0x4D, "LEFT_ARROW": 0x4B,
        "NUMPAD_0": 0x52, "NUMPAD_1": 0x4F, "NUMPAD_2": 0x50, "NUMPAD_3": 0x51, "NUMPAD_4": 0x4B, "NUMPAD_5": 0x4C, "NUMPAD_6": 0x4D, "NUMPAD_7": 0x47, "NUMPAD_8": 0x48, "NUMPAD_9": 0x49,
    }
    # Klavye kontrolcüsünü oluştur
    keyboard = KeyboardController()
    tusbas = KeyboardDriver()
    mousebas = MouseDriver()
    resim_captcha = r'C:\makro\resimler\captcha.png'
    image_path = r'C:\makro\resimler\deneme.png'
    # Bir kilit oluÅŸtur
    lock = threading.Lock()
    class CaptchaSolver:
        def __init__(self, master, api_key):
            self.api_key = api_key
            self.upload_url = 'https://2captcha.com/in.php'
            self.running = True
            self.captcha_basla_checkbutton_var = tk.BooleanVar()
            self.captcha_basla_checkbutton_var.set(False)
            self.tusbas = keyboard.type
        def captcha_bul(self):
            try:
                # Ekranı tarayarak belirli bir resmi ara
                resim_konumu = pyautogui.locateOnScreen(resim_captcha, confidence=0.9)
                return resim_konumu
            except:
                return None    
        def captcha_basla(self):
            
                # Aranan resmi bul
                resim_konumu = self.captcha_bul()
                
                # Eğer resim bulunamazsa 5 saniye bekle ve döngüye devam et
                if resim_konumu is None:
                    time.sleep(1)
                    
                
                # Belirli bir resim bulunduğunda yapılacak işlemi buraya yazabilirsiniz
                task_id = self.koordinat_screen(resim_konumu)
                if task_id:
                    captcha_result = self.check_result(task_id)
                    if captcha_result:
                        return captcha_result
                
                # 10 saniye bekle
                time.sleep(1)
        def koordinat_screen(self, resim_konumu):
            # Merkez noktayı hesapla
            x, y, w, h = resim_konumu
            merkez_x = x + (w / 2)
            merkez_y = y + (h / 2)
            # Ekranın tamamını al
            screen = ImageGrab.grab()
            # Dikdörtgenin koordinatlarını hesapla
            x1 = int(merkez_x - 275)
            x2 = int(merkez_x - 40)
            y1 = int(merkez_y - 14)
            y2 = int(merkez_y + 50)
            # Dikdörtgeni kes
            region = screen.crop((x1, y1, x2, y2))
            # Kesilen bölgeyi belirtilen dizine kaydet
            save_path = "C:\\makro\\resimler\\captcharesmi.png"
            region.save(save_path)
            print("Resim kaydedildi:", save_path)
            
            # Captcha çözme işlemini başlat
            return self.solve_captcha(save_path)
        def solve_captcha(self, image_path):
            with open(image_path, 'rb') as file:
                upload_data = {'key': self.api_key, 'method': 'post'}
                files = {'file': file}
                response = requests.post(self.upload_url, data=upload_data, files=files)
            response_data = response.text
            if response_data.startswith('OK|'):
                task_id = response_data.split('|')[1]
                print("İşlem kimliği:", task_id)
                return task_id
            else:
                print("Hata:", response_data)
                return None
        def check_result(self, task_id):
            while True:
                # 2Captcha'ya sonuç sorgusu yap
                check_url = f"https://2captcha.com/res.php?key={self.api_key}&action=get&id={task_id}"
                check_response = requests.get(check_url)
                check_data = check_response.text
                # 2Captcha yanıtı 'CAPCHA_NOT_READY' ise, biraz bekleyip tekrar kontrol et
                if check_data == 'CAPCHA_NOT_READY':
                    time.sleep(5)
                    continue
                # 2Captcha yanıtı '|' içeriyorsa, işlem tamamlandı demektir
                elif '|' in check_data:
                    # Captcha sonucunu al
                    captcha_result = check_data.split('|')[1]
                    print("Captcha çözüldü:", captcha_result)
                    # Captcha sonucunu girme iÅŸlemi
                    if self.captchagirme(captcha_result):
                        # Sonuç döndür
                        return captcha_result
                    else:
                        print("Captcha çözülmedi veya uygun formatta değil.")
                        return None
                # Beklenmedik bir hata varsa, hata mesajını yazdır ve None döndür
                else:
                    print("Beklenmedik bir hata oluÅŸtu:", check_data)
                    return None
        
        def captchagirme(self, captcha_result):
            # Doğru formatta bir captcha sonucu alındıysa devam et
            if captcha_result and captcha_result.isdigit():  # Sadece sayısal değerler kabul edilecek
                # Captcha sonucunu not defterine kaydet
                with open("C:\\makro\\captchakodu.txt", "w") as file:
                    file.write(captcha_result)
                # Resim captchanın konumunu bul
                resim_captcha = self.captcha_bul()
                # Doğru formatta bir captcha sonucu alındıysa devam et
                if resim_captcha:
                    # Resim captchanın merkez noktasını bul
                    x, y, w, h = resim_captcha
                    merkez_x = x + (w / 2)
                    merkez_y = y + (h / 2)
                    # Sol tıklama işlevi (merkez noktasına göre)
                    x22 = merkez_x - 33
                    y22 = merkez_y + 79
                    mousebas.leftclick(0.2, x22, y22)
                    # Not defterinden captcha kodunu oku
                    with open("C:\\makro\\captchakodu.txt", "r") as file:
                        captchakodu = file.read()
                    # Klavye giriÅŸi ile captcha kodunu yaz
                    if tusbas.tusbas(captchakodu, 0.5):
                        return True
                    else:
                        return False
                else:
                    print("Captcha resmi bulunamadı.")
                    return False
            else:
                print("Captcha çözülmedi veya uygun formatta değil.")
                return False
    # Tkinter uygulamasını başlat
    root = tk.Tk()
    # CaptchaSolver sınıfını oluştururken root penceresini parametre olarak iletebilirsiniz
    captcha_solver = CaptchaSolver(api_key="2captcha_api_Key")
    # Captcha çözümünü başlat
    captcha_solver.captcha_basla()
    # Tkinter uygulamasını çalıştır
    root.mainloop()
    Bunlar da hata aldığım kütüphane kodları
    import struct
    class stroke():
        @property
        def data(self):
            raise NotImplementedError
            
        @property
        def data_raw(self):
            raise NotImplementedError
            
    class mouse_stroke(stroke):
        fmt = 'HHsiiI'  # 's' karakter tipi ile her türlü karakteri algılayacak
        fmt_raw = 'HHHHIsiiI'  # 's' karakter tipi ile her türlü karakteri algılayacak
        state = 0
        flags = 0
        rolling = 0
        x = 0
        y = 0    
        information = 0
        def __init__(self,state,flags,rolling,x,y,information):
            super().__init__()
            self.state =state
            self.flags = flags
            self.rolling = rolling
            self.x = x
            self.y = y
            self.information = information
        
        @staticmethod
        def parse(data):
            return mouse_stroke(*struct.unpack(mouse_stroke.fmt,data))        
        @staticmethod
        def parse_raw(data):
            unpacked= struct.unpack(mouse_stroke.fmt_raw,data)
            return  mouse_stroke(
                unpacked[2],
                unpacked[1],
                unpacked[3],
                unpacked[5],
                unpacked[6],
                unpacked[7])
        @property
        def data(self):
            data =  struct.pack(self.fmt,
            self.state,
            self.flags,
            self.rolling,
            self.x,
            self.y,
            self.information)
            return data
        @property
        def data_raw(self):
            data = struct.pack(self.fmt_raw,
                0,
                self.flags,
                self.state,
                self.rolling,
                0,
                self.x,
                self.y,
                self.information)
            return data
    class key_stroke(stroke):
        fmt = 'HHsI'  # 's' karakter tipi ile her türlü karakteri algılayacak
        fmt_raw = 'HHHHIsI'  # 's' karakter tipi ile her türlü karakteri algılayacak
        code = 0
        state = 0
        information = 0
        
        def __init__(self,code,state,information):
            super().__init__()
            self.code = code
            self.state = state
            self.information = information
        
        
        @staticmethod
        def parse(data):
            return key_stroke(*struct.unpack(key_stroke.fmt,data))
        
        @staticmethod
        def parse_raw(data):
            unpacked= struct.unpack(key_stroke.fmt_raw,data)
            return  key_stroke(unpacked[1],unpacked[2],unpacked[4])
        @property
        def data(self):
            data = struct.pack(self.fmt,self.code,self.state,self.information)
            return data
        @property
        def data_raw(self):
            data = struct.pack(self.fmt_raw,0,self.code,self.state,0,self.information)
            return data
  • 17-04-2024, 19:24:56
    #2
    ÅŸunu dene

    # Captcha kodunu klavye giriÅŸi olarak yap
    pyautogui.write(captchakodu)