【问题标题】:Python selenium can not find the click buttonPython selenium 找不到点击按钮
【发布时间】:2019-07-20 18:39:09
【问题描述】:

我正在尝试使用此代码单击 javascript 按钮。在第一帧中您可以找到内容,但是当我将自己置于第二个 html 中时,没有菜单。

如何点击按钮?

代码试验:

driver.switch_to.default_content()
driver.find_element_by_tag_name('frameset')
driver.switch_to_frame(1)
driver.find_element_by_tag_name('html')

print(driver.page_source)

driver.find_element_by_tag_name('frameset')
driver.switch_to_frame(1)
driver.find_element_by_tag_name('html')    

print(driver.page_source)

<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
    
    </head><frameset cols="170px,100%" framespacing="0" border="0" frameborder="0">
                    <frame scrolling="no" name="menu" id="menu" src="menu.jsp" />
                    <frame scrolling="yes" name="main" id="main" src="main.jsp" />
    </frameset>

【问题讨论】:

标签: python selenium xpath iframe webdriverwait


【解决方案1】:

由于所需元素位于多个 &lt;iframe&gt;s 中,因此您必须:

  • 诱导 WebDriverWait 使父 框架可用并切换到它
  • 诱导 WebDriverWait 使子 框架可用并切换到它
  • 诱导 WebDriverWait 使所需的元素可点击
  • 您可以使用以下解决方案:

    • 代码块:

      from selenium import webdriver
      from selenium.webdriver.support.ui import WebDriverWait
      from selenium.webdriver.support import expected_conditions as EC
      from selenium.webdriver.common.by import By
      
      WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//frame[contains(@src, 'login')]")))
      WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//frame[@id='menu' and @name='menu'][contains(@src, 'menu')]")))
      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.PARTIAL_LINK_TEXT, "squeda Avanzada"))).click()
      

在这里你可以找到Ways to deal with #document under iframe的相关讨论

【讨论】:

  • 您的定位器很糟糕,正如我之前提到的,Selenium 贡献者多次建议尽可能避免使用 XPath。您的前两个定位器都不需要是 XPath,而对于第二个,除了*_by_id('menu') 之外没有理由使用任何东西。它更简单,支持更好,HTML 中没有任何内容表明它不起作用。
猜你喜欢
  • 1970-01-01
  • 2014-02-16
  • 2016-05-08
  • 2021-09-14
  • 2018-05-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多