3

I'm trying to upload an image captcha to 2captcha API but I'm receiving the error ERROR_ZERO_CAPTCHA_FILESIZE but my file size on my directory is above 60KB why am I still receiving this error?

Am I missing something?

I've tried sending the only captcha image(originally downloaded from the source) but I received the same error or TOO_MANY_BAD_IMAGES. Please help me.

CODE:

from selenium import webdriver
import requests

driverop = webdriver.ChromeOptions()
driverop.add_argument("--start-maximized")
proxy = "118.174.233.45:44061"
driverop = webdriver.ChromeOptions()
driverop.add_argument('--proxy-server=%s' % proxy)
driver = webdriver.Chrome("chromedriver/chromedriver",options=driverop)
driver.get("https://accounts.google.com/o/oauth2/auth/oauthchooseaccount?client_id=717762328687-iludtf96g1hinl76e4lc1b9a82g457nn.apps.googleusercontent.com&scope=profile%20email&redirect_uri=https%3A%2F%2Fstackauth.com%2Fauth%2Foauth2%2Fgoogle&state=%7B%22sid%22%3A1%2C%22st%22%3A%2259%3A3%3Abbc%2C16%3Af9ef16faad8743e2%2C10%3A1609613474%2C16%3Aa2c13dc2511eb0d0%2Ccb47135ca2a3bc9ca4ee712429ddf5c0935588f518c964242057bb74b818d4de%22%2C%22cdl%22%3Anull%2C%22cid%22%3A%22717762328687-iludtf96g1hinl76e4lc1b9a82g457nn.apps.googleusercontent.com%22%2C%22k%22%3A%22Google%22%2C%22ses%22%3A%22e15efb6754f4498991cd1d37a967f325%22%7D&response_type=code&flowName=GeneralOAuthFlow")
driver.find_element_by_id("identifierId").send_keys(EMAIL)
driver.find_element_by_css_selector('.VfPpkd-LgbsSe-OWXEXe-k8QpJ > div:nth-child(3)').click()
driver.save_screenshot("sample.png")
url = 'http://2captcha.com/in.php'
API_KEY = "---"
files = {'file': open('sample.png',"rb")}
data = {'key': API_KEY, 'method': 'post'}
r = requests.post(url, files=files, data=data)
if r.ok:
    print(r)
url = "http://2captcha.com/in.php?key="+API_KEY+"&action=get&id="+r.text[3:]
for xr in range(1, 10):  
    sleep(1.5) # wait 5 sec.
    resp = requests.get(url)
    if resp.text[0:2] == 'OK':
        break
    else:
        print(resp)
Ashfaque Marfani
  • 345
  • 4
  • 22
  • Can you upload the file `driver.save_screenshot("sample.png")` to imgur? Delete the `sample.png` first, then run the script, then upload it somewhere lossless like imgur, maybe I can take a look at it. – jackblk Jan 07 '21 at 07:53
  • @jackblk Thankyou for your comment but the goal here is to upload a file from my system to 2captcha, if you could resolve the issue using PIL library or similar that would be acceptable. – Ashfaque Marfani Jan 07 '21 at 09:48
  • 1
    I cannot paste the code snippet to comment so I posted a reply. Not sure if it solves all of your problems, but it will solve your uploading to 2captcha problem. Your approach will also have some issues, mostly with Google not playing well with Selenium. They can detect and stop you from logging in using Selenium. – jackblk Jan 07 '21 at 09:59

3 Answers3

2

If you use the driver.save_screenshot you will save the current window, according the documentation (WebDriver.save_screenshot). Try to return the element and use the webelement.screenshot method (WebElement.screenshot)

from selenium import webdriver
import requests

driverop = webdriver.ChromeOptions()
driverop.add_argument("--start-maximized")
proxy = "118.174.233.45:44061"
driverop = webdriver.ChromeOptions()
driverop.add_argument('--proxy-server=%s' % proxy)
driver = webdriver.Chrome("chromedriver/chromedriver",options=driverop)
driver.get("https://accounts.google.com/o/oauth2/auth/oauthchooseaccount?client_id=717762328687-iludtf96g1hinl76e4lc1b9a82g457nn.apps.googleusercontent.com&scope=profile%20email&redirect_uri=https%3A%2F%2Fstackauth.com%2Fauth%2Foauth2%2Fgoogle&state=%7B%22sid%22%3A1%2C%22st%22%3A%2259%3A3%3Abbc%2C16%3Af9ef16faad8743e2%2C10%3A1609613474%2C16%3Aa2c13dc2511eb0d0%2Ccb47135ca2a3bc9ca4ee712429ddf5c0935588f518c964242057bb74b818d4de%22%2C%22cdl%22%3Anull%2C%22cid%22%3A%22717762328687-iludtf96g1hinl76e4lc1b9a82g457nn.apps.googleusercontent.com%22%2C%22k%22%3A%22Google%22%2C%22ses%22%3A%22e15efb6754f4498991cd1d37a967f325%22%7D&response_type=code&flowName=GeneralOAuthFlow")
driver.find_element_by_id("identifierId").send_keys(EMAIL)
element = driver.find_element_by_css_selector('.VfPpkd-LgbsSe-OWXEXe-k8QpJ > div:nth-child(3)').click()
element.screenshot("sample.png")
url = 'http://2captcha.com/in.php'
API_KEY = "---"
files = {'file': open('sample.png',"rb")}
data = {'key': API_KEY, 'method': 'post'}
r = requests.post(url, files=files, data=data)
if r.ok:
    print(r)
url = "http://2captcha.com/in.php?key="+API_KEY+"&action=get&id="+r.text[3:]
for xr in range(1, 10):  
    sleep(1.5) # wait 5 sec.
    resp = requests.get(url)
    if resp.text[0:2] == 'OK':
        break
    else:
        print(resp)
daniboy000
  • 1,069
  • 2
  • 16
  • 26
0

Regarding your comment, I think your problem is using 2captcha API?

If so, instead of using request module, try their in-house API TwoCaptcha.

Install it by: pip3 install 2captcha-python

I have a snippet here that you can try to upload your sample:

import sys
import os

sys.path.append(os.path.dirname(os.path.dirname(os.path.realpath(__file__))))

from twocaptcha import TwoCaptcha

api_key = os.getenv('APIKEY_2CAPTCHA', 'YOUR_API_KEY')

solver = TwoCaptcha(api_key)

try:
    result = solver.normal('path/to/captcha.jpg')

except Exception as e:
    sys.exit(e)

else:
    sys.exit('solved: ' + str(result))
jackblk
  • 1,076
  • 8
  • 19
0

No need to use selenium and more lines of code to solve captcha. Just use the below short code, it will resolve and provide the response token.

Note: It will handle, image selection as well (car, bus, ship, truck and so on)

-- sitekey - inspect element and find data-sitekey attribute, you will get it

-- url - your webite url

import requests
from twocaptcha import TwoCaptcha

twoCaptcha =TwoCaptcha('xxxxxxxxxxxxxxx')  # Your 2captcha API key

captcha_token = twoCaptcha.recaptcha(sitekey='xxxxxxxxxxxxxx',
                                      url='website url')

print(captcha_token)