【问题标题】:Click on dynamic buttons does not work (python)单击动态按钮不起作用(python)
【发布时间】:2019-12-01 23:58:18
【问题描述】:

我必须按正确的顺序单击某些按钮来输入密码(数字)。问题是每个按钮都有一对值(例如:“1 ou 4”、“3 ou 8”),每次用户进入页面时,这些值都会发生变化。

我实现了一个 for 循环,将每个元素(按钮)的文本与字符串列表中包含的密码匹配。问题是它在前两天工作,但现在它只点击第三对按钮。在这种情况下,按钮“1 ou 4”和删除按钮。

请注意,“clave”是一个包含密码的字符串。

a = dv.find_elements_by_id('campoTeclado')
index=0
lista_acceso = []
for elem in clave:
    lista_acceso.append(elem)
    for i in a: 
        texto = i.text.replace(' ou ', '')
        time.sleep(2)
        if lista_acceso[index] in texto:
            print(lista_acceso[index]+' '+texto)
            i.click()
            time.sleep(2)
    index +=1

这里是 HTML:

<div class="teclado clearfix">
<div class="teclas clearfix">
        <a href="javascript:;" id="campoTeclado" rel="tecla_A" class="tecla left" role="button" tabindex="0">6 ou 7</a>
        <a href="javascript:;" id="campoTeclado" rel="tecla_C" class="tecla left" role="button" tabindex="0">3 ou 9</a>
        <a href="javascript:;" id="campoTeclado" rel="tecla_K" class="tecla left" role="button" tabindex="0">1 ou 4</a>
        <a href="javascript:;" id="campoTeclado" rel="tecla_F" class="tecla left" role="button" tabindex="0">0 ou 5</a>
        <a href="javascript:;" id="campoTeclado" rel="tecla_G" class="tecla left" role="button" tabindex="0">2 ou 8</a>
         <a href="javascript:;" aria-label="apagar todo o campo de senha eletrônica" class="tecla icon left" id="btnApagar" rel="teclaLimpar" role="button" tabindex="0"><span class="icon-tecla-voltar">Apagar</span></a>
</div>
</div>

上面的代码没有出现任何错误,它以正确的顺序打印出与密码中每个数字匹配的每个元素的正确文本。而且它也不会在 click() 行中显示任何错误。

然后,我添加了显式等待。结果,我可以确认这些元素是可点击和可见的,但没有被选中,正如下面代码的结果所示。

a = dv.find_elements_by_id('campoTeclado')
index=0
lista_acceso = []
for elem in clave:
    lista_acceso.append(elem)
    for i in a: 
        texto = i.text.replace(' ou ', '')
        time.sleep(2)
        if lista_acceso[index] in texto:
            try:
                WebDriverWait(dv, 5).until(EC.element_to_be_selected((i)))
                print(lista_acceso[index]+' '+texto)
                time.sleep(2)
                i.click()
            except TimeoutException:
                print("Nope!")
    index +=1

此代码在每个循环中打印出 TimeoutException 消息。

如何选择并点击正确的元素?

【问题讨论】:

  • 您如何确认该元素可见且可点击?我认为你应该尝试 - WebDriverWait(dv, 5).until(EC.element_to_be_clickable(i))
  • 因为我使用了“EC.element_to_be_clickable”。

标签: python html selenium button


【解决方案1】:

我终于通过将 chrome 窗口缩放更改为 100% 解决了这个问题。我读过很多人对类似问题的描述。其中一位通过将缩放调整为 100% 解决了这个问题。所以我做到了,现在代码可以工作了。我讨厌这种情况...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-18
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    相关资源
    最近更新 更多