当前位置: 首页 > 知识库问答 >
问题:

Python Selenium 2Captcha

陆绍辉
2023-03-14

我正在尝试使用2captcha服务在站点中解决重新验证码问题,但总是向我返回错误:

回溯(最近一次调用):文件“C:\Users\pablo\Desktop\selenium\MercBitk.py”,第48行,在GChrome中。通过xpath(“//*[@id='g-recaptcha-response'])查找元素。发送密钥(分别为文本[3:])

文件“C:\Python34\lib\site packages\selenium\webdriver\remote\webelement.py”,第479行,在发送键的值:键到键入(值)})中
文件“C:\Python34\lib\site packages\selenium\webdriver\remote\webelement.py”,第633行,在执行返回self中_父母亲执行(命令,参数)
html" target="_blank">文件“C:\Python34\lib\site packages\selenium\webdriver\remote\webdriver.py”,第321行,执行self。错误处理程序。在check\u response raise exception\u类(消息、屏幕、堆栈跟踪)中的第242行检查\u response(response)
文件“C:\Python34\lib\site packages\selenium\webdriver\remote\errorhandler.py”

selenium.common.exceptions.元素不交互异常:消息:元素不交互(会话信息:chrome=77.0.3865.90)

但我不知道我哪里错了...代码正确插入CPF和密码,代码发送验证码并正确接收代码到2captcha站点,但不能发送...

代码是:

from selenium import webdriver
import time
from selenium.webdriver.common.keys import Keys
import requests
import getpass
import json
from selenium.webdriver.support.ui import Select

from selenium.webdriver.support import expected_conditions as ec
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait

GChrome = webdriver.Chrome()
GChrome.get('https://www.mercadobitcoin.com.br/conta/login/')

box_login = GChrome.find_element_by_name('cpfcnpj')
box_login.send_keys('my_cpf')
box_pass = GChrome.find_element_by_name('password')
box_pass.send_keys('my_pass')

box_pass.send_keys(Keys.ENTER)

# 2Captcha service
service_key = 'fa...d4' # 2captcha service key 
google_site_key = '6LfIxCoUAAAAAEEW7DQK_gj3pzzeJz82dTW_SMNH' 
pageurl = 'https://www.mercadobitcoin.com.br/conta/login/' 
url = "http://2captcha.com/in.php?key=" + service_key + "&method=userrecaptcha&googlekey=" + google_site_key + "&pageurl=" + pageurl 
resp = requests.get(url)

if resp.text[0:2] != 'OK': 
    quit('Service error. Error code:' + resp.text) 
captcha_id = resp.text[3:]

fetch_url = "http://2captcha.com/res.php?key="+ service_key + "&action=get&id=" + captcha_id

for i in range(1, 10):  
    time.sleep(5) # wait 5 sec.
    resp = requests.get(fetch_url)
    if resp.text[0:2] == 'OK':
        break 

GChrome.execute_script('var element=document.getElementById("g-recaptcha-response"); element.style.display="";')

GChrome.find_element_by_xpath("//*[@id='g-recaptcha-response']").send_keys(resp.text[3:]) #ERROR HERE <<<<<<

有人能帮帮我吗?我已经尝试了三天来解决这个错误

共有3个答案

冯福
2023-03-14

继续pguardiario精彩的回复,正如你们中的许多人所注意到的,它填满了文本框,但它没有发送。然而,由于我们发现自己的文本框现在可见,只需提交回复就足够了(它为我提供了):

driver.execute_script('var element=document.getElementById("g-recaptcha-response"); element.style.display="";')
driver.execute_script('document.getElementById("g-recaptcha-response").innerHTML = arguments[0]', resp.text[3:])
driver.find_element_by_id("g-recaptcha-response").submit()
微生善
2023-03-14

在pguardiario提供呼叫后,执行以下操作:

driver.execute_script("""
  onSubmit(arguments[0])
""", resp.text[3:])

这是使用回调函数的不可见的recaptcha,在您的示例中,函数名是onSubmit。

司寇昱
2023-03-14

我想是因为它被隐藏了。像这样试试:

driver.execute_script("""
  document.getElementById("g-recaptcha-response").innerHTML = arguments[0]
""", resp.text[3:])

在您的情况下,将驱动程序替换为GChrome。

 类似资料:

相关问答

相关文章

相关阅读