gpt4 book ai didi

python-3.x - 无法切换到 iframe 并使用 Python 关闭 Selenium 中的框架

转载 作者:行者123 更新时间:2023-12-04 15:19:06 25 4
gpt4 key购买 nike

在尝试从网站 (https://www.chemist.co.uk/) 获取详细信息的多次尝试失败后,我意识到几秒钟后会出现一个 iframe,并且该事件仅在网站打开时发生一次。但是,我发现iframe很难处理,我尝试了各种方法,比如根据index和id找到iframe,因为iframe没有名字。根据我的观察,这只会在我打开网站后发生。谁能帮我弄清楚我做错了什么?

import os
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
currentdir = os.getcwd()


chrome_options = Options()
# chrome_options.add_argument('--headless')
chrome_options.add_argument("--disable-notifications")
chrome_options.add_argument('--no-sandbox')
driver = webdriver.Chrome(executable_path=f"{currentdir}/chromedriver.exe", options=chrome_options)
# driver.maximize_window()
driver.implicitly_wait(20)
driver.get("https://www.chemist.co.uk/")
time.sleep(5)
# driver.switch_to.frame(1)
iframe = driver.find_element_by_id("AWIN_CDT")
driver.switch_to.frame(iframe)
driver.find_element_by_xpath("//a[@data-trigger='dismiss.close']").click()
driver.switch_to.default_content()

最佳答案

不使用 time.sleep,而是显式等待 iFrame 出现,然后切换到它。您的页面中还有四个 iframe。并且弹出窗口不在 ID 为 AWIN_CDT 的 iframe 内,而是在具有以下信息的第二个框架内:

<iframe scrolling="no" style="border: none; height: 1px; width: 100%; min-height: 100%; display: inline !important;"></iframe>

因此,为了关闭弹出窗口,您需要切换到此框架。

driver.get('https://www.chemist.co.uk/')
WebDriverWait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[contains(@style,'border: none; height')]")))
driver.find_element_by_xpath("//a[@data-trigger='dismiss.close']").click()
driver.switch_to.default_content()

您需要在下面导入:

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

关于python-3.x - 无法切换到 iframe 并使用 Python 关闭 Selenium 中的框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63742418/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com