如何使用硒驱动程序python单击覆盖中的第一个链接

时间:2018-07-12 21:28:46

标签: python selenium selenium-webdriver

我想构建一个简单的应用程序,以使用自定义的Google搜索网址搜索Reddit并抓取结果,从而在Python中学习Selenium: https://cse.google.com/cse/publicurl?cx=011171116424399119392:skuhhpapys8

我试图在网站上进行搜索后点击覆盖图中的第一个链接,如图所示

image

我到目前为止:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from bs4 import BeautifulSoup

url = "https://cse.google.com/cse/publicurl?cx=011171116424399119392:skuhhpapys8"

driver = webdriver.Firefox()
driver.implicitly_wait(30)
driver.get(url)

python_button = driver.find_element_by_class_name('gsc-search-button')
inputElement = driver.find_element_by_id("gsc-i-id1")

soup_level1=BeautifulSoup(driver.page_source, 'lxml')

search = input("Ask Reddit")
inputElement.send_keys(search)
inputElement.send_keys(Keys.ENTER)

overlay = driver.find_element_by_class_name('gsc-results-wrapper-overlay')

first_link = driver.find_element_by_css_selector('a.gsc-title').click()

我得到了错误

selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: a.gsc-title

关于我所缺少的任何想法吗?我需要做些特殊的事情来处理这样的覆盖物吗?该CSS选择器有多个元素,我不是针对第一个选择器吗?

1 个答案:

答案 0 :(得分:1)

据我所知,链接的类是不是 gsc-title,是gs-title。因此,您的主要问题。还有其他几件事:

  1. 重叠式广告没有什么特别的,无需说明。因此,overlay = driver.<...>不是必需的,除非您使用它来确保显示结果(请参阅下一点)
  2. 更改隐式等待(driver.implicitly_wait(30))不是一个好主意;改用显式等待:

    from selenium.webdriver.support import expected_conditions as EC
    ...
    WebDriverWait(driver, 30).until(
        EC.presence_of_element_located((By.CSS_SELECTOR, "gsc-results-wrapper-overlay")))
    first_link = driver.find_element_by_css_selector('a.gs-title').click()