【问题标题】:Best way to locate this element in selenium?在硒中找到这个元素的最佳方法是什么?
【发布时间】:2012-03-21 18:32:30
【问题描述】:

例如,这里是部分来源:

<div id = "eg_1_2_3_0399483" style = "visibility: visible; display: block;">
    <iframe id = "default_23342522" src="http://example.com/random_string_skdfjgklsjklf" style = "height: 600px;">
...

<div id = "eg_238_2348927" style = "visibility: hidden; display: none;">
    <iframe ...

你看,源中有多个iframe,我真正想要定位的是&lt;iframe id = "default_23342522" src="http://example.com/random_string_skdfjgklsjklf" style = "height: 600px;"&gt;,但是idsrc在每次加载页面时都会不断变化,所以基本上我会先定位&lt;div id = "eg_1_2_3_0399483" style = "visibility: visible; display: block;"&gt; 然后去找它的子节点,问题是,你是怎么做到的?好吧我知道定位第一个&lt;div&gt;元素的方法是这样的:

element = browser.find_elements_by_xpath("//div[@style='visibility: visible; display: block;']")

然后呢?

或者关于如何定位上面的iframe 元素的一些更好的想法?

【问题讨论】:

  • CSS 样式属性非常脆弱,我不会使用它们来识别元素。最好使用来自具有不变 ID 或特定类组合的元素的路径。然后,你可以简单地做//path/to/div/iframe[1]

标签: python selenium webdriver


【解决方案1】:

试试这个:

element = browser.find_elements_by_xpath("//div[@style='visibility: visible; display: block;']/iframe[@style='height: 600px;']")

如果您每次只想要指定 div 中的第一个 iframe(如您的答案所示),请执行此操作

iframe=element[0]

如果你想提取 iframe 中的内容,那么你可以这样做:

iframe_content = iframe.text

定位指定 div 的第一个 iframe 的另一种方法是使用类似的函数,该函数返回一个项目而不是列表:

element = browser.find_element_by_xpath("//div[@style='visibility: visible; display: block;']/iframe[1]")

上面我们使用 find_element_by_xpath 而不是 find_elements_by_xpath 来定位指定 div 的第一个 iframe。请记住,我没有按样式指定 iframe(例如高度:600 像素)。但这也可以在这里以类似于我上面使用 find_elements_by_xpath 解释的方式完成。

【讨论】:

  • 非常感谢,伙计!我不知道你可以这样使用 xpath,很快就会开始学习一些 xpath!
  • 很高兴能帮到你!如果您愿意,请将我的答案标记为正确。 :)
猜你喜欢
  • 1970-01-01
  • 2019-10-22
  • 2016-09-18
  • 2012-04-23
  • 2012-05-22
  • 2010-10-14
  • 1970-01-01
  • 1970-01-01
  • 2014-05-12
相关资源
最近更新 更多