Это намного сложнее, чем я изначально думал.Проблема в том, что вы можете найти элементы на странице, используя Selenium, но вы не можете увидеть текстовый контекст этого элемента, например, находится ли эта ссылка внутри ()
s.Вот где это становится сложнее.Если вы смотрите на все как на элементы, вы не можете видеть контекст (вы не можете видеть, какие элементы находятся внутри других элементов).Если вы посмотрите на все как текст (получите .text
от родителя), вы больше не сможете видеть, что такое ссылка).Единственный способ, которым я мог придумать, это сделать:
- Получить родительский элемент, который содержит первый абзац
- Используйте
.get_attribute("innerHTML")
, чтобы получить HTML, содержащийся в этом элементе - Поиск ссылки, которая не находится внутри
()
s с регулярным выражением
Проблема в том, что, как только вы обнаружите это, у вас есть строка тега A
ине фактический элемент, на который вы можете нажать.С этим текстом вы можете сделать пару вещей ...
Получить текст найденной ссылки и найти его на странице с помощью локатора (чтобы вы могли щелкнуть по нему), ноэто не гарантирует, что это правильная ссылка, например, представьте несколько ссылок на «Грецию» на странице и т. д.
Другой вариант - посмотреть href
нашел тег A
и затем восстановил URL, по которому вы можете перейти.
Вот код, который поможет вам двигаться в правильном направлении.Вам нужно будет решить, какой путь вы хотите выбрать.
import re
...
start_page = "https://en.wikipedia.org/wiki/Special:Random"
driver.get(start_page)
first_para = driver.find_element_by_css_selector("#mw-content-text > div > p")
text = first_para.text
regex = "(<a .*?<\/a>)|\(.*?\)"
matches = re.findall(regex, text)
print(matches[1])
Это напечатает <a href="/wiki/Action_(philosophy)" title="Action (philosophy)">activity</a>
, который является первым тегом A
, который не находится внутри ()
s.Оттуда подход зависит от вас.Вы можете восстановить URL-адрес, проанализировав атрибут href
и добавив его к основному URL-адресу, например
new_url = "https://en.wikipedia.org" + href
, или перейдите в другом направлении.Выбор за вами и вашими требованиями, но этого должно быть достаточно, чтобы начать работу.