2

我需要在某个数据库上运行数千次搜索,并且我正在使用 Python 和 Selenium WebDriver 来自动化它。问题是,包含搜索结果的框架有一个动态生成的名称。该名称始终以相同的方式开头(例如“results_frame”),然后是一堆每次都会更改的数字(例如“results_frame1298120910290”)。因此,基于几个小时的谷歌搜索,我尝试使用 xpath:

framename = driver.find_elements_by_xpath("//frame[contains(@name, 'results_frame')]")
driver.switch_to_frame(framename)

不好。当我打印'framename'时,我得到的是:

[<selenium.webdriver.remote.webelement.WebElement object at 0x101206350>,    <selenium.webdriver.remote.webelement.WebElement object at 0x101206390>]

而不是框架的实际名称。

我也尝试过按照这里driver.switch_to_frame(0)的建议使用索引(如,driver.switch_to_frame(1)等),但也没有好处。

那么,当动态生成框架的名称时,如何检索该名称?有什么想法吗?

(Python 2.7.5、Selenium 2.2.0、Mac OS X 10.6.8、Firefox 22.0)

4

1 回答 1

7

find_elements_by_xpath返回一个类型的对象WebElement。您需要使用get_attributeWebElement.

framename = driver.find_element_by_xpath("//frame[contains(@name, 'results_frame')]").get_attribute("name")

那应该返回您要查找的名称。

于 2013-07-30T18:36:44.813 回答