首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python + Selenium +2 2Captcha

Python + Selenium +2 2Captcha
EN

Stack Overflow用户
提问于 2019-10-04 19:24:55
回答 3查看 7.5K关注 0票数 1

我正在尝试使用2 captcha服务解决站点中的returns问题,但始终会返回错误:

"C:\Users\pablo\Desktop\selenium\MercBitk.py",跟踪(最近一次调用):GChrome.find_element_by_xpath("//*@id='g-recaptcha-response'").send_keys(resp.text3:)中的

第48行

文件"C:\Python34\lib\site-packages\selenium\webdriver\remote\webelement.py",第479行,以send_keys‘value:keys_to_typing(Value)}表示)

文件"C:\Python34\lib\site-packages\selenium\webdriver\remote\webelement.py",第633行,在_execute中返回self._parent.execute(命令,params)

文件"C:\Python34\lib\site-packages\selenium\webdriver\remote\webdriver.py",第321行,执行self.error_handler.check_response(响应)

文件"C:\Python34\lib\site-packages\selenium\webdriver\remote\errorhandler.py",第242行,在check_response举起exception_class(消息、屏幕、堆栈跟踪)

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

但我找不到我哪里出错了..。代码正确插入CPF和密码,代码发送captcha并将代码正确地接收到2 captcha站点,但无法发送.

守则是:

代码语言:javascript
复制
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 <<<<<<

有人能帮我-拜托?我已经试了三天来解决这个错误

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-10-05 16:22:36

pguardiario提供的调用之后,执行以下操作:

代码语言:javascript
复制
driver.execute_script("""
  onSubmit(arguments[0])
""", resp.text[3:])

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

票数 1
EN

Stack Overflow用户

发布于 2019-10-05 00:57:58

我认为这是因为它是隐藏的。试着这样做:

代码语言:javascript
复制
driver.execute_script("""
  document.getElementById("g-recaptcha-response").innerHTML = arguments[0]
""", resp.text[3:])

在您的情况下替代GChrome的驱动程序。

票数 2
EN

Stack Overflow用户

发布于 2020-12-21 19:10:16

继续进行pguardiario精彩的回复,正如你们中的许多人注意到的,它填充了文本框,但是它没有发送,但是,由于我们发现自己现在可以看到文本框,只提交响应就足够了(对我来说是这样做的):

代码语言:javascript
复制
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()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58242160

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档