我正在尝试创建一个工具,该工具将自动在多个平台和社交媒体之间共享视频。我想使用Python和Selenium作为网络驱动程序,单击YouTube视频网页上的共享按钮,然后将其发布在多个社交媒体上。
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait, Select
from selenium.webdriver.support import expected_conditions
from main import wait_for_element
import time
import os
options = webdriver.ChromeOptions()
options.add_argument("--user-data-dir=PATH_2_CHROME_DATA")
browser = webdriver.Chrome(options=options, executable_path='PATH_2_CHROMEDRIVER.EXE')
def wait_for_element(browser, element, by_what):
return WebDriverWait(browser, 10).until(expected_conditions.presence_of_element_located((by_what, element)))
def youtube(youtube_details):
yt_url = youtube_details['yt_url']
# YouTube Page
browser.get(yt_url)
share_btn = wait_for_element(browser,'//*[@id="button" and contains(@aria-label,"Share")]',By.XPATH)
share_btn.click()
reddit_btn = wait_for_element(browser,'//*[@id="target" and contains(@title,"reddit")]', By.XPATH)
reddit_btn.click()
community_dropdown = wait_for_element(browser,'#SHORTCUT_FOCUSABLE_DIV > div > div > div > div.s7pq5uy-1.hjrnH > div.s7pq5uy-5.ezjCpv > div.sdccme-0.kIpPAE > div > div.s1eg75c7-1.dsiNBS > div > div > div.s1u2j4lv-1.bTtqCO > input', By.CSS_SELECTOR)
community_dropdown.send_keys('r/Bumble')
if __name__ == '__main__':
youtube_details = {
'yt_url':'https://www.youtube.com/watch?v=dQw4w9WgXcQ',
}
youtube(youtube_details)
当Webdriver单击reddit共享按钮时,它将打开一个新的选项卡,该驱动程序不受控制。因此,驱动程序无法在reddit网页上找到该元素。
在单击reddit共享按钮以切换到新打开的标签后,我尝试添加以下行。
browser.find_element_by_tag_name('body').send_keys(Keys.CONTROL + Keys.TAB)
但是它不起作用。我也浏览了一些论坛帖子,但这些都不是我所面临的问题。
答案 0 :(得分:3)
chromedriver
为每个选项卡生成窗口句柄,并在窗口之间切换时使用它在选项卡之间切换
driver.switch_to.window(driver.window_handles[-1])
答案 1 :(得分:0)
我使用driver.switch_to_window
切换到新打开的标签页,然后再次返回。
基本上,在执行操作(例如,单击按钮)之前,我会跟踪driver.window_handles
,这会打开新标签页。