Selenium driver.switch_to.iframe()失败,是什么原因?

skyshine · 2021年01月31日 · 最后由 lyyyyyyy 回复于 2021年04月16日 · 3046 次阅读
<div class="one">       //1号
    <iframe src="https://www.XXX.com/../X.html?a=b&c=d width="400" height="600">   //2号
          #document    //3号
             <html>
                  .......
              </html>
    </iframe>
</div>

我想 switch_to.iframe 到 iframe。
但它没 id 也没有 class .
我就先定位 到 1 号 的 div
iframe_div = d.find_elements_by_css_selector('one')
然后在定位 到 iframe 2 号位

iframe_self = d.find_element_by_tag_name('iframe')

最后
iframe = driver.switch_to.iframe(iframe_self)
发现切换不过去,iframe 是空。
是为什么呢?

#document 里面就是 iframe 打开的页面。
在当前页上打开一个小窗口

共收到 14 条回复 时间 点赞

是 frame 不是 iframe 啊

2楼 已删除
DOGGY123456 回复

网页源码上看,是 iframe 啊


iframe_div = d.find_elements_by_css_selector('.one')吧,少了个.

skyshine 回复

在 pycharm 里打出 switch_to.后自动显示可以用的 function,只有 switch_to.frame 没有 switch_to.iframe 的。

DOGGY123456 回复


我只是贴子里打错了。
代码里没错,就是 d.switch_to.frame

SoloXu 回复

贴子里只是随手打的,
不是因为类名错误。

skyshine 回复

那应该是定位的问题了,给你个链接,里面有验证定位的办法,可以试一下https://www.cnblogs.com/qican/p/13528741.html

DOGGY123456 回复

试过了,定位到 1 号位置没问题。而这个 div 下面只有一个 iframe。用 tag_name 也能找到。
但 switch 时就不行。

我试了 126。com 的。也是一样的结果 。比如下面这样

div = d.find_element_by_css_selector('#loginDiv')
frame = div.find_element_by_tag_name('iframe')
switch_frame = d.switch_to.frame(frame)

www.126.com 和我遇到的情况一样。
可以定位到 loginDiv, loginDiv 下面只有一个 iframe,用 tag_name 也能找到。
但 switch_to.frame 时,就没有结果。
switch_frame 是 None

(虽然 126 这个 iframe 有 id 但它会变。而且我的环境里的 iframe 是没有 id 的,所以忽略了)

用 xpath .//iframe[contains(@src,'https://www.XXX.com/../X.html')]

fiskeryang 回复

没明白

fiskeryang 回复

我在试试

谢谢几位回复,我弄明白了。
我最开始的定位没错,swicth 也没错。iframe 结果是 none 是正常的。
但其实已经 switch 过去了。
只要正常操作就可以了

driver.switch_to.iframe(0),跳转到第一个 frame/iframe

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册