在iframe标记内获取Body的元素的xpath或CSS

时间:2015-04-15 14:03:13

标签: selenium xpath css-selectors

给出以下html标记结构:

<body>
  <div id=Body>
   <div>
    <iframe>//Data within iframe is generated dynamically
     <html>
      <head></head>
       <body>
        <div id="abcdef">
         <div></div>
         <div></div>
         <div></div>
       </body>
     </html>
    </iframe>
  </div>
 <body>

我想访问<div id="abcdef">的xpath和CSS Selector,但我无法,因为它将内部<html>标记称为不同的框架。

2 个答案:

答案 0 :(得分:1)

使用

<body>
    <div id="Body">
    <iframe>//Data within iframe is generated dynamically
        <html>
            <head></head>
            <body>
                <div id="abcdef">
                    <div></div>
                    <div></div>
                    <div></div>
                </div>
            </body>
        </html>
    </iframe>
    </div>
</body>

我能够用:

成功选择该元素
//iframe//div[@id = 'abcdef']

在此处试试:http://www.freeformatter.com/xpath-tester.html

但是,由于iframe安全限制,这在DOM中不起作用。此xpath是正确的,但您可以使用

在chrome dev控制台中进行测试
$x("//iframe//div[@id = 'abcdef']")

并且看到你没有得到任何结果。在处理HTML文档时,您的浏览器会限制您对iframe的访问,因此您需要实际抓取iframe,阅读html,然后搜索该html。据我所知,您无法使用xpath或css选择器,而无法获取iframe的内容,然后将其作为自己的文档/元素进行搜索。

答案 1 :(得分:1)

像下面那样抓住iframe,

driver.switch_to.frame(driver.find_element_by_id(&#39; frameid&#39;));

要参考更多方法, 这是a link

切换到框架,可让您直接访问所有元素。

以上示例xpath将是: // * [@ id中=&#39; ABCDEF&#39;]