• 24-02-2025, 16:55:00
    #1
    Arkadaşlar tiktok botu yaptım pyrhon ile yani 20 hesaptan 3-4 tanesi giriyor internet hızıyla felan da alakalı bu biriyle anlaşmiıştım ben tam beceremedim iş de bozuldu bedavaya isteyene veririm deneyebiliriz de isteyenle bana da tecrübe oldu
  • 24-02-2025, 16:57:08
    #2
    ne botu tam olarak
  • 24-02-2025, 17:01:17
    #3
    ben isterim hocam sizin için uygunsa
  • 24-02-2025, 17:03:25
    #4
    2 Gün önce üyelik açılmış dikkatli olalım arkadaşlar

    Sonrasında RAT yemeyin
  • 24-02-2025, 17:07:33
    #5
    Misafir adlı üyeden alıntı: mesajı görüntüle
    2 Gün önce üyelik açılmış dikkatli olalım arkadaşlar

    Sonrasında RAT yemeyin
    Haklısınız isterseniz size canlı canlı tüm kodu göstereyim burda bot arayan biriyle anlaştım tam beceremeyince bitileei üstüne koyup daha gğzel hale getirebilie diye bıraktım
  • 24-02-2025, 17:09:08
    #6
    KafKef_ adlı üyeden alıntı: mesajı görüntüle
    Haklısınız isterseniz size canlı canlı tüm kodu göstereyim burda bot arayan biriyle anlaştım tam beceremeyince bitileei üstüne koyup daha gğzel hale getirebilie diye bıraktım
    Direk kodu buraya atin hocam daha mantıklı olur hem faydalansın herkese

    KOD Şeklinde atabiliyorsunuz
    • umutakar
    umutakar bunu beğendi.
    1 kişi bunu beğendi.
  • 24-02-2025, 23:55:40
    #7
    from tiktok_captcha_solver import SeleniumSolver
    import os
    import time
    import random
    import threading
    import requests
    import cv2
    from queue import Queue
    import numpy as np
    import pyautogui
    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    from selenium.webdriver.common.by import By
    from selenium.webdriver.common.action_chains import ActionChains
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from stem.control import Controller
    from stem import Signal
    from pynput.keyboard import Controller as KeyboardController
    import undetected_chromedriver as uc
    from tiktok_captcha_solver import SeleniumSolver
    from selenium_stealth import stealth
    import tempfile
    from selenium.common.exceptions import TimeoutException
    def slide_slider(driver, slider_xpath, pixel_offset):
        slider = driver.find_element(By.XPATH, slider_xpath)
        actions = ActionChains(driver)
        
        # Daha agresif başlangıç
        actions.move_to_element_with_offset(slider, 10, 5).click_and_hold().pause(0.2)
        
        total = 0
        remaining = pixel_offset
        base_speed = pixel_offset * 0.20  # %20'den başla
        
        while total < pixel_offset:
            # Daha hafif yavaşlama (kuvveti 1.5'e düşürdüm)
            step = min(
                base_speed + (remaining**1.5 * 0.0002),  # Kuvvet ve çarpan azaltıldı
                remaining
            )
            
            # Daha büyük varyasyon
            step *= random.uniform(1.0, 1.2)  # +%20'ye kadar rastgele artış
            step = max(3, step)  # Minimum 3px
            
            # Son 15px'de mikro ayar
            if remaining < 15:
                step = random.uniform(1.5, 3.5)
            
            actions.move_by_offset(
                step + random.uniform(-0.2, 0.2),
                random.uniform(-0.1, 0.1)
            ).pause(random.uniform(0.02, 0.05))  # Daha kısa duraklamalar
            
            total += step
            remaining = pixel_offset - total
            base_speed *= 0.90  # Her adımda sadece %10 yavaşlat
        
        actions.release().perform()
        print(f"⚡ Slider {total:.2f}px kaydı (Hata: {abs(pixel_offset - total):.2f}px)")
    # Klavye kontrolü için
    keyboard = KeyboardController()
    # Tor Proxy Ayarı
    TOR_PROXY = "proxy ip"
    def get_coords():
        while True:
            print(pyautogui.position())
    def change_tor_ip():
        """Tor ağı üzerinden yeni bir IP adresi talep eder."""
        try:
            with Controller.from_port(port="int port") as controller:
                controller.authenticate(password="password")  # Tor şifreni buraya yaz
                controller.signal(Signal.NEWNYM)  # Yeni kimlik talep et
                print("Yeni Tor IP alındı!")
                time.sleep(5)  # Yeni IP'nin aktif olması için bekle
        except Exception as e:
            print(f"Tor IP değiştirilemedi! Hata: {e}")
    def create_browser():
        global api_key
        """Chrome tarayıcısını başlatır ve Tor proxy'sini kullanır."""
        options = uc.ChromeOptions()
        options.add_argument("--disable-blink-features=AutomationControlled")
        options.add_argument(f"--proxy-server={TOR_PROXY}")  
        options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36")
        temp_profile_dir = tempfile.mkdtemp()  # Benzersiz, geçici bir dizin oluşturur
        options.add_argument(f"--user-data-dir={temp_profile_dir}")
        
        api_key = "xxxxxxapiley"
        
        try:
            return webdriver.Chrome(options=options)
        except Exception as e:
            print(f"Tarayıcı başlatılamadı! Hata: {e}")
            return None
    def fake_keyboard_activity():
        """Sahte klavye hareketleri simüle eder (gerçek yazım yapmaz)."""
        fake_keys = ["a", "s", "d", "f", "j", "k", "l", "space", "enter", "ctrl", "alt"]
        while True:
            key = random.choice(fake_keys)
            
            time.sleep(random.uniform(10, 20))
    def download_image(browser, xpath, filename):
        """Belirtilen xpath'teki resmi indirir veya screenshot alır ve kaydeder.
           Fotoğrafın src attribute'sinin dolu olup olmadığını 15 saniyeye kadar kontrol eder.
        """
        try:
            element = WebDriverWait(browser, 30).until(
                EC.presence_of_element_located((By.XPATH, xpath))
            )
            # 15 saniyeye kadar src attribute'sinin dolu olup olmadığını kontrol et
            timeout = 15
            poll_interval = 0.5
            waited = 0
            src = element.get_attribute("src")
            while (not src or src.strip() == "") and waited < timeout:
                time.sleep(poll_interval)
                waited += poll_interval
                src = element.get_attribute("src")
            
            if not src or src.strip() == "":
                raise Exception(f"{filename} için src attribute'si {timeout} saniyede hala boş!")
            
            file_path = f"/{filename}.png"
            if src.startswith("blob:"):
                element.screenshot(file_path)
                print(f"{filename}.png screenshot olarak kaydedildi!")
            else:
                response = requests.get(src)
                if response.status_code == 200:
                    with open(file_path, "wb") as f:
                        f.write(response.content)
                    print(f"{filename}.png kaydedildi!")
                else:
                    print(f"{filename} indirilemedi, durum kodu: {response.status_code}")
        except Exception as e:
            print(f"{filename} indirilirken hata oluştu: {e}")
        except Exception as e:
            print(f"{filename} indirilirken hata oluştu: {e}")
    def merge_images(background_path, overlay_path):
        import cv2
        import numpy as np
        # Resimleri yükle
        bg = cv2.imread(background_path, cv2.IMREAD_GRAYSCALE)
        ov = cv2.imread(overlay_path, cv2.IMREAD_GRAYSCALE)
        
        if bg is None or ov is None:
            raise FileNotFoundError("Resimler yüklenemedi!")
        # Kontur analizi
        _, thresh = cv2.threshold(ov, 50, 255, cv2.THRESH_BINARY)
        contours, _ = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
        
        if not contours:
            raise Exception("Kontur bulunamadı!")
        # Açı hesaplama
        c = max(contours, key=cv2.contourArea)
        rect = cv2.minAreaRect(c)
        angle = rect[-1]
        # Açıyı [0, 180) aralığına normalize et
        if rect[1][0] < rect[1][1]:  # Genişlik < Yükseklik
            angle += 90
        angle = abs(angle % 180)  # 0-180 arası pozitif değer
        print(f"Düzeltilmiş Açı: {angle:.2f}°")
        return calculate_pixel_offset(angle)
    def calculate_pixel_offset(angle):
        MAX_SLIDER = 348
        KALIBRASYON = 0.957  # Yeni optimize değer
        OFFSET_DUZELTME = 3.2  # Manuel offset ayarı
        
        pixel_offset = (angle / 180) * MAX_SLIDER * KALIBRASYON + OFFSET_DUZELTME + 10
        
        print(f"Hassas Kaydırma: {pixel_offset:.2f}px")
        return max(0, min(pixel_offset, MAX_SLIDER))  # Sınırları garantile
    def check_if_exists(mainphotopath,rotatephotopath):
        if os.path.exists(mainphotopath) and os.path.exists(rotatephotopath):
            return True
        else:
            False
    def watch_live(email, password):
        """Yeni IP alır, tarayıcıyı başlatır ve tüm işlemleri gerçekleştirir."""
        print("Yeni IP alınıyor...")
        change_tor_ip()
        browser = create_browser()
        sadcaptcha = SeleniumSolver(
        browser,
        api_key,
        mouse_step_size=1, # Adjust to change mouse speed
        mouse_step_delay_ms=10 # Adjust to change mouse speed
        )   
        if not browser:
            print("Tarayıcı açılamadı! 🚫")
            return
        browser.maximize_window()
        
        try:
            # Klavye aktivitesi thread'ini başlat
            keyboard_thread = threading.Thread(target=fake_keyboard_activity, daemon=True)
            keyboard_thread.start()
            # TikTok sayfasını aç
            browser.get("yayın linki")
            print("TikTok yayını açıldı! ✅")
            time.sleep(3)
            # Login butonunu bul ve tıkla
            wait = WebDriverWait(browser, 20)
            login_button = wait.until(EC.element_to_be_clickable((By.ID, "header-login-button")))
            ActionChains(browser).move_to_element(login_button).click().perform()
            print("Giriş butonuna tıklandı! ✅")
            time.sleep(5)
            # Phone butonu için yeni kontrol sistemi
            #HİKMET BURAYI YAPACAKSIN
            try:
                # Önce div4/div2'yi dene
                try:
                    second_button = WebDriverWait(browser, 5).until(
                        EC.element_to_be_clickable((By.XPATH, '//*[@id="loginContainer"]/div/div/div/div[2]/div[2]'))
                    )
                    ActionChains(browser).move_to_element(second_button).click().perform()
                
                except Exception as e:
                    try:
                        
                        ikinci_senaryo = WebDriverWait(browser, 6).until(
                        EC.element_to_be_clickable((By.XPATH, '//*[@id="loginContainer"]/div/div/div[1]/div/button[2]'))
                    )
                        
                        ActionChains(browser).move_to_element(ikinci_senaryo).click().perform()
                       
                        
                   
                        
                    except:
                        try:
                            
                            first_button = WebDriverWait(browser, 6).until(
                            EC.element_to_be_clickable((By.XPATH, '//*[@id="loginContainer"]/div/div/div[4]/div/div[2]'))
                        )
                            print("div4/div2 butonu bulundu - özel işlem başlatılıyor")
                            
                            # İlk butona tıkla
                            ActionChains(browser).move_to_element(first_button).click().perform()
                            
                            second_button = WebDriverWait(browser, 5).until(
                            EC.element_to_be_clickable((By.XPATH, '//*[@id="loginContainer"]/div/div/div[4]/div[1]/div[2]'))
                    )
                            ActionChains(browser).move_to_element(second_button).click().perform()
                            
                            
                        except:
                            
                            first_button = WebDriverWait(browser, 6).until(
                            EC.element_to_be_clickable((By.XPATH, '//*[@id="loginContainer"]/div/div/div[4]/div[1]/div[2]'))
                        )
                            print("div4/div2 butonu bulundu - özel işlem başlatılıyor")
                            ActionChains(browser).move_to_element(first_button).click().perform()
            except Exception as e:
                print(f"Phone buton tıklama hatası: {str(e)}")
                browser.quit()
                return
            #HİKMET BAK >>>>>>>>>>>>>>>> test ederken göreceksin genelde phone yaz diyor oranın sağ üstünde email ile gir diyor eğer öyle bir yer gelirse işte kod
            #burda devreye giriyor sen buranın  üst kısmını yapacaksın satır 231 ile bura arasını
            # Email ile giriş linkine tıkla
            wait = WebDriverWait(browser, 40)
            link = wait.until(EC.element_to_be_clickable((By.XPATH, '//a[@href="/login/phone-or-email/email"]')))
            link.click()
            print("E-mail ile giriş butonuna basıldı!")
            time.sleep(1)
            # Email ve şifre giriş
            wait = WebDriverWait(browser, 50)
            email_input = wait.until(EC.presence_of_element_located((By.XPATH, '//input[@placeholder="Email or username"]')))
            email_input.send_keys(email)
            time.sleep(3)
            password_input = wait.until(EC.presence_of_element_located((By.XPATH, '//input[@placeholder="Password"]')))
            password_input.send_keys(password)
            print("Bilgiler girildi! ✅")
            
            try:
                login_enter = WebDriverWait(browser, 5).until(
                            EC.element_to_be_clickable((By.XPATH, '//*[@id="loginContainer"]/div[2]/form/button')))
                
                login_enter.click()
                print("Giriş yap butonuna tıklandı! ✅")
            except:
                second_input_button = WebDriverWait(browser, 5).until(
                            EC.element_to_be_clickable((By.XPATH, '//*[@id="loginContainer"]/div/div/form/button')))
                second_input_button.click()
                print("butona basıldı")
                
            # Captcha çözümü
            print("Captcha bekleniyor...")
            wait = WebDriverWait(browser, 30)
            wait.until(EC.presence_of_element_located((By.XPATH, '//*[@id="captcha-verify-container-main-page"]/div[2]/div[1]/img[1]')))
            print("Captcha sayfası yüklendi, resimler indiriliyor...")
                
            verification_success = False
            sadcaptcha.solve_captcha_if_present(15,3)
            
            try:   
                verification_input = WebDriverWait(browser, 5).until(
                EC.visibility_of_element_located(
                            (By.XPATH, '//div[21]/div[2]/div[2]/div/div[1]/input | //div[20]/div[2]/div[2]/div/div[1]/input | //div[19]/div[2]/div[2]/div/div[1]/input')
                        )
                )
                print("✅ Captcha çözüldü, input kutusu görüldü!")
                verification_success = True
                       
            except:
                print("1")
                            
            # E-posta doğrulama adımına geç
            print("Captcha doğrulandı, e-posta kontrolüne geçiliyor...")
            time.sleep(1.5)
            browser.execute_script("window.open('webmail', '_blank');")
            WebDriverWait(browser, 10).until(lambda d: len(d.window_handles) > 1)
            browser.switch_to.window(browser.window_handles[-1])
            # E-posta girişi
            wait = WebDriverWait(browser, 50)
            email_input = wait.until(EC.presence_of_element_located((By.XPATH, '//*[@id="rcmloginuser"]')))
            email_input.send_keys(email)
            
            password_input = wait.until(EC.presence_of_element_located((By.XPATH, '//*[@id="rcmloginpwd"]')))
            password_input.send_keys(password)
            print("E-posta bilgileri girildi! ✅")
            login_enter = wait.until(EC.element_to_be_clickable((By.XPATH, '//*[@id="rcmloginsubmit"]')))
            login_enter.click()
            print("E-posta girişi yapıldı")
            time.sleep(1)
            # Doğrulama kodunu al
            element = browser.find_element(
                By.XPATH, "//*[@id='messagelist']/tbody/tr[1]//td[@class='subject']//span[@class='subject']//a//span"
            )
            verification_code = element.text[0:6]
            print(f"Doğrulama kodu alındı: {verification_code}")
            # TikTok sekmesine geri dön
            browser.switch_to.window(browser.window_handles[0])
            print("TikTok sekmesine dönüldü")
            global key_input
            # Doğrulama kodunu gir
            try:
                key_input = WebDriverWait(browser, 5).until(
                            EC.element_to_be_clickable((By.XPATH, '/html/body/div[20]/div[2]/div[2]/div/div[1]/input')))
                
            except:
                key_input = WebDriverWait(browser, 5).until(
                            EC.element_to_be_clickable((By.XPATH, '/html/body/div[21]/div[2]/div[2]/div/div[1]/input')))
                
            for char in verification_code:
                key_input.send_keys(char)
                time.sleep(random.uniform(0.08, 0.3))  # Rastgele yazma hızı
            browser.execute_script("arguments[0].dispatchEvent(new Event('input', { bubbles: true }));", key_input)
            
            submit_button = WebDriverWait(browser, 5).until(
            EC.element_to_be_clickable((By.XPATH, 
                '/html/body/div[20]/div[2]/div[2]/button | '
                '/html/body/div[21]/div[2]/div[2]/button'
            ))
             )
            actions = ActionChains(browser)
            actions.move_to_element(submit_button)
            # Hafif bir düzensizlik ekle (butona tam odaklanmadan önce biraz dolaşabilir)
            actions.move_by_offset(random.uniform(-5, 5), random.uniform(-5, 5))
            actions.pause(random.uniform(0.3, 0.7))
            # Son dokunuş: Bazen butona çift dokunuş gibi görünen bir hareket yapabiliriz
            if random.random() < 0.2:
                actions.click().pause(random.uniform(0.1, 0.2))
            # Butona tıkla
            actions.click().perform()
                    
            print("Doğrulama kodu gönderildi!")
            try:
                verify_puzzle = WebDriverWait(browser, 5).until(
                            EC.element_to_be_clickable((By.XPATH, '//*[@id="captcha-verify-container-main-page"]/div[2]/div[1]/img[1]')))
                sadcaptcha.solve_captcha_if_present(15,3)
                print("yayına girildi ✅")
            except:
                try:
                    verify_puzzle = WebDriverWait(browser, 5).until(
                            EC.element_to_be_clickable((By.XPATH, '/html/body/div[20]/div[2]/div[2]/div[2]')))
                    time.sleep(64)
                    verify_puzzle.click()
                    browser.switch_to.window(browser.window_handles[-1])
                    element = browser.find_element(
                By.XPATH, "//*[@id='messagelist']/tbody/tr[1]//td[@class='subject']//span[@class='subject']//a//span"
                )
                    verification_code = element.text[0:6]
                    print(f"Doğrulama kodu alındı: {verification_code}")
                    browser.switch_to.window(browser.window_handles[0])
                    for char in verification_code:
                        key_input.send_keys(char)
                        time.sleep(random.uniform(0.1, 0.3))  # Rastgele yazma hızı
                    browser.execute_script("arguments[0].dispatchEvent(new Event('input', { bubbles: true }));", key_input)
                    
                   
                    # Send butonuna tıkla/html/body/div[20]/div[2]/div[2]/button
                    ActionChains(browser)\
                    .move_to_element(submit_button)\
                    .pause(random.uniform(0.3, 0.7))\
                    .click()\
                    .perform()
                
            
                    print("Doğrulama kodu gönderildi! yayına girildi ✅")
                except:
                    print("girildi ✅")
            while True:
                time.sleep(60)
        except Exception as e:
            print(f"İşlem sırasında hata oluştu: {e}")
            browser.quit()
    # Tarayıcıyı çalıştır
    # Thread sayısı ve hesap listesi
    THREAD_COUNT = 10  # Aynı anda çalışacak tarayıcı sayısı
    ACCOUNTS = [
        {"email":"zzzzz", "password":"pasword"},
        
        
    
    
    ]
    
    MAX_RETRIES = 3
    # Hesap kuyruğu ve tekrar deneme sayıları için dict
    account_queue = Queue()
    retry_counts = {}
    def worker():
        while True:
            account = account_queue.get()
            email = account["email"]
            
            # Hesap için kaç kez denendiğini kontrol et
            if retry_counts[email] >= MAX_RETRIES:
                print(f"⛔ {email} için maksimum deneme sayısına ulaşıldı, işlem durduruldu!")
                account_queue.task_done()
                continue
            
            try:
                print(f"🌀 {email} için işlem başlatılıyor... ({retry_counts[email] + 1}. deneme)")
                watch_live(email, account['password'])
                print(f"✅ {email} işlemi başarılı!")
            except Exception as e:
                print(f"❌ {email} hata aldı: {str(e)} - Tekrar denenecek...")
                retry_counts[email] += 1
                account_queue.put(account)  # Hatadan sonra tekrar kuyruğa ekle
                time.sleep(2)  # Çakışmaları önlemek için kısa bir bekleme süresi
            finally:
                account_queue.task_done()
    if __name__ == "__main__":
       
        
         # Paralel çalışacak thread sayısı
        # Retry sayacını sıfırla
        for acc in ACCOUNTS:
            retry_counts[acc["email"]] = 0
            account_queue.put(acc)
        # Thread'leri başlat
        for _ in range(THREAD_COUNT):
            threading.Thread(target=worker, daemon=True).start()
        # Tüm işlemler tamamlanana kadar bekle
        account_queue.join()
        print("🎉 Tüm hesaplar işlendi!")