Загрузка...

Проблема с решением капчи Capguru

Тема в разделе Python создана пользователем beta 4 мар 2025. 211 просмотров

  1. beta
    beta Автор темы 4 мар 2025 475 6 янв 2019
    Решил значит написать код который логинится в аккаунт

    Python
    import requests
    import base64
    import time
    from selenium import webdriver
    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
    import logging
    import json
    import re

    # Configure logging
    logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(message)s')
    logger = logging.getLogger()

    # CAPTCHA solving API key
    API_KEY = "Удалил"

    # Set up Chrome WebDriver
    options = webdriver.ChromeOptions()
    options.add_experimental_option("excludeSwitches", ["enable-automation"])
    options.add_experimental_option('useAutomationExtension', False)
    driver = webdriver.Chrome(options=options)

    driver.execute_cdp_cmd("Network.clearBrowserCache", {})

    def get_captcha_images(driver):
    """
    Extract CAPTCHA image URLs from the webpage.
    """
    try:
    # Wait for the images to load
    background_img = WebDriverWait(driver, 15).until(
    EC.presence_of_element_located((By.XPATH, "//img[contains(@class, 'cap-h-[170px]')]"))
    )
    puzzle_img = WebDriverWait(driver, 15).until(
    EC.presence_of_element_located((By.XPATH, "//img[contains(@class, 'cap-absolute')]"))
    )

    background_url = background_img.get_attribute("src")
    puzzle_url = puzzle_img.get_attribute("src")
    logger.info(f"Background Image URL: {background_url}")
    logger.info(f"Puzzle Image URL: {puzzle_url}")
    return background_url, puzzle_url
    except Exception as e:
    logger.error(f"Error fetching CAPTCHA images: {e}")
    return None, None

    def solve_slider_captcha(background_url, puzzle_url):
    """
    Send CAPTCHA images to the cap.guru API for solving and retrieve the X offset.
    """
    try:
    # Convert URLs to Base64 (in case required by API)
    background_base64 = base64.b64encode(background_url.encode()).decode() # URL as Base64
    puzzle_base64 = base64.b64encode(puzzle_url.encode()).decode() # URL as Base64

    # Send data to API
    payload = {
    "key": API_KEY,
    "method": "base64",
    "textinstructions": "koleso",
    "click": "geetest",
    "body0": background_base64,
    "body1": puzzle_base64,
    "json": 1
    }

    response = requests.post("http://api2.cap.guru/in.php", data=payload)

    if response.status_code == 200 and response.json().get("status") == 1:
    task_id = response.json()["request"]
    logger.info(f"CAPTCHA Task ID: {task_id}")
    else:
    logger.error(f"Failed to send CAPTCHA images to API. Response: {response.text}")
    return None

    # Poll for the result
    for _ in range(10):
    time.sleep(5)
    result = requests.get(f"http://api2.cap.guru/res.php?key={API_KEY}&action=get&id={task_id}&json=1")
    if result.status_code == 200:
    response_data = result.json()
    if response_data.get("status") == 1:
    coordinates = response_data["request"]
    coordinates = re.sub(r"[^0-9,]", "", coordinates)
    logger.info(f"CAPTCHA solved: {coordinates}")
    x_offset = int(coordinates.split(',')[1])
    x_offset = round(x_offset / 271 * 284) # Adjust offset scale
    return x_offset
    elif response_data.get("request") == "CAPCHA_NOT_READY":
    logger.info("CAPTCHA not ready yet. Retrying...")
    else:
    logger.error(f"Error in CAPTCHA response: {response_data}")
    return None
    else:
    logger.error(f"Error in API request: {result.text}")
    return None
    return None
    except Exception as e:
    logger.error(f"Error solving CAPTCHA: {e}")
    return None

    def move_slider(driver, x_offset):
    """
    Move the slider based on the calculated X offset.
    """
    try:
    slider = WebDriverWait(driver, 15).until(
    EC.visibility_of_element_located((By.ID, "captcha_slide_button"))
    )
    action = ActionChains(driver)
    action.click_and_hold(slider).pause(2)
    action.move_by_offset(x_offset, 0).pause(35.5)
    action.release().perform()
    logger.info(f"Slider moved by {x_offset} pixels.")
    except Exception as e:
    logger.error(f"Error moving slider: {e}")

    def read_credentials():
    """
    Read email and password from files email.txt and pass.txt.
    """
    try:
    with open("email.txt", "r") as email_file:
    email = email_file.read().strip()
    with open("pass.txt", "r") as pass_file:
    password = pass_file.read().strip()
    logger.info("Credentials successfully read from files.")
    return email, password
    except FileNotFoundError as e:
    logger.error(f"Error: {e}. Ensure email.txt and pass.txt exist in the same directory.")
    return None, None
    except Exception as e:
    logger.error(f"Error reading credentials: {e}")
    return None, None

    def login_to_tiktok():
    """
    Perform login to TikTok with CAPTCHA solving using credentials from files.
    """
    try:
    # Read credentials from files
    email, password = read_credentials()
    if not email or not password:
    logger.error("Could not retrieve credentials. Aborting.")
    return

    # Open TikTok login page
    driver.get("https://www.tiktok.com/login/phone-or-email/email")
    logger.info("Opened TikTok login page.")

    # Wait for the email field to be visible and input email
    email_field = WebDriverWait(driver, 20).until(
    EC.presence_of_element_located((By.XPATH, "//input[@placeholder='Почта или имя пользователя']"))
    )
    email_field.clear() # Clear any pre-filled data
    email_field.send_keys(email)
    logger.info("Email entered successfully.")

    # Wait for the password field to be visible and input password
    password_field = WebDriverWait(driver, 20).until(
    EC.presence_of_element_located((By.XPATH, "//input[@placeholder='Пароль']"))
    )
    password_field.clear() # Clear any pre-filled data
    password_field.send_keys(password)
    logger.info("Password entered successfully.")

    # Wait for the login button to be clickable and click it
    submit_button = WebDriverWait(driver, 20).until(
    EC.element_to_be_clickable((By.XPATH, "//button[contains(text(), 'Войти')]"))
    )
    submit_button.click()
    logger.info("Submitted login form.")

    # Fetch CAPTCHA image URLs
    background_url, puzzle_url = get_captcha_images(driver)
    if not background_url or not puzzle_url:
    logger.error("Could not retrieve CAPTCHA images.")
    return

    # Solve the CAPTCHA
    retries = 2
    x_offset = None
    for attempt in range(retries):
    x_offset = solve_slider_captcha(background_url, puzzle_url)

    if x_offset:
    move_slider(driver, x_offset)
    break
    else:
    logger.error(f"Failed to solve CAPTCHA. Attempt {attempt + 1} of {retries}. Retrying...")
    time.sleep(5)
    if not x_offset:
    logger.error("Failed to solve CAPTCHA after multiple attempts.")

    # Check login status
    time.sleep(5)
    if "login" not in driver.current_url:
    logger.info("Login successful!")
    else:
    logger.warning("Login failed, check credentials or CAPTCHA.")
    except Exception as e:
    logger.error(f"Error during login: {e}")
    finally:
    driver.quit()

    if __name__ == "__main__":
    login_to_tiktok()

    Вот код который должен решать капчу из документации CapGuru
    Python
    import requests
    import base64
    import time
    from selenium import webdriver
    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
    import logging
    import json
    import re

    # Configure logging
    logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(message)s')
    logger = logging.getLogger()

    # CAPTCHA solving API key
    API_KEY = "17a1f02f43bfb8025f4ef3a56fc425cf"

    # Set up Chrome WebDriver
    options = webdriver.ChromeOptions()
    options.add_experimental_option("excludeSwitches", ["enable-automation"])
    options.add_experimental_option('useAutomationExtension', False)
    driver = webdriver.Chrome(options=options)

    driver.execute_cdp_cmd("Network.clearBrowserCache", {})

    def get_captcha_images(driver):
    """
    Extract CAPTCHA image URLs from the webpage.
    """
    try:
    # Wait for the images to load
    background_img = WebDriverWait(driver, 15).until(
    EC.presence_of_element_located((By.XPATH, "//img[contains(@class, 'cap-h-[170px]')]"))
    )
    puzzle_img = WebDriverWait(driver, 15).until(
    EC.presence_of_element_located((By.XPATH, "//img[contains(@class, 'cap-absolute')]"))
    )

    background_url = background_img.get_attribute("src")
    puzzle_url = puzzle_img.get_attribute("src")
    logger.info(f"Background Image URL: {background_url}")
    logger.info(f"Puzzle Image URL: {puzzle_url}")
    return background_url, puzzle_url
    except Exception as e:
    logger.error(f"Error fetching CAPTCHA images: {e}")
    return None, None

    def solve_slider_captcha(background_url, puzzle_url):
    """
    Send CAPTCHA images to the cap.guru API for solving and retrieve the X offset.
    """
    try:
    # Convert URLs to Base64 (in case required by API)
    background_base64 = base64.b64encode(background_url.encode()).decode() # URL as Base64
    puzzle_base64 = base64.b64encode(puzzle_url.encode()).decode() # URL as Base64

    # Send data to API
    payload = {
    "key": API_KEY,
    "method": "base64",
    "textinstructions": "koleso",
    "click": "geetest",
    "body0": background_base64,
    "body1": puzzle_base64,
    "json": 1
    }

    response = requests.post("http://api2.cap.guru/in.php", data=payload)

    if response.status_code == 200 and response.json().get("status") == 1:
    task_id = response.json()["request"]
    logger.info(f"CAPTCHA Task ID: {task_id}")
    else:
    logger.error(f"Failed to send CAPTCHA images to API. Response: {response.text}")
    return None

    # Poll for the result
    for _ in range(10):
    time.sleep(5)
    result = requests.get(f"http://api2.cap.guru/res.php?key={API_KEY}&action=get&id={task_id}&json=1")
    if result.status_code == 200:
    response_data = result.json()
    if response_data.get("status") == 1:
    coordinates = response_data["request"]
    coordinates = re.sub(r"[^0-9,]", "", coordinates)
    logger.info(f"CAPTCHA solved: {coordinates}")
    x_offset = int(coordinates.split(',')[1])
    x_offset = round(x_offset / 271 * 284) # Adjust offset scale
    return x_offset
    elif response_data.get("request") == "CAPCHA_NOT_READY":
    logger.info("CAPTCHA not ready yet. Retrying...")
    else:
    logger.error(f"Error in CAPTCHA response: {response_data}")
    return None
    else:
    logger.error(f"Error in API request: {result.text}")
    return None
    return None
    except Exception as e:
    logger.error(f"Error solving CAPTCHA: {e}")
    return None

    def move_slider(driver, x_offset):
    """
    Move the slider based on the calculated X offset.
    """
    try:
    slider = WebDriverWait(driver, 15).until(
    EC.visibility_of_element_located((By.ID, "captcha_slide_button"))
    )
    action = ActionChains(driver)
    action.click_and_hold(slider).pause(2)
    action.move_by_offset(x_offset, 0).pause(35.5)
    action.release().perform()
    logger.info(f"Slider moved by {x_offset} pixels.")
    except Exception as e:
    logger.error(f"Error moving slider: {e}")

    def login_to_tiktok():
    """
    Perform login to TikTok with CAPTCHA solving.
    """
    try:
    # Open TikTok login page
    driver.get("https://www.tiktok.com/login/phone-or-email/email")
    logger.info("Opened TikTok login page.")

    # Input email and password
    email_field = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.XPATH, "//input[@placeholder='Email or username']"))
    )
    email_field.send_keys("exampl3223243email")

    password_field = driver.find_element(By.XPATH, "//input[@placeholder='Password']")
    password_field.send_keys("3223d234asda")

    submit_button = driver.find_element(By.XPATH, "//button[@type='submit']")
    submit_button.click()
    logger.info("Submitted login form.")

    # Fetch CAPTCHA image URLs
    background_url, puzzle_url = get_captcha_images(driver)
    if not background_url or not puzzle_url:
    logger.error("Could not retrieve CAPTCHA images.")
    return

    # Solve the CAPTCHA
    retries = 2
    x_offset = None
    for attempt in range(retries):
    x_offset = solve_slider_captcha(background_url, puzzle_url)

    if x_offset:
    move_slider(driver, x_offset)
    break
    else:
    logger.error(f"Failed to solve CAPTCHA. Attempt {attempt + 1} of {retries}. Retrying...")
    time.sleep(5)
    if not x_offset:
    logger.error("Failed to solve CAPTCHA after multiple attempts.")

    # Check login status
    time.sleep(5)
    if "login" not in driver.current_url:
    logger.info("Login successful!")
    else:
    logger.warning("Login failed, check credentials or CAPTCHA.")
    except Exception as e:
    logger.error(f"Error during login: {e}")
    finally:
    driver.quit()

    if __name__ == "__main__":
    login_to_tiktok()
    Пример капчи с CapGuru(Первое фото) Моя капча(Второе фото)
    [IMG]
    [IMG]
    И я в душе не ебу по какой причине появляется ошибка

    2025-03-04 18:29:34,085 - CAPTCHA Task ID: 121737863
    2025-03-04 18:29:39,244 - Error in CAPTCHA response: {'status': 0, 'request': 'ERROR_CAPTCHA_UNSOLVABLE'}


    Я пытался и в нейронки закидывать документацию для изменения кода, и сам что то посмотреть, в итоге к нормальному выводу по какой причине не решается капча я не пришел, надеюсь вы сможете объяснить в чем проблема и как решить
     
  2. InfernLife
    InfernLife 4 мар 2025 Купить домен анонимно - t.me/FastDomainBot 839 8 май 2023
    капгуру не может распознать капчу
    [IMG]
     
    1. Посмотреть предыдущие комментарии (5)
    2. beta Автор темы
      морфий, Извиняюсь за тупой вопрос, а разве решение такой капчи есть на рукапче?
    3. морфий
      beta, не знаю, я тебе про другой вид капчи говорил, вообще к тому что капча гуру хуево решает
    4. beta Автор темы
      морфий, Ну как я посмотрел на виды капчи на рукапче и такой как у меня там нету, пезда полная
  3. ГИЛТИКУС
    Возможно капчи этой вообще в сервисе нет как и hcaptcha ибо они засудили всех
     
    4 мар 2025 Изменено
    1. beta Автор темы
      ГИЛТИКУС, код взят из документации кап гуру, там документация отдельно для TIKTOK CAPTCHA (входит несколько видов), взял правильный код для решения капчи которая предоставлена на фотографиях, изменён только ввод данных в поле для почты и пароля, но выдаёт ошибку что капча неразрешаемая
    2. ГИЛТИКУС
      beta, на многих сайтах осталась документация и по hcaptcha, но она офнута
    3. beta Автор темы
  4. beta
    beta Автор темы 4 мар 2025 475 6 янв 2019
    4 мар 2025 Изменено
  5. Orange_3312
    1. beta Автор темы
      Orange_3312, на BAS вот сижу пытаюсь делать гемор пиздецкий
Top
Загрузка...