【问题标题】:Python with selenium: access iframe whose src is returned by javascript function带有 selenium 的 Python:访问其 src 由 javascript 函数返回的 iframe
【发布时间】:2016-10-21 23:07:02
【问题描述】:

我对 selenium 和 javascript 完全陌生。我正在处理的网页使用 javascript 进行某些身份验证并构造框架的 url。

代码看起来像:

<iframe id="main_contents"></iframe>
<script type="text/javascript">
var baseUrl = 'http://xxxxxxxxx.com/';
function init() {
    gadgets.io.makeRequest(baseUrl+"auth/", function(obj) {
        var iframe = document.getElementById("main_contents");
        if (obj.data.status == 'OK') {
            iframe.src = baseUrl+"?xx="+obj.data.xx;
            ...
        }
        ...
    }, params);
}

我尝试使用find_element_by_tag_name 直接定位框架,但它的 src 当然是空的。我不知道如何切换到这个框架。有人可以建议吗?非常感谢!!

【问题讨论】:

  • 问题已解决

标签: javascript python selenium iframe


【解决方案1】:

您可以使用id 属性值以及以下属性值切换到此iframe:-

driver.switch_to_frame("main_contents")

或者如果这个iframe 需要一些时间来加载到DOM,你应该尝试使用Explicit WaitsWebDriverWait 进行切换,以等待iframe 可以切换,如下所示:-

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

WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it(("main_contents")))

【讨论】:

  • 感谢您的评论,但我已经尝试过了,它不起作用。没有错误,但会话没有切换到框架。例如,我测试过
  • frame = browser.find_element_by_id("main_contents") print (frame.get_attribute("src")) 没有输出
  • @Seraph 如果没有错误,你怎么知道它没有切换到 iframe?在这个 iframe 中切换后你找到了一些元素吗?你想切换 iframe 元素还是想把它作为 src 属性值??
  • 并确保 iframe 中也存在 src 属性值
  • 非常感谢!我终于想通了,会话将首先跳转到一个不可见的帧 A 并立即重定向到帧 B。 A 和 B 的 src 非常相似,我不知道框架 A 的存在。我认为硒在框架 B 中,但实际上它卡在框架 A 上。
猜你喜欢
  • 2014-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-11
  • 2021-11-01
  • 2019-06-20
  • 1970-01-01
相关资源
最近更新 更多