我刚刚在网站上签到,它们(您要查找的元素) 不在 任何 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链接的原因,而对于其他元素(现金流,资产负债表),父标签
div不是链接的原因。因此
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



