Это немного сбивает с толку, но, надеюсь, я могу помочь.
В вашем примере похоже, что вы пытаетесь:
- открыть Google и искать
- собрать 5 лучших результатов и нажать на 1 из ссылок => Я полагаю, это то, что вы пытаетесь сделать с помощью этого кода:
first_five = driver.find_elements_by_xpath(".//*[@id='rso']//div//h3/a")[:5]
link = first_five[:5].find_element_by_xpath('//*[@id="rso"]/div[4]/div/div[1]/div/div/div[1]/a/div/cite')
link.click()
Итак, я вижу 2 проблемы здесь: first_five уже собирает все ссылки и занимает первую пятерку, потому что у вас есть [:5]
в конце этого подобно И затем, при установке ссылки, похоже, что вы пытаетесь снова взять 5 лучших элементов, потому что вы делаете link = first_five[:5]
и снова используете [:5]
.
Кроме того, мне не понятно, почему вы используйте это:
.find_element_by_xpath('//*[@id="rso"]/div[4]/div/div[1]/div/div/div[1]/a/div/cite')
Вы уже нашли все элементы списка, зачем искать снова?
Я бы предложил следующее решение:
# Search
search.send_keys('habr.com python')
search.send_keys(Keys.ENTER)
# Store first 5 results
first_five = driver.find_elements_by_xpath("//div[@class='r']//a[.//h3]")[:5]
# Click the result you need by index: if your link in first, use [0]
link = first_five[0].click()
Обратите внимание, мой локатор в first_five
отличается от вашего, b c Я вижу При поиске на другой странице Google вы можете использовать ту, которая вам подходит.
Надеюсь, это помогло. Удачи.
Отредактировано:
Если вам нужно найти ссылку на определенный веб-сайт из топ-5 ссылок, используйте для l oop и просто найдите ваш URL в атрибуте href
элемента, если URL совпадает - он щелкнет:
first_five = driver.find_elements_by_xpath("//div[@class='r']//a[.//h3]")[:5]
for link in first_five:
if 'https://habr.com/ru/hub/python' in link.get_attribute('href'):
link.click()
break