#!/usr/bin/env python # -*- coding: utf-8 -*- """ prompts user to solve captcha image. This tool is written using PyGTK2. It takes an image file name as input, shows the image to the user and asks him to type the text shown in the image. The goal is to use it inside the Unix scripts. For example, one could do 'CAPTCHA_TEXT=$(python prompt_captcha.py captcha.jpg)' in Bash and perform further actions with $CAPTCHA_TEXT. This little tool will accept png, jpg, gif and most other common image formats. [*] usage: python prompt_captcha.py captcha_image """ __author__ = 'Babil (Golam Sarwar)' __version__= '0.1' import sys import time import Image import gtk import pygtk pygtk.require('2.0') class getCaptcha(object): """performs all the GTK2 gui actions""" def enter_callback(self, widget, textbox): """callback funcion for when user presses the enter key""" textbox_text = textbox.get_text() print textbox_text gtk.main_quit() def __init__(self, captcha=None): # if captcha == None: print >> sys.stderr, "[*] usage: python prompt_captcha.py captcha_image" sys.exit(-1) width, height = Image.open(captcha).size window = gtk.Window(gtk.WINDOW_TOPLEVEL) window.set_geometry_hints(window,width+15,height+15,width+30,height+30) window.set_size_request(width, height) window.resize(width+15, height+15) window.set_title("GTK textbox") window.connect("delete_event", lambda w,e: gtk.main_quit()) window.set_title("Enter Captcha") window.set_keep_above(True) window.set_urgency_hint(True) window.move(gtk.gdk.screen_width()/2 - (width+15)/2, gtk.gdk.screen_height()/2 - (height+15)/2) vbox = gtk.VBox(False, 0) window.add(vbox) image = gtk.Image() image.set_from_file(captcha) button = gtk.Button() button.set_image(image) button.set_relief(gtk.RELIEF_HALF) #button.set_tooltip_text("Type captcha then press enter \n or click the image.") vbox.pack_start(button, True, True, 0) textbox = gtk.Entry() textbox.set_max_length(50) textbox.connect("activate", self.enter_callback, textbox) textbox.set_text("Enter captcha & then click on the image :-) ") textbox.select_region(0, len(textbox.get_text())) vbox.pack_start(textbox, True, True, 10) button.connect("clicked", self.enter_callback, textbox) window.show() vbox.show() button.show() image.show() textbox.show() textbox.grab_focus() def main(): gtk.main() return 0 if __name__ == "__main__": if len(sys.argv) >=2: getCaptcha(sys.argv[1]) else: getCaptcha() main()