我怎样才能在前5个搜索结果中找到我的网站并点击链接

2024-04-20 12:10:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试了下面的代码,但不完全正确。我怎样才能在前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()

Tags: fromimportdivsendsearchbydriverselenium
1条回答
网友
1楼 · 发布于 2024-04-20 12:10:00

这有点让人困惑,但希望我能帮上忙

在您的示例中,您似乎正在尝试:

  1. 打开谷歌搜索
  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()

我在这里看到了两个问题:first_five已经收集了所有链接并占据了前五名,因为在这类链接的末尾有[:5]。 然后,当设置link时,看起来您正在尝试再次获取前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中的定位器与您的不同,因为我在搜索时看到不同的谷歌页面,您可能希望使用适合您的页面

希望这有帮助。祝你好运

编辑:

如果您需要从前5个链接中搜索指向某个网站的链接,请使用for循环,只要在元素的href属性中搜索您的url,如果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

相关问题 更多 >