Я думаю, причина того, что ваш код занимает так много времени, в том, что цикл в list_gen
отправляет кучу запросов на веб-страницу во время цикла. Если вы установите точку останова в вашем цикле и посмотрите на сетевую страницу браузера в инструментах разработки во время ее работы, вы увидите множество запросов, начинающихся с цикла. Я думаю, это потому, что страница загружает новые элементы, а селен прокручивает ее вниз.
Насколько я могу сказать, если вы хотите, чтобы это было быстрее, вы должны использовать что-то еще. Мое предложение было бы использовать Красивый суп.
from selenium import webdriver
from time import time
from bs4 import BeautifulSoup
driver = webdriver.Chrome()
i = time()
driver.get('https://nameberry.com/popular_names/US')
soup = BeautifulSoup(driver.page_source, 'html5lib')
boys_names = [x.getText() for x in soup.find_all("td", {"class", "boys"})]
girls_names = [x.getText() for x in soup.find_all("td", {"class", "girls"})]
e = time()
print(e - i) # gives ~ 14 sec for me
Это получает весь источник веб-страницы сразу и анализирует его вместо того, чтобы работать со списком объектов веб-драйвера, которые возвращает селектор css.
Если вы не используете браузер селена ни для чего другого и хотите получать только имена, вы можете использовать запросы, чтобы получить источник страницы еще быстрее, поскольку вам не нужно загружать браузер селена.
import requests
i = time()
response = requests.get('https://nameberry.com/popular_names/US')
soup = BeautifulSoup(response.content, 'html5lib')
boys_names = [x.getText() for x in soup.find_all("td", {"class", "boys"})]
girls_names = [x.getText() for x in soup.find_all("td", {"class", "girls"})]
e = time()
print(e - i) # gives ~ 3.2 sec