我想构建一个简单的应用程序,以使用自定义的Google搜索网址搜索Reddit并抓取结果,从而在Python中学习Selenium: https://cse.google.com/cse/publicurl?cx=011171116424399119392:skuhhpapys8
我试图在网站上进行搜索后点击覆盖图中的第一个链接,如图所示
我到目前为止:
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选择器有多个元素,我不是针对第一个选择器吗?
答案 0 :(得分:1)
据我所知,链接的类是不是 gsc-title
,是gs-title
。因此,您的主要问题。还有其他几件事:
overlay = driver.<...>
不是必需的,除非您使用它来确保显示结果(请参阅下一点)更改隐式等待(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()