我刚刚在网站上查看过,它们(您要查找的元素)在任何 iframe 标记中都不。
以下代码对我有用(更改为 xpath,无需切换):
driver.find_element_by_xpath("//span[contains(text(),'Cash Flow')]").click()
driver.find_element_by_xpath("//span[contains(text(),'Balance Sheet')]").click()
driver.find_element_by_xpath("//span[contains(text(),'Quarterly')]").click()
注意:这可能是因为对于“财务”,父标签是a,代表一个链接,但对于其他元素(现金流量,资产负债表),父标签是@ 987654324@ 不是链接标签。所以find_element_by_link_text 可能没有工作。
在 iframe 之间切换:
在我们尝试识别它之前,您必须切换到该元素所在的框架。
假设,您的元素位于 3 个 iframe 内,如下所示:
<iframe name="frame1">
<iframe name="frame2">
<iframe name="frame3">
<span>CashFlow</span> <! Span element is inside of 3 iframes>
</iframe>
<span>balance sheet> <! Span element is inside of 2 iframes>
</iframe>
</iframe>
现在,如果您想识别三个 iFrame 中的 CashFlow:
driver.switch_to_frame(driver.find_element_by_name("frame1")) // here, you can provide WebElement representing the iFrame or the index.
driver.switch_to_frame(driver.find_element_by_name("frame2"))
driver.switch_to_frame(driver.find_element_by_name("frame3"))
driver.find_element_by_link_text("CachFlow")
# switch to default frame before you again try find some other element which is not in the same frame (frame3)
driver.switch_to_default_content()
# then navigate to the frame that you want to indentify the element:
driver.switch_to_frame(driver.find_element_by_name("frame1"))
driver.switch_to_frame(driver.find_element_by_name("frame2"))
driver.find_element_by_link_text("balance sheet")
# switch to default content again
driver.switch_to_default_content()
注意:我使用框架引用而不是索引,因为您提到有 9 个 iFrame。因此,使用索引会令人困惑。如果您无法识别 frameElement,则仅使用索引。
参考:
- http://selenium-python.readthedocs.io/api.html#selenium.webdriver.remote.webdriver.WebDriver.switch_to_frame