Como encontrar a função de retorno de chamada de cada versão do reCaptcha
Cada site é diferente; se nenhum dos métodos a seguir puder resolver o problema.
Por favor, pesquise mais por conta própria.
Após obter o valor gRecaptchaResponse
reconhecido com sucesso por meio da API, se você estiver usando software de simulação, como o Selenium, precisará executar uma função de retorno de chamada para informar à página da web que reconhecemos com sucesso. Vamos aprender como encontrar essa função:
Nota: Em alguns casos, realmente não há uma função de retorno de chamada. Nesse caso, você pode atribuir valores diretamente ao contêiner g-recaptcha-response
e enviar o formulário.
- Método 1: Pesquisar através do Elemento do console
- Método 2: Aplicável à série reCaptcha V3
- Método 3: Pesquisar pelo Console
- Método 4: Pesquisar por função de busca automática
Método 1: Pesquisar através do Elemento do console
Abra a página exibida, pressione F12 para entrar no console, pressione Ctrl+F em Elementos para pesquisar, procure a palavra-chave: data-callback
Como você pode ver, nossa função de retorno de chamada aqui é onSuccess
, e então só precisamos executar essa função no selenium
Se você não conseguir encontrar, pode estar confuso ou em outras circunstâncias, você pode tentar outros métodos
driver. execute_script(f'onSuccess("{gRecaptchaResponse}")')
Método 2: Aplicável à série reCaptcha V3
Semelhante ao método 1, pesquise palavras-chave: grecaptcha.render
Encontre um código semelhante, onde callback é a função de retorno de chamada
grecaptcha.render('example', {
'sitekey': 'algumaChaveDoSite',
'callback': minhaFuncaoDeRetorno,
'theme': 'dark'
});
Método 3: Pesquisar pelo Console
Pressione F12 para entrar no console e digite ___grecaptcha_cfg.clients
, se ocorrer um erro, a página da web não carregou o reCaptcha
Normalmente, existem muitos nós, precisamos prestar atenção à diferença, aqui onSuccess
é a função de retorno de chamada que estamos procurando
Método 4: Encontrar por função de busca automática
Se for difícil executar os métodos acima, você pode tentar encontrar definindo uma função de busca automática
Pressione F12 para entrar no console e insira a seguinte função definida automaticamente findRecaptchaClients()
function findRecaptchaClients() {
// eslint-disable-next-line camelcase
if (typeof (___grecaptcha_cfg) !== 'undefined') {
// eslint-disable-next-line camelcase, no-undef
return Object.entries(___grecaptcha_cfg.clients).map(([cid, client]) => {
const data = { id: cid, version: cid >= 10000 ? 'V3' : 'V2' }
const objects = Object.entries(client).filter(([_, value]) => value && typeof value === 'object')
objects.forEach(([toplevelKey, toplevel]) => {
const found = Object.entries(toplevel).find(([_, value]) => (
value && typeof value === 'object' && 'sitekey' in value && 'size' in value
))
if (typeof toplevel === 'object' && toplevel instanceof HTMLElement && toplevel['tagName'] === 'DIV') {
data.pageurl = toplevel.baseURI
}
if (found) {
const [sublevelKey, sublevel] = found
data.sitekey = sublevel.sitekey
const callbackKey = data.version === 'V2' ? 'callback' : 'promise-callback'
const callback = sublevel[callbackKey]
if (!callback) {
data.callback = null
data.function = null
} else {
data.function = callback
const keys = [cid, toplevelKey, sublevelKey, callbackKey].map((key) => `['${key}']`).join('')
data.callback = `___grecaptcha_cfg.clients${keys}`
}
}
})
return data
})
}
return []
}
findRecaptchaClients && findRecaptchaClients()
Em seguida, execute esta função findRecaptchaClients()
no console
para encontrar a função correspondente
[
{
"id": "0",
"version": "V2",
"sitekey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-",
"function": "onSuccess",
"callback": "___grecaptcha_cfg.clients['0']['l']['l']['callback']",
"pageurl": "https://www.google.com/recaptcha/api2/demo"
}
]
Como chamar a função anônima reCaptcha?
Nota: Às vezes, a função de retorno de chamada encontrada é um nome de função, como onSuccess
mencionado acima, basta onSuccess(gRecaptchaResponse)
ao chamar, mas às vezes é encontrada como uma função anôn
ima, o que significa que não há nome de função, como a seguinte:
Para esse tipo de função anônima, só precisamos executá-la de acordo com o caminho completo que acabamos de encontrar, e o efeito é o mesmo, por exemplo:
___grecaptcha_cfg.clients.xxxxxxxxx.xxxxx.xxxxx.callback(gRecaptchaResponse)
Vamos dar um exemplo, pegue este site como exemplo, digite ___grecaptcha_cfg.clients
para expandir a pesquisa, você pode ver a função de retorno de chamada aqui promise-callback
é uma função anônima f(token)
Podemos clicar com o botão direito nela e clicar em Copiar caminho da propriedade
para copiar esse caminho de nó
[100000].l.l["promise-callback"]("gRecaptchaResponse")
Adicione o ___grecaptcha_cfg.clients
inserido anteriormente e você pode obter o caminho completo dessa função
___grecaptcha_cfg.clients[100000].l.l["promise-callback"]
Finalmente, é o mesmo método de execução mencionado acima, basta executá-lo como uma função normal
___grecaptcha_cfg.clients[100000].l.l["promise-callback"](gRecaptchaResponse)