Я хочу получить уникальный css путь селектора элемента в HTML.
Я использую BeautifulSoup, но не могу понять, как действительно получить уникальный селектор css, как вы будет использовать инструмент Chrome Dev.
Скажем, вы пытаетесь получить уникальный css селектор элемента на странице Google, в частности, кнопку Gmail
в правом верхнем углу. Используя Chrome инструмент разработчика, вы можете легко использовать «копирование селектора» и получить: #gbw > div > div > div.gb_9d.gb_i.gb_yg.gb_pg > div:nth-child(1) > a
Я пытаюсь сделать то же самое, не зная никакой предварительной информации о структуре сайта. т.е. из одного элемента BeautifulSoup.
Я попытался получить уникальный селектор, перечислив всех родителей элемента, но это НЕ уникально. Мне нужно что-то более похожее на class & id, чтобы сделать его уникальным
Как мне это сделать?
(Конечно, это работает в очень простых случаях, таких как тот, что я дал вам ниже, но css путь селектора, использующий только имена тегов, всегда рискует быть не уникальным.)
from urllib.request import urlopen
from bs4 import BeautifulSoup
html = urlopen("https://www.google.com")
html_bs = BeautifulSoup(html, 'html.parser')
gmail = html_bs.find_all(text='Gmail')[0]
print(type(gmail)) # >> bs4.element.NavigableString
# How do I get gmail's unique css path?
# I tried to use parents but this is generally not unique.
# div > div > nobr > a might NOT be unique in some cases.
for parent in gmail.parents:
print(parent.name)
# >>
'''
a
nobr
div
div
body
html
[document]
'''