Как решить невидимую капчу на SeleniumPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как решить невидимую капчу на Selenium

Сообщение Anonymous »

Привет, я пытаюсь написать бота для регистрации на UEFA.com, используя Selenium, поскольку запросы кажутся мне слишком сложными, поэтому я просто работаю над автоматизацией процесса регистрации, даже если это очень много медленнее.
Мне удалось перейти к заключительному этапу, на котором я нажимаю «Создать учетную запись», но столкнулся с reCaptcha, которая появляется только после нажатия «Создать учетную запись». И после решения капчи нет кнопки «Отправить», но она автоматически отправит вам данные.
Я могу получить токен капчи, возвращенный из службы решения 2captcha, и ввел его. в внутренний HTML поля g-response-token с помощью JavaScript. Однако я не знаю, как отправить код и форму.

Код: Выделить всё

import requests
import time
from selenium.webdriver.support.ui import WebDriverWait
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By
from seleniumwire import webdriver
import pyautogui
from twocaptcha import TwoCaptcha
import random
import os
from random import randint
import sys

firstnames = []
lastnames = []

API_Key = '6LehfZUbAAAAAJhue_6BVqqxLulLiXLP0rEgpdRH'

# Open Names File
with open('firstnames.txt', 'r') as f:
for name in f:
name = name.strip()
firstnames.append(name)

with open('lastnames.txt', 'r') as e:
for name in e:
name = name.strip()
lastnames.append(name)

with open('proxies.txt') as f:
proxy = f.readlines()

proxy_rand = randint(1, 35)
s_proxy = str(proxy[proxy_rand])
p_strip = s_proxy.rstrip()

# Proxy Input and Format
bare_proxy = p_strip.split(':')
username = bare_proxy[2]
password = bare_proxy[3]
ip = bare_proxy[0]
port = bare_proxy[1]

options = {
'proxy': {
'http': f'http://{username}:{password}@{ip}:{port}',
'https': f'https://{username}:{password}@{ip}:{port}',
'no_proxy':  'localhost,127.0.0.1'
}
}

os.environ['PATH'] += 'C:/SeleniumDrivers'
homepage_URL = 'https://www.uefa.com/tickets/'

driver = webdriver.Chrome(seleniumwire_options=options)
driver.get(homepage_URL)

# Accessing Register Page
reject_cookies = driver.find_element(By.ID, 'onetrust-reject-all-handler')
reject_cookies.click()
time.sleep(1)

login_button = driver.find_element(By.CSS_SELECTOR, "a[class='btn btn-secondary tickets__btn js-tracking-card']")
login_button.click()
time.sleep(10)

create_account = driver.find_element(By.XPATH, '/html/body/div[2]/div[2]/div[2]/div/form/div[4]/a')
create_account.click()
time.sleep(10)

# Inputting SignUp Details

letters = 'abcdefghijklmnopqrstuvwxyz'
a = random.choice(letters)
b = random.choice(letters)
c = random.choice(letters)
d = random.choice(letters)

email = driver.find_element(By.XPATH, '/html/body/div[2]/div[2]/div[2]/div/form/div[1]/div[6]/input')
email.send_keys(f'{a}{b}{c}{d}@nottingham.pro')

time.sleep(2)

password = driver.find_element(By.XPATH, '/html/body/div[2]/div[2]/div[2]/div/form/div[1]/div[7]/input')
password.send_keys('19741002Rw!')

time.sleep(2)
first_name = driver.find_element(By.XPATH, '//*[@id="gigya-textbox-130722358975432270"]')
first_range = len(firstnames) - 1
random_first = randint(1, first_range)
f_name = firstnames[random_first]
first_name.send_keys(f'{f_name}')

time.sleep(2)
last_name = driver.find_element(By.XPATH, '/html/body/div[2]/div[2]/div[2]/div/form/div[1]/div[9]/input')
last_range = len(lastnames) - 1
random_last = randint(1, first_range)
l_name = lastnames[random_last]
last_name.send_keys(f'{l_name}')

time.sleep(2)
day_of_birth = driver.find_element(By.XPATH, '/html/body/div[2]/div[2]/div[2]/div/form/div[1]/div[10]/div[1]/input')
day = randint(1, 28)
day_of_birth.send_keys(f'{day}')

time.sleep(2)
month_of_birth = driver.find_element(By.XPATH, '/html/body/div[2]/div[2]/div[2]/div/form/div[1]/div[10]/div[2]/input')
month = randint(1, 12)
month_of_birth.send_keys(f'{month}')

time.sleep(2)
year_of_birth = driver.find_element(By.XPATH, '/html/body/div[2]/div[2]/div[2]/div/form/div[1]/div[10]/div[3]/input')
year = randint(1940, 2000)
year_of_birth.send_keys(f'{year}')

driver.execute_script("window.scrollTo(0, 500)")
time.sleep(2)

pyautogui.moveTo(353, 619)
time.sleep(2)
pyautogui.click()

time.sleep(5)

current_url = driver.current_url
print(current_url)

g_key = '6LehfZUbAAAAAJhue_6BVqqxLulLiXLP0rEgpdRH'

def SolveCaptcha():
sys.path.append(os.path.dirname(os.path.dirname(os.path.realpath(__file__))))

api_key = os.getenv(g_key, 'a733edea49a8327795d56edc9f06d391')

solver = TwoCaptcha(api_key)

try:
result = solver.recaptcha(
sitekey=g_key,
url=current_url)

except Exception as e:
print(e)

else:
return result

result = SolveCaptcha()
code = result['code']
print(code)

token = f'document.getElementById("g-recaptcha-response").innerHTML="{code}";'
driver.execute_script(token)

time.sleep(10000)
Как вы можете видеть в конце кода, мне удалось ввести токен капчи, но я не знаю, как его отправить, поскольку нет кнопки отправки
Я пытался найти функцию обратного вызова, но не смог ее найти при проверке страницы.

Подробнее здесь: https://stackoverflow.com/questions/743 ... n-selenium
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»