2020-12-17 21:52:17 +01:00
# -*- coding: utf-8 -*-
# *************************************************************************************************************************
# from Shani's LPro Code https://github.com/Shani-08/ShaniXBMCWork2/blob/master/other/unCaptcha.py
# and https://github.com/OpenMediaVault-Plugin-Developers/openmediavault-pyload/blob/master/usr/share/pyload/module/plugins/captcha/ReCaptcha.py
# and https://gitlab.com/iptvplayer-for-e2/iptvplayer-for-e2
# *************************************************************************************************************************
try : # Python 2
import urllib2
except ImportError : # Python 3
import urllib . request as urllib2
import base64
try :
from http . cookiejar import CookieJar
except ImportError :
from cookielib import CookieJar
import os
import random
import re
import time
import xbmcaddon
import xbmcvfs
import xbmcgui
import xbmc
from resources . lib . comaddon import dialog , VSlog
from resources . lib . handler . requestHandler import cRequestHandler
from resources . lib . util import urlEncode , Noredirection
UA = ' Mozilla/5.0 (Windows NT 6.1; WOW64; rv:53.0) Gecko/20100101 Firefox/53.0 '
__addon__ = xbmcaddon . Addon ( ' plugin.video.vstream ' )
__sLang__ = ' fr '
class cInputWindow ( xbmcgui . WindowDialog ) :
def __init__ ( self , * args , * * kwargs ) :
self . cptloc = kwargs . get ( ' captcha ' )
# self.img = xbmcgui.ControlImage(250, 110, 780, 499, '')
# xbmc.sleep(500)
self . img = xbmcgui . ControlImage ( 250 , 110 , 780 , 499 , self . cptloc )
xbmc . sleep ( 500 )
bg_image = os . path . join ( __addon__ . getAddonInfo ( ' path ' ) , ' resources/art/ ' ) + ' background.png '
check_image = os . path . join ( __addon__ . getAddonInfo ( ' path ' ) , ' resources/art/ ' ) + ' trans_checked.png '
self . ctrlBackground = xbmcgui . ControlImage ( 0 , 0 , 1280 , 720 , bg_image )
self . cancelled = False
self . addControl ( self . ctrlBackground )
self . strActionInfo = xbmcgui . ControlLabel ( 250 , 20 , 724 , 400 , ' Veuillez sélectionnez les images correspondants au thème. \n Il devrait y en avoir 3 ou 4 à sélectionner. ' , ' font40 ' , ' 0xFFFF00FF ' )
self . addControl ( self . strActionInfo )
self . msg = kwargs . get ( ' msg ' )
self . roundnum = kwargs . get ( ' roundnum ' )
self . strActionInfo = xbmcgui . ControlLabel ( 250 , 70 , 700 , 300 , ' Le thème est: ' + self . msg , ' font13 ' , ' 0xFFFF00FF ' )
self . addControl ( self . strActionInfo )
self . addControl ( self . img )
self . chk = [ 0 ] * 9
self . chkbutton = [ 0 ] * 9
self . chkstate = [ False ] * 9
if 1 == 2 :
self . chk [ 0 ] = xbmcgui . ControlCheckMark ( 250 , 110 , 260 , 166 , ' 1 ' , font = ' font14 ' , focusTexture = check_image , checkWidth = 260 , checkHeight = 166 )
self . chk [ 1 ] = xbmcgui . ControlCheckMark ( 250 + 260 , 110 , 260 , 166 , ' 2 ' , font = ' font14 ' , focusTexture = check_image , checkWidth = 260 , checkHeight = 166 )
self . chk [ 2 ] = xbmcgui . ControlCheckMark ( 250 + 520 , 110 , 260 , 166 , ' 3 ' , font = ' font14 ' , focusTexture = check_image , checkWidth = 260 , checkHeight = 166 )
self . chk [ 3 ] = xbmcgui . ControlCheckMark ( 250 , 110 + 166 , 260 , 166 , ' 4 ' , font = ' font14 ' , focusTexture = check_image , checkWidth = 260 , checkHeight = 166 )
self . chk [ 4 ] = xbmcgui . ControlCheckMark ( 250 + 260 , 110 + 166 , 260 , 166 , ' 5 ' , font = ' font14 ' , focusTexture = check_image , checkWidth = 260 , checkHeight = 166 )
self . chk [ 5 ] = xbmcgui . ControlCheckMark ( 250 + 520 , 110 + 166 , 260 , 166 , ' 6 ' , font = ' font14 ' , focusTexture = check_image , checkWidth = 260 , checkHeight = 166 )
self . chk [ 6 ] = xbmcgui . ControlCheckMark ( 250 , 110 + 332 , 260 , 166 , ' 7 ' , font = ' font14 ' , focusTexture = check_image , checkWidth = 260 , checkHeight = 166 )
self . chk [ 7 ] = xbmcgui . ControlCheckMark ( 250 + 260 , 110 + 332 , 260 , 166 , ' 8 ' , font = ' font14 ' , focusTexture = check_image , checkWidth = 260 , checkHeight = 166 )
self . chk [ 8 ] = xbmcgui . ControlCheckMark ( 250 + 520 , 110 + 332 , 260 , 166 , ' 9 ' , font = ' font14 ' , focusTexture = check_image , checkWidth = 260 , checkHeight = 166 )
else :
self . chk [ 0 ] = xbmcgui . ControlImage ( 250 , 110 , 260 , 166 , check_image )
self . chk [ 1 ] = xbmcgui . ControlImage ( 250 + 260 , 110 , 260 , 166 , check_image )
self . chk [ 2 ] = xbmcgui . ControlImage ( 250 + 520 , 110 , 260 , 166 , check_image )
self . chk [ 3 ] = xbmcgui . ControlImage ( 250 , 110 + 166 , 260 , 166 , check_image )
self . chk [ 4 ] = xbmcgui . ControlImage ( 250 + 260 , 110 + 166 , 260 , 166 , check_image )
self . chk [ 5 ] = xbmcgui . ControlImage ( 250 + 520 , 110 + 166 , 260 , 166 , check_image )
self . chk [ 6 ] = xbmcgui . ControlImage ( 250 , 110 + 332 , 260 , 166 , check_image )
self . chk [ 7 ] = xbmcgui . ControlImage ( 250 + 260 , 110 + 332 , 260 , 166 , check_image )
self . chk [ 8 ] = xbmcgui . ControlImage ( 250 + 520 , 110 + 332 , 260 , 166 , check_image )
self . chkbutton [ 0 ] = xbmcgui . ControlButton ( 250 , 110 , 260 , 166 , ' 1 ' , font = ' font1 ' )
self . chkbutton [ 1 ] = xbmcgui . ControlButton ( 250 + 260 , 110 , 260 , 166 , ' 2 ' , font = ' font1 ' )
self . chkbutton [ 2 ] = xbmcgui . ControlButton ( 250 + 520 , 110 , 260 , 166 , ' 3 ' , font = ' font1 ' )
self . chkbutton [ 3 ] = xbmcgui . ControlButton ( 250 , 110 + 166 , 260 , 166 , ' 4 ' , font = ' font1 ' )
self . chkbutton [ 4 ] = xbmcgui . ControlButton ( 250 + 260 , 110 + 166 , 260 , 166 , ' 5 ' , font = ' font1 ' )
self . chkbutton [ 5 ] = xbmcgui . ControlButton ( 250 + 520 , 110 + 166 , 260 , 166 , ' 6 ' , font = ' font1 ' )
self . chkbutton [ 6 ] = xbmcgui . ControlButton ( 250 , 110 + 332 , 260 , 166 , ' 7 ' , font = ' font1 ' )
self . chkbutton [ 7 ] = xbmcgui . ControlButton ( 250 + 260 , 110 + 332 , 260 , 166 , ' 8 ' , font = ' font1 ' )
self . chkbutton [ 8 ] = xbmcgui . ControlButton ( 250 + 520 , 110 + 332 , 260 , 166 , ' 9 ' , font = ' font1 ' )
for obj in self . chk :
self . addControl ( obj )
obj . setVisible ( False )
for obj in self . chkbutton :
self . addControl ( obj )
self . cancelbutton = xbmcgui . ControlButton ( 250 + 260 - 70 , 620 , 140 , 50 , ' Cancel ' , alignment = 2 )
self . okbutton = xbmcgui . ControlButton ( 250 + 520 - 50 , 620 , 100 , 50 , ' OK ' , alignment = 2 )
self . addControl ( self . okbutton )
self . addControl ( self . cancelbutton )
self . chkbutton [ 6 ] . controlDown ( self . cancelbutton ) ; self . chkbutton [ 6 ] . controlUp ( self . chkbutton [ 3 ] )
self . chkbutton [ 7 ] . controlDown ( self . cancelbutton ) ; self . chkbutton [ 7 ] . controlUp ( self . chkbutton [ 4 ] )
self . chkbutton [ 8 ] . controlDown ( self . okbutton ) ; self . chkbutton [ 8 ] . controlUp ( self . chkbutton [ 5 ] )
self . chkbutton [ 6 ] . controlLeft ( self . chkbutton [ 8 ] ) ; self . chkbutton [ 6 ] . controlRight ( self . chkbutton [ 7 ] ) ;
self . chkbutton [ 7 ] . controlLeft ( self . chkbutton [ 6 ] ) ; self . chkbutton [ 7 ] . controlRight ( self . chkbutton [ 8 ] ) ;
self . chkbutton [ 8 ] . controlLeft ( self . chkbutton [ 7 ] ) ; self . chkbutton [ 8 ] . controlRight ( self . chkbutton [ 6 ] ) ;
self . chkbutton [ 3 ] . controlDown ( self . chkbutton [ 6 ] ) ; self . chkbutton [ 3 ] . controlUp ( self . chkbutton [ 0 ] )
self . chkbutton [ 4 ] . controlDown ( self . chkbutton [ 7 ] ) ; self . chkbutton [ 4 ] . controlUp ( self . chkbutton [ 1 ] )
self . chkbutton [ 5 ] . controlDown ( self . chkbutton [ 8 ] ) ; self . chkbutton [ 5 ] . controlUp ( self . chkbutton [ 2 ] )
self . chkbutton [ 3 ] . controlLeft ( self . chkbutton [ 5 ] ) ; self . chkbutton [ 3 ] . controlRight ( self . chkbutton [ 4 ] ) ;
self . chkbutton [ 4 ] . controlLeft ( self . chkbutton [ 3 ] ) ; self . chkbutton [ 4 ] . controlRight ( self . chkbutton [ 5 ] ) ;
self . chkbutton [ 5 ] . controlLeft ( self . chkbutton [ 4 ] ) ; self . chkbutton [ 5 ] . controlRight ( self . chkbutton [ 3 ] ) ;
self . chkbutton [ 0 ] . controlDown ( self . chkbutton [ 3 ] ) ; self . chkbutton [ 0 ] . controlUp ( self . cancelbutton )
self . chkbutton [ 1 ] . controlDown ( self . chkbutton [ 4 ] ) ; self . chkbutton [ 1 ] . controlUp ( self . cancelbutton )
self . chkbutton [ 2 ] . controlDown ( self . chkbutton [ 5 ] ) ; self . chkbutton [ 2 ] . controlUp ( self . okbutton )
self . chkbutton [ 0 ] . controlLeft ( self . chkbutton [ 2 ] ) ; self . chkbutton [ 0 ] . controlRight ( self . chkbutton [ 1 ] ) ;
self . chkbutton [ 1 ] . controlLeft ( self . chkbutton [ 0 ] ) ; self . chkbutton [ 1 ] . controlRight ( self . chkbutton [ 2 ] ) ;
self . chkbutton [ 2 ] . controlLeft ( self . chkbutton [ 1 ] ) ; self . chkbutton [ 2 ] . controlRight ( self . chkbutton [ 0 ] ) ;
self . cancelled = False
self . setFocus ( self . okbutton )
self . okbutton . controlLeft ( self . cancelbutton ) ; self . okbutton . controlRight ( self . cancelbutton ) ;
self . cancelbutton . controlLeft ( self . okbutton ) ; self . cancelbutton . controlRight ( self . okbutton ) ;
self . okbutton . controlDown ( self . chkbutton [ 2 ] ) ; self . okbutton . controlUp ( self . chkbutton [ 8 ] ) ;
self . cancelbutton . controlDown ( self . chkbutton [ 0 ] ) ; self . cancelbutton . controlUp ( self . chkbutton [ 6 ] ) ;
def get ( self ) :
self . doModal ( )
self . close ( )
if not self . cancelled :
retval = " "
for objn in range ( 9 ) :
if self . chkstate [ objn ] :
retval + = ( " " if retval == " " else " , " ) + str ( objn )
return retval
else :
return " "
def anythingChecked ( self ) :
for obj in self . chkstate :
if obj :
return True
return False
def onControl ( self , control ) :
if str ( control . getLabel ( ) ) == " OK " :
if self . anythingChecked ( ) :
self . close ( )
elif str ( control . getLabel ( ) ) == " Cancel " :
self . cancelled = True
self . close ( )
try :
if ' xbmcgui.ControlButton ' in repr ( type ( control ) ) :
index = control . getLabel ( )
if index . isnumeric ( ) :
self . chkstate [ int ( index ) - 1 ] = not self . chkstate [ int ( index ) - 1 ]
self . chk [ int ( index ) - 1 ] . setVisible ( self . chkstate [ int ( index ) - 1 ] )
except :
pass
def onAction ( self , action ) :
if action == 10 :
self . cancelled = True
self . close ( )
def ResolveCaptcha ( key , urlOuo ) :
urlBase = ' https://www.google.com/recaptcha/api/fallback?k= ' + key
oRequestHandler = cRequestHandler ( urlBase )
oRequestHandler . addHeaderEntry ( ' User-Agent ' , UA )
oRequestHandler . addHeaderEntry ( ' Accept ' , ' text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 ' )
oRequestHandler . addHeaderEntry ( ' Accept-Language ' , ' fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3 ' )
oRequestHandler . addHeaderEntry ( ' Accept-Encoding ' , ' gzip, deflate ' )
oRequestHandler . addHeaderEntry ( ' Referer ' , urlOuo )
body = oRequestHandler . request ( )
captchaScrap = re . findall ( ' value= " 8 " ><img class= " fbc-imageselect-payload " src= " (.+?) " ' , str ( body ) )
text = re . search ( ' <div class= " rc-imageselect.+? " >.+?<strong>(.+?)</strong> ' , str ( body ) ) . group ( 1 )
c = re . search ( ' method= " POST " ><input type= " hidden " name= " c " value= " (.+?) " ' , str ( body ) ) . group ( 1 )
k = re . search ( ' k=(.+?) " alt= ' , str ( body ) ) . group ( 1 )
params = { " c " : c , " k " : k }
query_string = urlEncode ( params )
url = ' https://www.google.com ' + str ( captchaScrap [ 0 ] ) + ' ? ' + query_string
filePath = ' special://home/userdata/addon_data/plugin.video.vstream/Captcha.raw '
oRequestHandler = cRequestHandler ( url )
htmlcontent = oRequestHandler . request ( )
downloaded_image = xbmcvfs . File ( filePath , ' wb ' )
downloaded_image . write ( htmlcontent )
downloaded_image . close ( )
oSolver = cInputWindow ( captcha = filePath , msg = text , roundnum = 1 )
retArg = oSolver . get ( )
allNumber = [ int ( s ) for s in re . findall ( ' ([0-9]) ' , str ( retArg ) ) ]
responseFinal = " "
for rep in allNumber :
responseFinal = responseFinal + ' &response= ' + str ( rep )
headers = { ' User-Agent ' : UA ,
' Accept ' : ' text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 ' ,
' Accept-Language ' : ' fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3 ' ,
' Accept-Encoding ' : ' gzip, deflate ' ,
' Referer ' : url ,
' Content-Type ' : ' application/x-www-form-urlencoded ' ,
' Content-Length ' : str ( len ( params ) ) }
params = ' c= ' + c + responseFinal
oRequestHandler = cRequestHandler ( urlBase )
oRequestHandler . setRequestType ( 1 )
oRequestHandler . addHeaderEntry ( ' User-Agent ' , UA )
oRequestHandler . addHeaderEntry ( ' Accept ' , ' text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 ' )
oRequestHandler . addHeaderEntry ( ' Accept-Language ' , ' fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3 ' )
oRequestHandler . addHeaderEntry ( ' Accept-Encoding ' , ' gzip, deflate ' )
oRequestHandler . addHeaderEntry ( ' Referer ' , url )
oRequestHandler . addHeaderEntry ( ' Content-Type ' , ' application/x-www-form-urlencoded ' )
oRequestHandler . addHeaderEntry ( ' Content-Length ' , str ( len ( params ) ) )
oRequestHandler . addParametersLine ( params )
sHtmlContent = oRequestHandler . request ( )
token = re . search ( ' <textarea dir= " ltr " readonly>(.+?)< ' , sHtmlContent ) . group ( 1 )
if not token :
dialogs = dialog ( )
dialogs . VSinfo ( " Captcha non valide " )
return token
def getUrl ( url , cookieJar = None , post = None , timeout = 20 , headers = None , noredir = False ) :
cookie_handler = urllib2 . HTTPCookieProcessor ( cookieJar )
if noredir :
opener = urllib2 . build_opener ( Noredirection , cookie_handler , urllib2 . HTTPBasicAuthHandler ( ) , urllib2 . HTTPHandler ( ) )
else :
opener = urllib2 . build_opener ( cookie_handler , urllib2 . HTTPBasicAuthHandler ( ) , urllib2 . HTTPHandler ( ) )
# opener = urllib2.install_opener(opener)
req = urllib2 . Request ( url )
if headers :
for h , hv in headers :
req . add_header ( h , hv )
else :
req . add_header ( ' User-Agent ' , ' Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.154 Safari/537.36 ' )
req . add_header ( ' Accept-Language ' , __sLang__ )
VSlog ( ' post : ' + str ( post ) )
response = opener . open ( req , post , timeout = timeout )
link = response . read ( )
response . close ( )
return link
class UnCaptchaReCaptcha :
def _collect_api_info ( self ) :
html = getUrl ( " http://www.google.com/recaptcha/api.js " )
a = re . search ( r ' po.src = \' (.*?) \' ; ' , html ) . group ( 1 )
vers = a . split ( " / " ) [ 5 ]
questionfile = a
VSlog ( " Fichier questions: %s " % questionfile )
VSlog ( " API version: %s " % vers )
language = a . split ( " __ " ) [ 1 ] . split ( " . " ) [ 0 ]
VSlog ( " API language: %s " % language )
html = getUrl ( " https://apis.google.com/js/api.js " )
b = re . search ( r ' " h " : " (.*?) " , " ' , html ) . group ( 1 )
jsh = b . decode ( ' unicode-escape ' )
VSlog ( " API jsh-string: %s " % jsh )
return vers , language , jsh , questionfile
def _prepare_time_and_rpc ( self ) :
# getUrl("http://www.google.com/recaptcha/api2/demo")
millis = int ( round ( time . time ( ) * 1000 ) )
VSlog ( " Time: %s " % millis )
rand = random . randint ( 1 , 99999999 )
a = " 0. %s " % str ( rand * 2147483647 )
rpc = int ( 100000000 * float ( a ) )
VSlog ( " Rpc-token: %s " % rpc )
return millis , rpc
def ExtReg ( self , r , chain ) :
r = re . search ( r , chain )
if not r :
return ' '
return r . group ( 1 )
def processCaptcha ( self , key , lang , gcookieJar ) :
headers = [ ( " User-Agent " , " Mozilla/5.0 (Windows NT 6.1; WOW64; rv:37.0) Gecko/20100101 Firefox/37.0 " ) ,
# ("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"),
( " Referer " , " https://www.google.com/recaptcha/api2/demo " ) ,
( " Accept-Language " , lang ) ]
millis , rpc = self . _prepare_time_and_rpc ( )
co = base64 . b64encode ( ' https://www.google.com:443 ' )
botguardstring = " !A "
vers , language , jsh , questionfile = self . _collect_api_info ( )
post_data = None
token = ' '
iteration = 0
reCaptchaUrl = ' http://www.google.com/recaptcha/api/fallback?k= %s ' % key
while iteration < 20 :
millis_captcha_loading = int ( round ( time . time ( ) * 1000 ) )
# ,'cookiefile':self.COOKIE_FILE, 'use_cookie': True, 'load_cookie': True, 'save_cookie': True
data = getUrl ( reCaptchaUrl , headers = headers , post = post_data , cookieJar = gcookieJar )
VSlog ( reCaptchaUrl )
imgUrl = re . search ( r ' " (/recaptcha/api2/payload[^ " ]+?) " ' , data ) . group ( 1 )
VSlog ( imgUrl )
iteration + = 1
message = self . ExtReg ( r ' <label[^>]+class= " fbc-imageselect-message-text " [^>]*>(.*?)</label> ' , data )
if ' ' == message :
message = self . ExtReg ( r ' <div[^>]+class= " fbc-imageselect-message-error " >(.*?)</div> ' , data )
if ' ' == message :
token = re . search ( r ' " this \ .select \ ( \ ) " >(.*?)</textarea> ' , data ) . group ( 1 )
if ' ' != token :
VSlog ( ' >>>>>>>> Captcha token[ %s ] ' % token )
else :
VSlog ( ' >>>>>>>> Captcha Failed ' )
break
cval = re . search ( r ' name= " c " \ s+value= " ([^ " ]+) ' , data ) . group ( 1 )
imgUrl = ' https://www.google.com %s ' % ( imgUrl . replace ( ' & ' , ' & ' ) )
accepLabel = re . search ( r ' type= " submit " \ s+value= " ([^ " ]+) ' , data ) . group ( 1 )
filePath = ' c://c.jpeg '
import random
n = random . randint ( 1 , 1000 )
filePath = ' c://c ' + str ( n ) + ' .jpeg '
VSlog ( " >>>>>>>> Captcha message[ %s ] " % message )
VSlog ( " >>>>>>>> Captcha accep label[ %s ] " % accepLabel )
VSlog ( " >>>>>>>> Captcha imgUrl[ %s ] filePath[ %s ] " % ( imgUrl , filePath ) )
# params = {'maintype': 'image', 'subtypes':['jpeg'], 'check_first_bytes':['\xFF\xD8', '\xFF\xD9']}
# ret = self.cm.saveWebFile(filePath, imgUrl, params)
# retArg = self.sessionEx.waitForFinishOpen(UnCaptchaReCaptchaWidget, imgFilePath=filePath, message=message, title="reCAPTCHA v2", additionalParams={'accep_label':accepLabel})
ret = ' '
ret = getUrl ( imgUrl , headers = headers , cookieJar = gcookieJar )
downloaded_image = file ( filePath , ' wb ' )
downloaded_image . write ( ret )
downloaded_image . close ( )
oSolver = cInputWindow ( captcha = filePath , msg = message , roundnum = iteration )
retArg = oSolver . get ( )
VSlog ( ' >>>>>>>> Captcha response [ %s ] ' % retArg )
responses = base64 . b64encode ( ' { " response " :[ %s ]} ' % retArg )
# VSlog(responses)
responses = responses . replace ( ' = ' , ' . ' )
if retArg is not None and len ( retArg ) and retArg [ 0 ] :
post_data = urlEncode ( { ' c ' : cval , ' response ' : responses } , doseq = True )
else :
break
if False :
timeToSolve = int ( round ( time . time ( ) * 1000 ) ) - millis_captcha_loading
timeToSolveMore = timeToSolve # timeToSolve + int(float("0." + str(random.randint(1, 99999999))) * 500)
postdata = urlEncode ( { ' c ' : cval , ' response ' : responses , ' v ' : vers ,
' t ' : timeToSolve , ' bg ' : botguardstring , ' ct ' : timeToSolveMore } )
html = getUrl ( ' https://www.google.com/recaptcha/api2/userverify?k= ' + key , post = postdata , headers = headers )
# fh = open('c:\\test.txt', 'w')
# fh.write(html)
# fh.close()
return token
def getg ( ) :
return None
cookieJar = cookielib . LWPCookieJar ( )
try :
cookieJar . load ( " ./gsite.jwl " )
except :
pass
def performCaptcha ( sitename , cj , returnpage = True , captcharegex = ' data-sitekey= " (.*?) " ' , lang = " fr " , headers = None ) :
gcookieJar = getg ( )
sitepage = getUrl ( sitename , cookieJar = cj , headers = headers )
sitekey = re . findall ( captcharegex , sitepage )
token = " "
if len ( sitekey ) > = 1 :
# getUrl('https://www.google.com/', cookieJar=gcookieJar)
c = UnCaptchaReCaptcha ( )
token = c . processCaptcha ( sitekey [ 0 ] , lang , gcookieJar )
if returnpage :
# gcookieJar.save('./gsite.jwl');
headers = [ ( " User-Agent " , " Mozilla/5.0 (Windows NT 6.1; WOW64; rv:37.0) Gecko/20100101 Firefox/37.0 " ) ,
( " Referer " , sitename ) ]
sitepage = getUrl ( sitename , cookieJar = cj , post = urlEncode ( { " g-recaptcha-response " : token } ) , headers = headers )
if returnpage :
# fh = open('c:\\reussi.txt', 'w')
# fh.write(sitepage)
# fh.close()
return sitepage
else :
return token
# performCaptcha("http://www.livetv.tn/", cookieJar)