Решил значит написать код который логинится в аккаунт Мой код 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() 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 CapGuru код 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() 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(Первое фото) Моя капча(Второе фото) Капча И я в душе не ебу по какой причине появляется ошибка 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'} Я пытался и в нейронки закидывать документацию для изменения кода, и сам что то посмотреть, в итоге к нормальному выводу по какой причине не решается капча я не пришел, надеюсь вы сможете объяснить в чем проблема и как решить
ГИЛТИКУС, код взят из документации кап гуру, там документация отдельно для TIKTOK CAPTCHA (входит несколько видов), взял правильный код для решения капчи которая предоставлена на фотографиях, изменён только ввод данных в поле для почты и пароля, но выдаёт ошибку что капча неразрешаемая
https://docs.cap.guru/ru/modules/selenium.html Откуда был взят код(НЕ РЕКЛАМА) на данном сайте даже есть отдельно TIKTOK CAPTCHA