【问题标题】:Popup window on youtube - how to close with seleniumyoutube 上的弹出窗口 - 如何用 selenium 关闭
【发布时间】:2020-11-16 06:53:24
【问题描述】:

您能帮我解决一个问题吗?我在 youtube 上遇到了 Selenium 和弹出窗口的问题。
当第一个窗口被跳转时 - Selenium 关闭这个窗口,但是如果我想关闭第二个窗口/框架,selenium 不起作用。能否请你帮忙? 下面附上部分代码:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
from time import sleep
class YoutubeSearcher:
    def __init__(self, search):
        self.search = search
    def open_url(self) -> None:
        driver = webdriver.Chrome()
        driver.get('https://www.youtube.com/')
        try:
            WebDriverWait(driver, 5).until(
                EC.element_to_be_clickable((By.XPATH, '/html/body/ytd-app/ytd-popup-container/paper-dialog/yt-upsell-dialog-renderer/div/div[3]/div[1]/yt-button-renderer/a/paper-button/yt-formatted-string'))).click()
        except:
            print("no alert to accept")
        WebDriverWait(driver, 10).until(
            EC.element_to_be_clickable((By.XPATH, '//*[@id="yDmH0d"]/c-wiz/div[2]/div/div/div/div/div[2]/form'))).click()
        search = driver.find_element_by_id("search")
        search.clear()
        search.send_keys(self.search)
        submit_button = driver.find_element_by_id("search-icon-legacy")
        submit_button.click()

【问题讨论】:

  • 您尝试与哪个第二个窗口/框架进行交互?

标签: python selenium selenium-webdriver


【解决方案1】:

根据您分享的代码,这是我的观察结果:

第一个弹出窗口。

    WebDriverWait(driver, 5).until(
                EC.element_to_be_clickable((By.XPATH, '/html/body/ytd-app/ytd-popup-container/paper-dialog/yt-upsell-dialog-renderer/div/div[3]/div[1]/yt-button-renderer/a/paper-button/yt-formatted-string'))).click()

第二个弹出窗口。

WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="yDmH0d"]/c-wiz/div[2]/div/div/div/div/div[2]/form'))).click()

建议:

  1. 检查一次 xpath 是否正确或是否有多个定位器正在返回。
  2. 添加适当的等待:如 isVisible,定位器弹出窗口均可点击。
  3. 使用基本的 if else 可以使条件起作用(没有特别需要尝试的除外)。
  4. 关闭一个弹出窗口后,检查下一个弹出窗口是否可见。

【讨论】:

    【解决方案2】:

    这是最终有效的代码。第二个弹出窗口需要一个切换框架。我知道这很糟糕,但它确实有效。

    希望对您有所帮助。祝你好运。

    from selenium.webdriver.common.keys import Keys
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.support.wait import WebDriverWait
    from time import sleep
    
    driver = webdriver.Chrome('C:\Webdrivers\chromedriver.exe')
    driver.maximize_window()
    driver.get('https://www.youtube.com')
    WebDriverWait(driver, 5).until(
                    EC.element_to_be_clickable((By.XPATH, 
                                                '/html/body/ytd-app/ytd-popup-container/paper-dialog/yt-upsell-dialog-renderer/div/div[3]/div[1]/yt-button-renderer/a/paper-button/yt-formatted-string'))).click()
    driver.switch_to.frame(0)
    WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH,"/html/body/div/c-wiz/div[2]/div/div/div/div/div[2]/form/div/span/span"))).click()
    

    【讨论】:

    • 非常感谢!有效,我找到了类似的解决方案!
    猜你喜欢
    • 1970-01-01
    • 2019-10-22
    • 2020-06-22
    • 2021-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-04
    相关资源
    最近更新 更多