Как щелкнуть ссылку в комментарии на YouTube с помощью пользовательского агента через Selenium и Python - PullRequest
0 голосов
/ 01 января 2019

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

пример: ссылка

HTML:

<a class="yt-simple-endpoint style-scope yt-formatted-string" spellcheck="false" href="/redirect?redir_token=ix1uBK3TO3bxXdcT7EvDFp-vI9p8MTU0NjQxNTExOEAxNTQ2MzI4NzE4&amp;event=comments&amp;q=https%3A%2F%2Fjulissars.itworks.com%2F&amp;stzid=Ugw6ip_QkzwyJPIq3bp4AaABAg" rel="nofollow">https://julissars.itworks.com&#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

driver = webdriver.Firefox()
driver.get("https://www.youtube.com/watch?v=UJezMYvf8Ss&lc=Ugw6ip_QkzwyJPIq3bp4AaABAg")
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//a[@class='yt-simple-endpoint style-scope yt-formatted-string' and contains(., 'julissars')]"))).click()

Пробный код (с пользовательским агентом, не работает):

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.options import Options
from fake_useragent import UserAgent

useragent = UserAgent()
profile = webdriver.FirefoxProfile()
profile.set_preference("general.useragent.override", useragent.random)
driver = webdriver.Firefox(firefox_profile=profile)
driver.get("https://www.youtube.com/watch?v=UJezMYvf8Ss&lc=Ugw6ip_QkzwyJPIq3bp4AaABAg")
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//a[@class='yt-simple-endpoint style-scope yt-formatted-string' and contains(., 'julissars')]"))).click()

Ответы [ 3 ]

0 голосов
/ 01 января 2019

Связанная веб-страница поддерживает не все браузеры (пользовательские агенты).Если это ваша проблема, вы можете выбрать несколько поддерживаемых пользовательских агентов и переключаться между ними (например, с помощью random.choice()).Вам также необходимо обновить ваш xpath.

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

useragent = UserAgent()
profile = webdriver.FirefoxProfile()
profile.set_preference("general.useragent.override", useragent.random)
driver = webdriver.Firefox(firefox_profile=profile)

driver.get("https://www.youtube.com/watch?v=UJezMYvf8Ss&lc=Ugw6ip_QkzwyJPIq3bp4AaABAg")

xpath = '/html/body/div[2]/div[4]/div/div[5]/div[2]/div[2]/div/div[2]/div[5]/div/div[2]/section[1]/div[1]/div[2]/div[2]/div[1]/a'

try:
    element = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, xpath)))
finally:
    element.click()
0 голосов
/ 04 января 2019

Чтобы щелкнуть по нужному комментарию с текстом https://julissars.itworks.com в url , вам нужно вызвать WebDriverwait , чтобы элемент можно было нажимать, и вы можете использовать следующиерешение с использованием useragent через 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, executable_path=r'C:\Utility\BrowserDrivers\chromedriver.exe')
    driver.get("https://www.youtube.com/watch?v=UJezMYvf8Ss&lc=Ugw6ip_QkzwyJPIq3bp4AaABAg")
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//a[@class='yt-uix-sessionlink  ' and contains(@href, 'julissars')]"))).click()
    
  • Вывод на консоль:

    Mozilla/5.0 (X11; NetBSD) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36
    
  • Подробное обсуждение можно найти в Способ изменения пользовательского агента Google Chrome в Selenium?

0 голосов
/ 01 января 2019

Google очень активно блокирует взаимодействие ботов с большинством их свойств.Если строка агента пользователя, которую вы отправляете, действительно случайна (то есть она не соответствует реальному UA, который может отправлять браузер), вы, вероятно, попадете в алгоритмы их обнаружения ботов.

Таким образом, ваш клик, вероятно, «работает» в том смысле, что фактически вызывает событие в веб-браузере ... но Google, вероятно, игнорирует запрос.

...