尽管有弹出窗口,但仍无法切换到弹出窗口

时间:2019-11-13 08:22:47

标签: python selenium

请参阅此页面:https://www.lanebryant.com/gold-sequin-v-neck-top/prd-358677#color/0000012216

点击我的尺寸是多少,您将获得“开始使用”按钮。我试图单击它,但它给出了超时异常。

 size = WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.XPATH,

                                                                       "//button[@class='tfc-cfg-next-button tfc-auto-next-button tfc-button tfc-element tfc-click']")))

编辑 我已经单击了按钮所在的弹出窗口

 size = WebDriverWait(browser, 2).until(EC.element_to_be_clickable((By.XPATH,

                                                                     "//a[@class='tfc-popup-click-open']")))


 browser.execute_script("arguments[0].click();", size)

我尝试了多种切换到弹出窗口的方法,其中一种是:

       main_page = browser.current_window_handle
        # changing the handles to access login page
        login_page = None
        for handle in browser.window_handles:
            if handle != main_page:
                login_page = handle
        browser.switch_to.window(str(login_page))

        try:
                browser.find_element_by_xpath("/html/body/div[2]/div/div/div/div[2]/div[2]/tfc-button-bar/div/div/tfc-next-button/span/span/button").Enabled
        except:
                pass

仍然无法正常工作

2 个答案:

答案 0 :(得分:0)

对于像我这样的新手却找不到答案的人。这是解决方案:

driver.switch_to.frame(driver.find_element_by_css_selector("body > div.tfc-modal-result.tfc-secure.tfc-cfg-core.tfc-language-en.tfc-shopping-for-self.tfc-sfo-disabled.tfc-discovery-disabled.tfc-sfo-unavailable.tfc-discovery-unavailable.tfc-department-adults > div > iframe"))

问题是我找不到iframe的名称或ID或类来引用它。我没有想到只是直接从Chrome复制css选择器(单击检查。右键单击并复制>选择器)

答案 1 :(得分:0)

这是我刚解决问题的方法:

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

driver=webdriver.Chrome("C:\webdrivers\chromedriver.exe")
driver.maximize_window()
driver.get("https://www.lanebryant.com/gold-sequin-v-neck-top/prd-358677#color/0000012216")
driver.find_element_by_xpath("//*[@id='button']/button").click()

driver.refresh()
sizeLink = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "//a/span[2]/span[2]")))
sizeLink.click()
iframe = WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.XPATH, "/html/body/div[25]/div/iframe")))
driver.switch_to_frame(iframe)
getStarted = WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.XPATH, "//span/span/button/span")))
WebDriverWait(driver, 20).until(EC.element_to_be_clickable,getStarted)
getStarted.click()

第一步是摆脱在我的情况下出现的特定于国家/地区的弹出窗口。

我使用的Xpath表达式是相对的,而不是您使用的绝对XPath。