Как я могу найти свой сайт в первых 5 результатах поиска и перейти по ссылке - PullRequest
0 голосов
/ 16 февраля 2020

Я попробовал приведенный ниже код, но он не совсем правильный. Как я могу найти свой сайт в первых 5 результатах поиска и перейти по ссылке?

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome()
# driver.maximize_window()

driver.get("http://google.com")
search = driver.find_element_by_name('q')
search.click()

search.send_keys('python')
search.send_keys(Keys.ENTER)

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()

#driver.quit()

1 Ответ

1 голос
/ 17 февраля 2020

Это немного сбивает с толку, но, надеюсь, я могу помочь.

В вашем примере похоже, что вы пытаетесь:

  1. открыть Google и искать
  2. собрать 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...