簡體   English   中英

Python Selenium:導航后如何切換幀?

[英]Python Selenium: how to switch frames after navigation?

使用Python3 + Selenium導航到頁面后,我嘗試下載表中的鏈接。 使用硒單擊鏈接並檢查最新加載的頁面上的元素后,我可以看到我的元素在名為“內容”的框架內。 但是,當我嘗試訪問此框架時,調用時:

DRIVER.switch_to_frame("contents")

我收到以下錯誤:

selenium.common.exceptions.NoSuchFrameException: Message: contents

為了獲得更多背景信息,我進行了一項實驗。 我使用DRIVER.get(URL)加載的頁面和導航到的頁面都有一個名為“菜單”的框架。
我可以在第一頁上調用DRIVER.switch_to_frame(“ menu”),但在第二頁上不能調用。

DRIVER = webdriver.Chrome(CHROME_DRIVER)
DRIVER.get(SITE_URL)
DRIVER.switch_to_frame("contents") # This works
target_element = DRIVER.find_element_by_name(LINK)
target_element.click()
time.sleep(5)
DRIVER.switch_to_frame("menu")
target_element = DRIVER.find_element_by_name(LINK2)
target_element.click()
target_element = DRIVER.find_element_by_name(LINK3)
target_element.click()
DRIVER.switch_to_frame("contents") # Code breaks here.
target_element = DRIVER.find_element_by_xpath(REF)
target_element.click()
print("Program complete.")

我希望代碼能在“目錄”框架中找到鏈接的xpath參考。 相反,當嘗試切換到“內容”框架時,python運行時錯誤並且找不到“內容”。

由於內容似乎是頂級框架,請在選擇框架之前嘗試回到頂部:

DRIVER.switch_to.default_content()
DRIVER.switch_to.frame("contents")

selenium.common.exceptions.NoSuchFrameException: Message: contents

這是因為您停留在iframe的子級(即“菜單”)中,因此在其中無法找到iframe的“內容”。

首先通過使用切換回父框架,即“內容”

DRIVER.switch_to.default_content()

然后嘗試轉到“內容” iframe並執行操作,現在應該可以了。

作為經驗法則,每當切換框架時,都需要為frame_to_be_available_and_switch_to_it()引入WebDriverWait ,並且您需要:

  • 誘導WebDriverWait獲得所需的幀並切換到該幀
  • 誘導WebDriverWait使所需的元素可單擊
  • 您可以使用以下解決方案:

     target_element.click() WebDriverWait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"frame_xpath"))) WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "REF"))).click() 
  • 您可以在如何選擇html元素(無論硒中處於哪個幀中)中找到有關幀切換的詳細討論

在這里,您可以找到有關iframe下#document處理方式的相關討論

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM