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