То, что вы сделали в первую очередь, неправильно. Возможно, вы хотели использовать driver.find_element_by_css_selector()
вместо driver.find_element_by_class_name()
. Тем не менее, лучший способ сделать то же самое - go для библиотеки запросов, поскольку искомый контент доступен в источнике страницы. Попробуйте запустить следующий скрипт, чтобы все они проходили по нескольким страницам.
import requests
from bs4 import BeautifulSoup
link = 'https://www.nielsen.com/us/en/insights/related-tag/covid-19/'
while True:
r = requests.get(link)
soup = BeautifulSoup(r.text,"html.parser")
for item in soup.select("article"):
article_link = item.select_one("h2.entry-title > a[href]")['href']
article_title = item.select_one("h2.entry-title > a[href]").get_text(strip=True)
print(article_link,article_title)
try:
link = soup.select_one("a[class^='next']")['href']
except TypeError:
break
Если вы все еще хотите использовать селен, вот как вы можете это сделать:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
with webdriver.Chrome() as driver:
driver.get("https://www.nielsen.com/us/en/insights/related-tag/covid-19/")
while True:
for elem in WebDriverWait(driver,10).until(EC.presence_of_all_elements_located((By.CSS_SELECTOR,"article"))):
article_link = WebDriverWait(elem,10).until(EC.presence_of_element_located((By.CSS_SELECTOR,"h2.entry-title > a[href]"))).get_attribute("href")
article_title = WebDriverWait(elem,10).until(EC.presence_of_element_located((By.CSS_SELECTOR,"h2.entry-title > a[href]"))).text
print(article_link,article_title)
try:
WebDriverWait(driver,5).until(EC.presence_of_element_located((By.CSS_SELECTOR, "a[class^='next']"))).click()
WebDriverWait(driver,5).until(EC.staleness_of(elem))
except:
break