Ahora que he refrescado un poco el proceso, ya recuerdo por qué lo mandé a tomar por...

Resulta que el método que se usa para resolver el captcha sin imágenes en el navegador es muy difícil de replicar en código, ya que en uno de los pasos se necesita un valor llamado bgdata que se saca resolviendo un código en javascript que no hay manera de meterle mano (yo ni siquiera sé donde está, y seguramente quien lo haya hecho se ha montado una web premium anti captcha xD)
Por lo tanto la única manera es resolviendo el captcha de imágenes. El problema es que hay que montar un sistema de botones donde el usuario pinche sobre el trozo/trozos de imagen correcta, y puede ser que haya que hacerlo varias veces hasta que el recaptcha se quede tranquilo xD
Bien, este es el código en sucio que tenía, ligeramente modificado para adaptarlo a pordede. A este código le faltan varias partes, porque no llegué tan lejos, pero como verás no es tan sencillo como encadenar dos o tres llamadas a diferentes urls, ojalá
Código: Seleccionar todo
import base64, time
from core import httptools
url_login = "http://www.pordede.com/site/login"
data = httptools.downloadpage(url_origin).data
api_js = httptools.downloadpage("http://www.google.com/recaptcha/api.js?hl=es").data
a = scrapertools.find_single_match(api_js, 'po.src = \'(.*?)\';')
version = a.split("/")[5]
key = scrapertools.find_single_match(data, 'data-sitekey="([^"]+)"')
co = base64.b64encode('http://www.pordede.com:80').replace("=", ".")
headers= {"User-Agent": "Mozilla/5.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": 'es-ES,es;q=0.8,en-US;q=0.5,en;q=0.3'}
params = "k=%s&hl=es&v=%s&co=%s&cb=418nrq4cd5m&size=normal" % (key, version, co)
url = "https://www.google.com/recaptcha/api2/anchor?%s" % params
data = httptools.downloadpage(url, headers=headers, replace_headers=True).data
token = scrapertools.find_single_match(data, 'id="recaptcha-token" value="([^"]+)">')
params = "k=%s&hl=es&v=%s&bg=!A&c=%s" % (key, version, token)
headers["Referer"] = url
data = httptools.downloadpage("https://www.google.com/recaptcha/api2/frame?%s" % params, headers=headers, replace_headers=True).data
data = data.decode("unicode-escape")
token = scrapertools.find_single_match(data, '"rresp","([^"]+)"')
params2 = "k=%s&c=%s" % (key, token)
url_imagen = "https://www.google.com/recaptcha/api2/payload?%s" % params2
# Esta es la url de la imagen (puede haber varias)
# Desde aqui encapsular con un while
# captcha_response = resolver_captcha()
# Ejemplo de respuesta: [[5,9]] - Recuadro 5 y 9
# response = base64.b64encode('{"response":"%s" % captcha_response}')
url = "https://www.google.com/recaptcha/api2/userverify?k=%s" % key
time1 = int(round(time.time() * 1000)) - int(round(time.time() * 1000))
post = "v=%s&c=%s&response=%s&t=%s&ct=%s&bg=!A" % (version, token, response, time1, time1)
headers["Referer"] = "https://www.google.com/recaptcha/api2/frame?k=%s&hl=es&v=%s" % (key, version)
data = httptools.downloadpage(url, post, headers=headers, replace_headers=True).data
# Si en este data se devuelve un string bgdata, hay que volver a sacar una nueva imagen
result = scrapertools.find_single_match(data, '"uvresp","([^"]+)"')
post = "LoginForm[username]="+config.get_setting("pordedeuser", "pordede")+"&LoginForm[password]="+config.get_setting("pordedepassword", "pordede")
post += "&LoginForm[verifyCode]=%s&g-recaptcha-response=%s" % (result, result)
data = httptools.downloadpage(url_login, post, add_referer=True)
No sé si te sirve porque como ves es bastante relioso y está "organizado" a mi manera. Sobre tus preguntas, el parámetro v se extra de la api de recaptcha y lo que se debe capturar para enviárselo a la página al hacer el login es la variable result que pongo en el código, pero claro, si se intenta sacar eso sin pasar el captcha de imágenes, ese resultado no es válido.
Por mi parte yo intentaré mirarlo cuando tenga tiempo pero no sé si la cosa saldrá bien...