как найти элемент с помощью css-селектора, используя python / selenium - PullRequest
1 голос
/ 25 марта 2019

Я пытаюсь подобрать ссылки каналов YouTube, которые расположены ниже:

<a id="author-text" class="yt-simple-endpoint style-scope ytd-comment- 
renderer" href="/channel/UCUSy-h1fPG1L6X7KOe70asA"> <span class="style- 
scope ytd-comment-renderer">Jörgen Nilsson</span></a>

Так что в приведенном выше примере я бы хотел выбрать «/ channel / UCUSy-h1fPG1L6X7KOe70asA». До сих пор я пробовал много вариантов, но ни один не работает:

driver = webdriver.Chrome('C:/Users/me/Chrome Web Driver/chromedriver.exe')
api_url="https://www.youtube.com/watch?v=TQG7m1BFeRc"
driver.get(api_url)
time.sleep(2) 
div = driver.find_element_by_class_name("yt-simple-endpoint style-scope ytd-comment-renderer")

но я получаю следующую ошибку: InvalidSelectorException: сообщение: недопустимый селектор: составные имена классов не разрешены

Я также пробовал другие подходы:

div = driver.find_elements_by_xpath("yt-simple-endpoint style-scope ytd-comment-renderer")

div = driver.find_element_by_class_name('yt-simple-endpoint style-scope ytd-comment-renderer')

div=driver.find_element_by_css_selector('.yt-simple-endpoint style-scope ytd-comment-renderer').get_attribute('href')

но не повезло ... если кто-то может помочь, это будет высоко ценится. Спасибо

Ответы [ 2 ]

1 голос
/ 25 марта 2019

Ваши селекторы недействительны:

  • driver.find_element_by_class_name("yt-simple-endpoint style-scope ytd-comment-renderer")

    вы не можете передать более одного имени класса методу find_element_by_class_name.Вы можете попробовать driver.find_element_by_class_name("ytd-comment-renderer")

  • driver.find_elements_by_xpath("yt-simple-endpoint style-scope ytd-comment-renderer")

    это неправильный синтаксис XPath.Вы, вероятно, имеете в виду driver.find_elements_by_xpath("//*[@class='yt-simple-endpoint style-scope ytd-comment-renderer']")

  • driver.find_element_by_css_selector('.yt-simple-endpoint style-scope ytd-comment-renderer')

    имя каждого класса должно начинаться с точки: driver.find_element_by_css_selector('.yt-simple-endpoint.style-scope.ytd-comment-renderer')

Но лучший способ ИМХО идентифицировать по ID:

driver.find_element_by_id("author-text")
1 голос
/ 25 марта 2019

Вы можете использовать BeautifulSoup в python, чтобы получить ссылки в теге привязки, имеющие определенные имена классов, такие как soup.find_all('a', attrs={'class':'yt-simple-endpoint'}), вы можете прочитать больше здесь find_all используя css

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...