【问题标题】:Issue with Iframe Selenium [Python]Iframe Selenium [Python] 的问题
【发布时间】:2021-09-10 12:13:42
【问题描述】:

我很难将 Selenium 与 iframe 一起使用。

所以基本上网站是这样构建的:

  <tbody>
      <tr>
        <td>
          <iframe>
            <html>
          </iframe>
        </td>
      </tr>
  </tbody>
</table>
<table>

我想访问 html 标记并在那里使用发送键,以便自动填充显示的表单。 我尝试使用 Xpath,但它不起作用。经过大约 3 天的反复试验并到处寻找我找不到解决方案后,我得到如下错误: frame.send_keys(Keys.TAB) AttributeError: 'list' 对象没有属性 'send_keys'

我什至尝试发送 TAB 键来选择我想要的内容,但没有任何效果。

frame = driver.find_elements_by_xpath(
        '/html/body/div[11]/div/div/form/div[1]/div/div/form/div[1]/div[2]/table/tbody/tr[2]/td')
    time.sleep(1)
    time.sleep(1)
    frame.send_keys(Keys.TAB)
    frame.send_keys("hello")

如果有人有解决方案,我将非常感激。

最好的

【问题讨论】:

    标签: python html selenium iframe


    【解决方案1】:

    我建议你像这样切换到框架(带有显式等待):

    wait = WebDriverWait(driver, 10)
    wait.until(EC.frame_to_be_available_and_switch_to_it((By.XPATH, "iframe xpath")))
    

    进口:

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

    切换后,您可以像这样发送密钥:

    wait.until(EC.element_to_be_clickable((By.XPATH, "form xpath "))).send_keys("some string")
    

    完成后,您应该像这样切换到default content

    driver.switch_to.default_content()
    

    这基本上是切换到 iframe,现在来到你的代码

    您使用了find_elements_by_xpath,它将返回一个列表,在您的情况下,您将frame 作为列表的名称。

    在python列表中,我们不能做send_keys,因为Selenium支持send_keys

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-15
      • 2020-10-06
      • 1970-01-01
      • 1970-01-01
      • 2021-11-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多