简体   繁体   中英

Can not inject token

I'm using the 2Captcha API to obtain the token that solves the reCaptcha of a web that validates the criminal record of a person, inserting the ID and the verification code. The thing is that my code works in the reCaptcha demo but not in the page I'm taking about https://sede.mjusticia.gob.es/verificaCSV . Clicking the submit button after injecting the token in the textarea should work, but doesn't (The page reloads and the reCaptha doesn't solved), I don't know what step am I skipping. I would appreciate if there's someone who can identify what part of the web page sends the token to solve the reCaptcha, I have the work delivery this Sunday and no forum or video solves my problem. Thank you!. The code:

import sys
from twocaptcha import TwoCaptcha
from selenium import webdriver
import requests, time
from selenium.webdriver.common.by import By 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as ec

#Librerías para completar el uso de WebDriverWait
import time
import pandas as pd

#Death By Captcha
import requests, time

page_url = 'https://sede.mjusticia.gob.es/verificaCSV'
driver = webdriver.Chrome()
driver.get(page_url)

def solve():
    result = None
    sitekey = '6Lf28LAUAAAAACso2fkzeLfJLKN1DBHUrVNpIN1b'
    api_key = 'MY_API_KEY'
    solver = TwoCaptcha(api_key)
    try:
        result = solver.recaptcha(
            sitekey=sitekey,
            url='https://sede.mjusticia.gob.es/verificaCSV'
        )

    except Exception as e:
        sys.exit(e)

    return result

numero_dni = 'ID'
codigo_verificacion = 'VERIFICATION_CODE'

insertarDNI = WebDriverWait(driver, 5)\
                .until(ec.element_to_be_clickable((By.CSS_SELECTOR,"input#documento.inputMediano")))\
                .send_keys(str(numero_dni))

insertarCodigo_Verificacion = WebDriverWait(driver, 5)\
                .until(ec.element_to_be_clickable((By.CSS_SELECTOR,"input#idSolicitud.inputMediano")))\
                .send_keys(str(codigo_verificacion))

textarea = driver.find_element(By.NAME, 'g-recaptcha-response')
solution = solve()
code = solution['code']
driver.execute_script("document.getElementsByName('g-recaptcha-response')[0].style.display = '';")
time.sleep(10)
driver.find_element(By.NAME, 'g-recaptcha-response').send_keys(code)
time.sleep(10)
driver.find_element(By.ID, "submitConsulta").click()
time.sleep(10)

check if any of these work for you:

driver.find_element(By.XPATH, '//button[@class="rc-button-default goog-inline-block"]').click()

driver.find_element(By.XPATH, '//button[contains(text(), "Verify")]').click()

driver.execute_script('document.getElementById("recaptcha-verify-button").click;')

or you can also try with ActionChains

from selenium.webdriver.common.action_chains import ActionChains

element = driver.find_element(By.XPATH, '//button[contains(text(), "Verify")]')

action = ActionChains(driver)
action.click(on_element = element)
action.perform()

Thank you for helping me! I tried you codes but there's no button with those characteristics, I tried to submit the form with driver.execute_script("document.getElementById('form_verificacion').submit();") but didn't work. I don't know which part of the HTML code submits the token, if someone can take a look of the web page and identify that part I will be eternally grateful :((.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM