Selenium WebDriver - 无法进入动态ID为

时间:2018-01-01 16:34:44

标签: python html selenium iframe selenium-webdriver

使用Selenium,我尝试在iframe中找到一个元素。

以下是HTML代码:

<iframe id="DWT54_content_ifr" src='javascript:""' frameborder="0" 
allowtransparency="true" title="Texte richeFaites ALT-F10 pour accéder à la 
barre d'outils. Faites ALT-0 pour accéder à l'aide" style="width: 100%; 
height: 0px; display: block;">

<body id="tinymce" class="mceContentBody " 
onload="window.parent.tinyMCE.get('DWT54_content').onLoad.dispatch();" 
contenteditable="true" dir="LTR" style="font-family: &quot;times new 
roman&quot;, &quot;new york&quot;, times, serif; font-size: 14pt; color: 
rgb(0, 0, 0);"><div><br></div></body></iframe>

这是我进入iframe的Python代码:

time.sleep(3)
driver.switch_to_frame(driver.find_element_by_id("DWT54_content_ifr"))

I also tried these codes:
driver.switch_to_frame("DWT54_content_ifr")

and

driver.switch_to_frame(driver.find_element_by_xpath("//iframe[@id='DWT54_content_ifr']"))

但每次我都得到同样的错误:“无法找到元素”。

更新

我设法使用以下代码进入iframe:

driver.switch_to_frame(3)

但这不太方便,因为我必须手动计算页面中iframe的数量......

请帮忙吗?

感谢。

1 个答案:

答案 0 :(得分:0)

根据HTML您已共享id属性的值,即 DWT54 对我来说看起来很动态。因此,我们必须构建一个动态cssxpath来标识frame,而不是driver.switch_to_frame(driver.find_element_by_id(frame_reference))我们必须使用 driver.switch_to.frame(frame_reference) 如下:

driver.switch_to.frame(driver.find_element_by_xpath("//iframe[contains(@id,'_content_ifr') and contains(@title,'Texte richeFaites')]"))