Selenium не может переключиться на недавно открытую вкладку - PullRequest
0 голосов
/ 07 февраля 2019

Я пытаюсь создать инструмент, который автоматизирует процесс обмена видео между несколькими платформами и социальными сетями.Я хотел использовать 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)

Когда веб-драйвер нажимает на кнопку общего доступа Reddit, оноткрывает новую вкладку, которой драйвер не управляет.Таким образом, драйвер не смог найти элемент на веб-странице reddit.

Я попытался добавить следующую строку после нажатия на кнопку общего доступа reddit, чтобы переключиться на вновь открытую вкладку.

browser.find_element_by_tag_name('body').send_keys(Keys.CONTROL + Keys.TAB)

Ноэто не работаетЯ также просмотрел несколько сообщений на форуме, но ни одна из них не является той проблемой, с которой я столкнулся.

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

Я использую driver.switch_to_window, чтобы переключиться на вновь открытую вкладку, а затем снова обратно.

Обычно я отслеживаю driver.window_handles, прежде чем выполнить действие (например,нажатием кнопки), которая открывает новую вкладку.

0 голосов
/ 07 февраля 2019

chromedriver генерирует дескриптор окна для каждой вкладки, используйте его для переключения между вкладками при переключении между окнами

driver.switch_to.window(driver.window_handles[-1])
...