【问题标题】:Can't click on this button selenium webdriver python无法单击此按钮 selenium webdriver python
【发布时间】:2020-01-16 15:04:52
【问题描述】:

我试图从几个小时内点击这个按钮,但没办法。 我试图以各种方式找到它 XPATH exc .. 该按钮位于 iframe“iframeGioco”内,我也切换到它,但仍然没有。

请帮帮我。

这是html源代码:

我需要单击突出显示的 div 是一个按钮或在下一个 div 中包含“确定”。

我用 selenium 做了很多脚本,但是这个按钮真的很难点击。 我会链接该页面,但我不能,因为您应该有一个 eurobet 帐户才能看到此页面。

谢谢。

我的尝试示例:

browser.switch_to_frame(browser.find_element(By.XPATH,'//iframe[@id="iframeGioco"]'))

browser.find_element(By.XPATH,"//div[@class='rounded-corners no-highlight ftl-error-buttonise absolute-horz-center']").click()

注意:奇怪的是,我没有收到像“NOSUCHELEMENT”这样的错误,我什么也没有,所以我认为元素已找到,但由于某些原因,点击不起作用。

要单击的按钮是 IMG 中的“确定”按钮。

【问题讨论】:

  • 您收到的错误信息是什么?
  • 奇怪的是我没有收到任何错误,但是点击不起作用。所以我认为找到了元素
  • 请尝试用JS点击--->。 driver.execute_script(“arguments[0].click();”, webElement)。这将清除该元素是否正在接收点击。无需等待即可尝试。否则它可能会在等待时失败
  • 谢谢你,我现在就试试,让你知道,感谢你的帮助
  • 伙计们,我不知道如何向您致意,它与 javascript.execute_script() 一起使用,我需要另外 2 个代表来支持您的答案:(,我能为您做什么?

标签: python selenium


【解决方案1】:

点击 iframe 内的 OK div 元素

诱导WebDriverWait() 和frame_to_be_available_and_switch_to_it()

诱导WebDriverWait() 和element_to_be_clickable() 并关注Xpath

WebDriverWait(browser,20).until(EC.frame_to_be_available_and_switch_to_it((By.ID,"iframeGioco")))
WebDriverWait(browser,20).until(EC.element_to_be_clickable((By.XPATH,"//div[text()='OK']"))).click()

或

WebDriverWait(browser,20).until(EC.frame_to_be_available_and_switch_to_it((By.ID,"iframeGioco")))
WebDriverWait(browser,20).until(EC.element_to_be_clickable((By.XPATH,"//div[contains(.,'OK')]"))).click()

您需要添加以下库。

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

更新

诱导Javascript执行器点击。

WebDriverWait(browser,20).until(EC.frame_to_be_available_and_switch_to_it((By.ID,"iframeGioco")))
browser.execute_script("arguments[0].click();", WebDriverWait(browser,20).until(EC.presence_of_element_located((By.XPATH,"//div[contains(.,'OK')]"))))

【讨论】:

  • 我得到“TimeoutException”
  • @alessiaresto : 你也试过第二个吗?在 OR 下
  • 如果两个样本都抛出了TimeoutException,您也可以尝试在presence_of_element_located 上调用WebDriverWait 而不是element_to_be_clickable——这可能会有所不同。
  • 它可以正常工作,也可以 EC.tobeclickable,但该元素没有被有效地点击。
  • @alessiaresto : 你能试试更新一个,让我知道状态
【解决方案2】:

您可以尝试使用 JS 进行单击,因为它的工作方式不同。

Webdriver 像我们/用户手动一样工作。如果元素未启用,即使用户可以在页面上看到它也不会点击,而 JS 是客户端脚本并且它直接与浏览器对话(在内置解释器的帮助下)

请尝试以下代码。

driver.execute_script("arguments[0].click();", webElement)

【讨论】:

  • 你明白为什么用 JS 可以工作而标准的“点击”不能吗?
  • @Nuclearz 原因是 webdriver 像我们/用户手动一样工作。如果元素未启用,即使用户可以在页面上看到它也不会点击,而 JS 是客户端脚本并且它直接与浏览器对话(在内置解释器的帮助下)
  • @Muzzamil 对 webdriver work vs JSclick 的评论,如果附加到答案中,将使其成为一个很好的答案,并对社区有所帮助。
  • @DebanjanB 感谢您的建议。我已将其添加到我的答案中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-17
  • 2016-03-02
  • 2014-01-04
  • 1970-01-01
  • 1970-01-01
  • 2016-05-31
  • 2016-11-26
相关资源
最近更新 更多