Как щелкнуть ссылку YouTube в комментарии YouTube с помощью пользовательского агента через Selenium и Python

Я изучаю селен python, я хочу щелкнуть ссылку YouTube в комментарии YouTube, может ли кто-нибудь мне помочь?

Пример: URL.

HTML:

<a class="yt-simple-endpoint style-scope yt-formatted-string" spellcheck="false" href="/watch?v=PbLtyVcMrk0">https://www.youtube.com/watch?v=PbLtyVcMrk0&#65279;</a>

Испытания кода:

from selenium import webdriver
from fake_useragent import UserAgent
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

ua = UserAgent()
options = webdriver.ChromeOptions()
userAgent = ua.random
print(userAgent)
options.add_argument('user-agent={userAgent}')
driver = webdriver.Chrome(chrome_options=options)
driver.get("https://www.youtube.com/watch?v=NIWwJbo-9_8&lc=UgwNBxYVXb6uiVTioPB4AaABAg")
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//a[@class='yt-uix-sessionlink  ' and contains(@href, '/watch?v=PbLtyVcMrk0')]"))).click()

person vantuong    schedule 04.01.2019    source источник


Ответы (2)


Вы были довольно близко. Чтобы щелкнуть нужный комментарий с текстом вида https://www.youtube.com/watch?v=PbLtyVcMrk0 по URL вам нужно вызвать WebDriverWait, чтобы элемент стал кликабельным, и вы можете использовать следующее решение, используя агент пользователя через Selenium и Python:

  • Блок кода:

    from selenium import webdriver
    from fake_useragent import UserAgent
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
    ua = UserAgent()
    options = webdriver.ChromeOptions()
    userAgent = ua.random
    print(userAgent)
    options.add_argument('user-agent=' + userAgent)
    driver = webdriver.Chrome(chrome_options=options)
    driver.get("https://www.youtube.com/watch?v=NIWwJbo-9_8&lc=UgwNBxYVXb6uiVTioPB4AaABAg")
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//a[@class='yt-uix-sessionlink       spf-link ' and contains(@href, '/watch?v=PbLtyVcMrk0')]"))).click()
    
  • Выход консоли:

    Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2049.0 Safari/537.36
    
person DebanjanB    schedule 04.01.2019

Проблема связана с вашим xpath, а логика, которую вы реализовали для выполнения операции щелчка, может быть более усовершенствованной, например:

from selenium import webdriver
from fake_useragent import UserAgent
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

ua = UserAgent()
options = webdriver.ChromeOptions()
userAgent = ua.random
print(userAgent)
options.add_argument('user-agent={userAgent}')
driver = webdriver.Chrome(chrome_options=options)    
driver.get("https://www.youtube.com/watch?v=NIWwJbo-9_8&lc=UgwNBxYVXb6uiVTioPB4AaABAg")
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "yt-formatted-string[class*='ytd-comment-renderer'][id='content-text']>a")))
clickLinks = driver.find_elements_by_css_selector("yt-formatted-string[class*='ytd-comment-renderer'][id='content-text']>a")
for element in clickLinks:
    if 'youtube' in element.text:
        element.click()

Надеюсь это поможет.

person learner8269    schedule 04.01.2019
comment
в id я установил ''/watch? v = PbLtyVcMrk0 '' но это не работает! Большое спасибо Learner8269, я нашел решение. - person vantuong; 04.01.2019