如何在Selenium中選擇一個HTML元素,無論它在哪個框架中
P粉073857911
P粉073857911 2024-02-26 11:11:52
0
2
441

我正在嘗試選擇一個駐留在 iframe 內並且可能駐留在其他 iframe 中的元素。

是否可以在(python)selenium中的某些(子)iframe中選擇一個元素,而無需先選擇iframe?有沒有辦法以某種方式「循環」每個 iframe 並檢查在哪裡可以找到我的元素...?

在元素、html 內容和 iframe 可能剛剛被加載的情況下如何做到這一點...?

P粉073857911
P粉073857911

全部回覆(2)
P粉571233520

寫自己的遞迴查找器應該很容易。抱歉,我不懂 python,但在 Java 中它會是這樣的:

public void findInAllFrames(WebElement e, String targetIdStr) {

    List l = e.findElements(By.tagName("iframe"));

    for(int inx=0; inx targets = l.get(inx).findElements(By.id(targetIdStr));
        if(targets.size()>0) {
            // Do something with your targets
        }

        findInAllFrames(l.get(inx), targetIdStr);
    }
}
P粉794851975

,無法通過 Selenium,無需切換到對應的 iframe

原因:

載入頁面時,Selenium 的焦點預設會保留在頂部視窗上。 頂部視窗包含其他<iframes>框架集。因此,當我們需要與iframe 內的WebElement 進行互動時,我們必須透過以下方法之一切換到對應的<iframe>


幀切換方法:

我們可以透過3種方式切換到框架。

按框架名稱

Name iframe 的屬性,透過它我們可以切換到它。

範例:

driver.switch_to.frame("iframe_name")

按幀 ID

iframe的ID屬性,透過它我們可以切換到它。

範例:

driver.switch_to.frame("iframe_id")

按幀索引

假設頁面有10個frame,我們可以透過索引切換到iframe。

範例:

driver.switch_to.frame(0)
driver.switch_to.frame(1)

切換回主機

我們可以使用default_content()#parent_frame()切換回主框架

範例:

driver.switch_to.default_content()
driver.switch_to.parent_frame()

切換框架的更好方法:

切換框架的更好方法是透過將expected_conditions 設定為frame_to_be_available_and_switch_to_it##WebDriverWait# 以獲得預期框架的可用性,如下所示:

  • 透過幀 ID

    WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it(By.ID,"id_of_iframe"))
  • 透過框架名稱

    WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.NAME,"name_of_iframe")))
  • 透過框架Xpath

    WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"xpath_of_iframe")))
  • 透過框架CSS

    WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"css_of_iframe")))

參考

您可以在以下位置找到相關的詳細討論:

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板