等待在 selenium python 中加载 `grecaptcha` 变量

问题描述 投票:0回答:1

我正在使用 selenium 在网站上自动提交表单。有时,由于这个错误,我的表单提交失败。

0.62d2e676.js:1 Uncaught ReferenceError: grecaptcha is not defined
    at Object.reply_chat_form_submit (6.b0af483c.js:1:22012)
    ...

这个变量

grecaptcha
通常由Google reCAPTCHA 库定义,用于防止自动提交表单。所以,我想要像
WebdriverWait
expected_conditions
这样的东西来检查该变量是否已加载到网页中。我敢肯定,熟悉网络应用程序中 reCAPTCHA 库结构的任何人都能够分辨出该变量的预期位置。

javascript python selenium-webdriver recaptcha captcha
1个回答
0
投票

我想出了一个解决方案。我制作了自己定制的预期条件对象,可与硒一起使用。

class JsVariableExists(object):
    """Custom-made expected condition to use with selenium"""
    def __init__(self, variable):
        self.variable = variable

    def __call__(self, driver):
        return driver.execute_script(f"return typeof {self.variable} !== 'undefined';")

这个预期条件可以如下使用:

WebDriverWait(driver, 20).until(JsVariableExists("grecaptcha"))

这里的

grecaptcha
是我在尝试提交表单之前想要存在的变量名称。

细节

例如,如果您在浏览器的开发工具的 javascript 控制台中运行

typeof abcd
,您会看到这将返回
'undefined'
。但是,如果您使用
var abc = "haha"
在控制台中创建变量,则
typeof abcd
将返回
'string'
.

© www.soinside.com 2019 - 2024. All rights reserved.