如何使用 Python 准时关闭浏览器(ChromeDriver)
How to close browser(ChromeDriver) on time using Python
我制作了一个 Python 程序,它使用 Selenium 打开我的 Youtube 播放列表,我想在观看完所有视频后关闭该浏览器。
(我尝试使用 time.sleep()
,但问题是 Youtube 广告)。
那么,有什么方法可以让我在观看完所有视频后自动关闭浏览器吗?
视频完成后 //div[@class='ytp-autonav-endscreen-button-container']
元素出现,因此您可以等到该元素出现,然后关闭驱动程序。
您也可以简单地通过 class 名称 'ytp-autonav-endscreen-button-container'
或其中的其他按钮/元素找到它。
所以看完视频后使用
WebDriverWait(driver, delay).until(EC.visibility_of_element_located((By.ID, 'ytp-autonav-endscreen-button-container')))
其中 delay
是足以让视频完成的时间。
详细了解 webdriver 显式等待条件 here
不要忘记添加必要的导入
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
我建议分步进行。
第一步:
等待播放列表中的最后一个视频:
通过文字:
last_video = driver.find_element_by_css_selector("#secondary .index-message.style-scope.ytd-playlist-panel-renderer:nth-child(1)").text == "10 /10"
或者直接等待播放列表中的最后一个元素:
last_video = driver.find_element_by_css_selector("#secondary #items>.style-scope.ytd-playlist-panel-renderer:last-of-type").get_attribute("selected")
第二步:
第一个条件为真后,等待此视频播放完毕,使用此定位器(重播 按钮)
video_ends = driver.find_element_by_css_selector(".ytp-chrome-controls button[title=Replay]")
为此,您需要导入:
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
并像这样使用它:
wait = WebDriverWait(driver, timeout_in_seconds)
wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "#secondary .index-message.style-scope.ytd-playlist-panel-renderer:nth-child(1)").text == "10 /10")))
超时将取决于播放列表的长度。
这不是一个快速的任务,没有人会同意在这里为你完成它。
我制作了一个 Python 程序,它使用 Selenium 打开我的 Youtube 播放列表,我想在观看完所有视频后关闭该浏览器。
(我尝试使用 time.sleep()
,但问题是 Youtube 广告)。
那么,有什么方法可以让我在观看完所有视频后自动关闭浏览器吗?
视频完成后 //div[@class='ytp-autonav-endscreen-button-container']
元素出现,因此您可以等到该元素出现,然后关闭驱动程序。
您也可以简单地通过 class 名称 'ytp-autonav-endscreen-button-container'
或其中的其他按钮/元素找到它。
所以看完视频后使用
WebDriverWait(driver, delay).until(EC.visibility_of_element_located((By.ID, 'ytp-autonav-endscreen-button-container')))
其中 delay
是足以让视频完成的时间。
详细了解 webdriver 显式等待条件 here
不要忘记添加必要的导入
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
我建议分步进行。
第一步:
等待播放列表中的最后一个视频:
通过文字:
last_video = driver.find_element_by_css_selector("#secondary .index-message.style-scope.ytd-playlist-panel-renderer:nth-child(1)").text == "10 /10"
或者直接等待播放列表中的最后一个元素:
last_video = driver.find_element_by_css_selector("#secondary #items>.style-scope.ytd-playlist-panel-renderer:last-of-type").get_attribute("selected")
第二步:
第一个条件为真后,等待此视频播放完毕,使用此定位器(重播 按钮)
video_ends = driver.find_element_by_css_selector(".ytp-chrome-controls button[title=Replay]")
为此,您需要导入:
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
并像这样使用它:
wait = WebDriverWait(driver, timeout_in_seconds)
wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "#secondary .index-message.style-scope.ytd-playlist-panel-renderer:nth-child(1)").text == "10 /10")))
超时将取决于播放列表的长度。
这不是一个快速的任务,没有人会同意在这里为你完成它。