0

所以,我试图用 Selenium 登录这个网站:

https://carrinho.pontofrio.com.br/Checkout?ReturnUrl=%2fSite%2fMeusPedidos.aspx#login

我正在使用反验证码,这是我的登录代码:

my_driver = webdriver.Chrome(executable_path=chrome_path)
wait = WebDriverWait(my_driver, 20)


#Realizar o Login
def login():
    my_driver.get(url)
    time.sleep(4)
    my_driver.find_element_by_id('Email').send_keys(usuario)
    my_driver.find_element_by_id('Senha').send_keys(senha)
    my_driver.find_element_by_id('Senha').send_keys(Keys.ENTER)
    time.sleep(1)
    solver = recaptchaV2Proxyless()
    solver.set_verbose(1)
    solver.set_key("")
    solver.set_website_url('https://carrinho.pontofrio.com.br/Checkout?ReturnUrl=%2fSite%2fMeusPedidos.aspx#login')
    solver.set_website_key("6LfeX6kZAAAAAIhuSyQ1XRwZdOS26O-r4UJbW3y1")
    # solver.set_data_s('"data-s" token from Google Search results "protection"')
    g_response = solver.solve_and_return_solution()
    if g_response != 0:
        print("g-response: " + g_response)
    else:
        print("task finished with error " + solver.error_code)
    time.sleep(1)
    my_driver.execute_script('document.getElementById("g-recaptcha-response").innerHTML = "%s"' % g_response)
    time.sleep(1)
    my_driver.execute_script(f"callbackCaptcha('{g_response}');")
login()

网站密钥正确,但网站不接受我的验证码回复。因此,我尝试使用开发人员工具检查登录过程是如何发生的,它是这样的:

回调函数发生在我不知道它调用网站的函数之后: https ://www.google.com/recaptcha/api2/userverify?k=6LfeX6kZAAAAAIhuSyQ1XRwZdOS26O-r4UJbW3y1

回调方法之前的 Post 方法

而且我无法找到模拟这种 post 方法的方法,因为 Selenium 不执行 post 方法。

无论如何,我可以在运行页面时收听所有 Javascript 事件(调用的代码)吗?

任何帮助将不胜感激,谢谢!

我能够使用以下代码解决验证问题:

options.add_argument('--disable-blink-features=AutomationControlled')

但是反验证码仍然给我一个错误的答案:(

4

2 回答 2

0

所以是的,我发现有两个问题,第一个是验证,我用这个选项解决了这个问题:

options.add_argument('--disable-blink-features=AutomationControlled')

另一个是当我单击登录按钮时网站正在生成一个新令牌。所以我决定在请求登录之前先解决验证码,并使用回调验证码来请求登录。

于 2021-03-04T20:07:26.773 回答
0

我解决了问题

我终于设法自己解决了这个问题。如果其他人遇到类似问题,这是我的解决方案:

  • 打开控制台并执行以下命令:___grecaptcha_cfg.clients
  • 找到有回调函数的路径,在我的例子中是 ___grecaptcha_cfg.clients[0].OO
  • 使用以下代码: driver.execute_script(f"___grecaptcha_cfg.clients[0].OOcallback('{new_token}')") (记得相应地更改路径)

本文将帮助您找到您的 recaptcha 站点的 ___ grecaptcha_cfg.clients

driver.execute_script('document.getElementById("g-recaptcha-response").innerHTML = "{}";'.format(g_response))   
driver.execute_script(f"___grecaptcha_cfg.clients[0].O.O.callback('{g_response}')")
于 2021-08-23T01:41:28.100 回答