【问题标题】:How to send the geetest tokens once you get the solutions from anti-captcha using python and Selenium?使用 python 和 Selenium 从反验证码获得解决方案后,如何发送 geetest 令牌?
【发布时间】:2022-11-11 16:21:49
【问题描述】:

我正在尝试自动访问具有 Geetest V3 验证码的网站。 我用 Selenium 编写了一个 python 脚本,它获取所需的“gt”和“challenge”令牌并将其发送给工作人员来解决它。 一旦我得到解决方案,它是一个结构如下的 JSON:

{
"challenge": "xxxxxxxxx",
"validate": "xxxxxxxxxxx",
"seccode": "xxxxxxxxxxxxx|jordan"
}

我不知道如何将这些参数发送到网页并到达实际主页。

值得一提的是,一旦页面加载了我在另一篇文章中找到的 2 行代码,我已经阻止了会使令牌过期的外部 URL:

driver.execute_cdp_cmd('Network.setBlockedURLs', {"urls": ["api.geetest.com/get.php"]})
driver.execute_cdp_cmd('Network.enable', {})

我发现这两行也阻止了 geetest HTML 表单的加载,所以我不能用“find_element”方法填充它,但似乎有必要阻止网站刷新“挑战”令牌。

from anticaptchaofficial.geetestproxyless import *
from selenium import webdriver
from selenium.webdriver.common.by import By
import telegram
import re

CLEANR = re.compile('<.*?>')

def cleanhtml(raw_html):
    cleantext = re.sub(CLEANR, '', raw_html)
    return cleantext


anticaptcha_api_key = "xxxxxxxxxxxxxxxx"

driver = webdriver.Chrome('/usr/lib/chromium-browser/chromedriver')
url = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
driver.execute_cdp_cmd('Network.setBlockedURLs', {"urls": ["api.geetest.com/get.php"]})
driver.execute_cdp_cmd('Network.enable', {})
page = driver.get(url)

html_key = driver.find_element(By.XPATH, "//script[contains(text(), 'gt:')]").get_attribute('outerHTML')
clean_key = cleanhtml(html_key)
print(clean_key)
clean_key = clean_key.split()
list_of_keys = []
for i in clean_key:
    if len(i) == 35:
        i = i.replace('"', "")
        i = i.replace(',', "")
        list_of_keys.append(i)
        
print(list_of_keys)

GT_KEY = list_of_keys[0]
CHALLENGE_KEY = list_of_keys[1]

print(CHALLENGE_KEY)

solver = geetestProxyless()
solver.set_verbose(1)
solver.set_key(anticaptcha_api_key)
solver.set_website_url(url)
solver.set_gt_key(GT_KEY)
solver.set_challenge_key(CHALLENGE_KEY)

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)

challenge = g_response["challenge"]
validate = g_response["validate"]
seccode = g_response["seccode"]

print(challenge, validate, seccode)

# WHAT NOW? HOW TO PASS challenger, validate and seccode to the website?

【问题讨论】:

    标签: python selenium captcha


    【解决方案1】:

    我遇到了同样的问题,您找到解决方案了吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-15
      • 2020-12-01
      • 2016-09-26
      • 2013-09-11
      • 2018-09-04
      相关资源
      最近更新 更多