2captcha API + селен - PullRequest
       31

2captcha API + селен

0 голосов
/ 09 декабря 2018

Так что я использую этот API-интерфейс 2captcha и тестирую его на сайте, таком как omegle.com.Решение для каптчи происходит, но окно гугл капчи не ставится и ничего не происходит.Хотите знать, почему это так, я знаю, что 2captcha API работает отлично ... но работает ли он только для HTTP-запросов, а не селен?

Вот ссылка API, которую я вставил в код ниже: https://github.com/2captcha/2captcha-api-examples/blob/master/ReCaptcha%20v2%20API%20Examples/Python%20Example/2captcha_python_api_example.py

from selenium import webdriver
from time import sleep
from selenium.common.exceptions import InvalidElementStateException
from selenium.common.exceptions import UnexpectedAlertPresentException
import time,os
import requests

fp = webdriver.FirefoxProfile('C:\\Users\\mo\\AppData\\Roaming\\Mozilla\\Firefox\\Profiles\\b0wnbtro.dev-edition-default')
interest = input("Enter the interests seperate by a comma ")
msg1 = "1"
msg2 ="2"
msg3 = "3"
msg4 = "4"
driver = webdriver.Firefox(fp)

#2CAPTCHA API CODE INSERTED HERE FOR A TEST RUN BEFORE BEING INCORPORATED IN A LOOP

def main():
    try:
        driver.get('http://www.omegle.com')
        time.sleep(1)
        #driver.find_elements_by_xpath("//*[contains(text(), 'I'm not a robot')]")
        #send.click()
        driver.find_element_by_xpath('//textarea[@rows="3"]').clear()
        message = driver.find_element_by_xpath('//textarea[@rows="3"]')
        time.sleep(3)
        message.send_keys(msg1)
        send = driver.find_element_by_xpath('//button[@class="sendbtn"]')
        send.click()
        time.sleep(6)
        message.send_keys(msg2)
        send = driver.find_element_by_xpath('//button[@class="sendbtn"]')
        send.click()
        time.sleep(10)
        message.send_keys(msg3)
        send = driver.find_element_by_xpath('//button[@class="sendbtn"]')
        send.click()
        time.sleep(25)
        message.send_keys(msg4)
        send = driver.find_element_by_xpath('//button[@class="sendbtn"]')
        send.click()
        disconnect = driver.find_element_by_xpath('//button[@class="disconnectbtn"]')
        disconnect.click()
        disconnect = driver.find_element_by_xpath('//button[@class="disconnectbtn"]')
        disconnect.click()
        disconnect = driver.find_element_by_xpath('//button[@class="disconnectbtn"]')
        disconnect.click()
    except (InvalidElementStateException, UnexpectedAlertPresentException):
            main2()

def main2():
    try:           
        driver.get('http://www.omegle.com')
        interest1 = driver.find_element_by_xpath('//input[@class="newtopicinput"]')
        interest1.send_keys(interest)
        btn = driver.find_element_by_id("textbtn")
        btn.click()
        time.sleep(5)
        driver.find_element_by_xpath('//textarea[@rows="3"]').clear()
        message = driver.find_element_by_xpath('//textarea[@rows="3"]')
        time.sleep(1)
        time.sleep(2)
        message.send_keys(msg1)
        send = driver.find_element_by_xpath('//button[@class="sendbtn"]')
        send.click()
        time.sleep(6)
        message.send_keys(msg2)
        send.click()
        time.sleep(10)
        message.send_keys(msg3)
        send.click()
        time.sleep(25)
        message.send_keys(msg4)
        send.click()
        send.click()
        disconnect = driver.find_element_by_xpath('//button[@class="disconnectbtn"]')
        disconnect.click()

    except (InvalidElementStateException,UnexpectedAlertPresentException) :
            disconnect = driver.find_element_by_xpath('//button[@class="disconnectbtn"]')
            disconnect.click()
    else:
        main2()       

while True:
    try:
        main2()
    except (InvalidElementStateException,UnexpectedAlertPresentException) :
        main()

1 Ответ

0 голосов
/ 01 августа 2019

Я надеюсь, что вы уже нашли решение, но хотите оставить комментарий для тех, кто может застрять в одной точке.

  1. API работает и для Selenium.
  2. Флажок не будет отмечен, он контролируется JavaScript-кодом ReCaptcha, и вы его не трогаете.
  3. Все, что вам нужно сделать, это поместить токен в поле g-recaptcha-response.С Selenium вы можете сделать это, выполняя JavaScript
document.querySelector('#g-recaptcha-response').textContent='token_string'
И в вашем случае, поскольку нет ничего, что отправляет форму, вы должны выполнить функцию обратного вызова, которая тоже JavaScript.Например:
___grecaptcha_cfg.clients[0].NY.N.callback('token_string')

Путь функции обратного вызова изменяется, поэтому вам нужно найти действительный объект исследования ___grecaptcha_cfg.

...