YouTube上的弹出窗口-如何用硒关闭

时间:2020-09-01 08:49:22

标签: python selenium selenium-webdriver

能帮我解决一个问题吗?我在Selenium和带有YouTube协议的弹出窗口时遇到问题。
跳到第一个窗口时-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()

2 个答案:

答案 0 :(得分: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. 如果可以使用其他基本条件,则可以使条件起作用(除非需要特别尝试,否则除外)。
  4. 关闭一个弹出窗口后,检查下一个弹出窗口是否可见。

答案 1 :(得分:0)

这是最终有效的代码。第二个弹出框需要一个切换框。我知道这很la脚,但是有效。

希望有帮助。祝你好运。

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()