Выборка тегов с selenium href в имени класса

#html #selenium #selenium-webdriver

#HTML #selenium #selenium-webdriver

Вопрос:

Я новичок в использовании selenium. Я использую selenium для извлечения ссылок из результатов поиска Google. Я хочу взять все ссылки из результатов поиска. вот как выглядит html, где тип ссылки, который я хочу извлечь, находится в <a href= >:

 <div class='r'>
   <a href="https://www.linkedin.com/in/thu-huong-trish-nguyen-7bba5722" ping="/url?
   sa=tamp;amp;source=webamp;amp;rct=jamp;amp;url=https://www.linkedin.com/in/thu-huong-trish-nguyen-
   7bba5722amp;amp;ved=2ahUKEwiqw5D0qt3rAhVG7J4KHd3GBbQQFjAAegQIAxAB"><br><h3 class="LC20lb 
   DKV0Md">Thu-Huong (Trish) Nguyen - Research Data Analyst II - LinkedIn</h3><div class="TbwUpd
   NJjxre"><cite class="iUh30 gBIQub bc tjvcx">www.linkedin.com<span class="eipWBe"> › ...    </span></cite></div></a>
  

Остальные результаты имеют точно такой же тип класса и форму, я, по сути, хочуhttps://www.linkedin.com ссылка. Я сделал это как попытку

 elems = driver.find_elements_by_xpath("//a[@href]")
for elem in elems:
    print(elem.get_attribute("href"))

  

это сработало замечательно, я в значительной степени извлекаю все ссылки из результатов поиска Google, однако единственная проблема заключается в том, что мне нужны только те типы ссылок, которые я указал. Мой код возвращает ссылки, которые я хочу, и большое количество ссылок, которые мне не нужны.

Решение, которое, как я думал, будет работать идеально, заключается в том, что можно использовать тот факт, что все эти ссылки относятся к классу типа r .

Я попытался включить r в driver.find_elements, но не нашел никаких решений в Интернете.

Есть идеи

Комментарии:

1. @arundeepchohan Я выполнил следующие элементы = driver.find_elements_by_xpath(«//div[(@class,’r’)]/a») и получил сообщение об ошибке, что строка не является допустимым выражением Xpath

2. Я не совсем понимаю, я получил сообщение об ошибке, в котором говорится, что выражение недопустимо. и скрипт теперь не будет выполнять оценку. я сделал что-то не так?

3. //div[(@class, ‘r’)]//a[@href] попробуйте это

4. @arundeepchohan Я все еще получаю ту же ошибку

5. Я не верю, что это так, имя класса остается неизменным и согласуется по всей странице. Если я ищу что-то еще, остается то же имя класса.

Ответ №1:

Этот XPath поможет вам получить все a теги, содержащиеся https://www.linkedin.com в href .

 //div[@class='g']//div[@class='r']/a[contains(@href, 'https://www.linkedin.com')]
  

Комментарии:

1. почему вы включили часть //div[@class=’g’]? если я исключил его, я получил веб-элементы, однако, включив его, я получил нужные ссылки, которые я хотел. Далее, почему это работает вообще?

2. если вы хотите, вы можете исключить //div[@class='g'] . Я не понимаю? Further why does this work in general?

3. Нет, я запустил код без //div[@class='g'] , и он не сработал, поэтому он необходим. Мне было интересно узнать о синтаксисе, почему это так, как есть?

4. Это связано с относительным XPath, // означает, что он может запускаться из любого места в DOM, где есть div class='g' , а следующий div является потомком этого div. contains используется для проверки атрибута, имеющего значение. Вы можете узнать больше о XPath по этой ссылке