С помощью selenium собирать данные

#python #selenium #web-scraping

#python #селен #очистка веб-страниц

Вопрос:

у меня проблема со сбором данных с помощью selenium webdriver. Я получаю код ошибки и текст (заголовок)

 DevTools listening on ws://127.0.0.1:53770/devtools/browser/99e38459-8949-448a-9d5c-bea5b9d8c93c
[8136:23432:1119/174813.994:ERROR:edge_auth_errors.cc(376)] EDGE_IDENTITY: Get Default OS Account failed: Error: Primary Error: kTokenRequestFailed, Secondary Error: kTokenFetchUserInteractionRequired, Platform error: -2138701818, hex:80860006, Error string: Error code: 0x80860006, error message:Error

Stromvergleich von VERIVOX – Tarif stressfrei wechseln und sparen.
PS C:pythonweb craper verevox>
 

Мой код:

 from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time 
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

PATH =".msedgedriver.exe"
driver = webdriver.Edge(PATH)

driver.get("https://www.verivox.de/stromvergleich/vergleich/#/?plz=10555amp;persons=onamp;usage=3500amp;bonus=OnlyCompliantamp;profile=H0amp;product=electricityamp;source=1amp;q=WzYsMCwxLDEsMSwxLDEsMiwyMCwwLDEsNzQxMTIyLCI3MTA4NSIsMSwyNDAsMjQwLDM1MDAsMCwwLDAsOTk5LC0xLC0xLC0xLDAsMCwiVG90YWxDb3N0cyIsIkFzY2VuZGluZyIsIk5vbmUiLDM4LCJBbm51YWxDb3N0VmlldyIsMF0=amp;partnerid=1")
print(driver.title)

try:
    main = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.CLASS_NAME, "nrg-main-container"))
    )
    
    articles = main.find_elements_by_tag_name("li")
    for article in articles:
        header = article.find_element_by_class_name("result-item")
        print(header.text)



finally:
    driver.quit()
 

Я хочу получить данные из информации о заголовке top 20, которая установлена для элемента результата имени класса. Изображение ниже
введите описание изображения здесь

Комментарии:

1. использовать python-запросы для удаления данных?

Ответ №1:

Используйте WebDriverWait() и ждите visibility_of_all_elements_located () и следующий css-селектор.

 allheader=WebDriverWait(driver,20).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR,"li[class='result-item'] .result-name-area>.result-name")))
for header in allheader:
     print("Header: "   header.text)
 

Вывод на консоль:

 Header: Easy24 Strom
Header: Vollstrom sicher
Header: Natur24 Strom
Header: eprimoStrom 24
Header: E.ON Strom Extra
Header: Strom Zuhause (24
Header: Super Schlau Fuxx
Header: Q.ENERGY Eco24 Plus
Header: MeinSmartTarif Strom
Header: Doppel Plus
Header: innogy direkt Strom
Header: ÖkoStrom Relax 24
Header: E.ON Strom 24
Header: Easy12 Extra Strom
Header: innogy direktStrom12
Header: Spar Smart Sofort 12
Header: E.ON Strom Extra
Header: eprimo PrimaKlima
Header: Lidl-Strom Extra
Header: R(H)EINPOWER Strom
 

Комментарии:

1. спасибо, вы мне очень помогли, у меня вопрос, нужен ли мне поиск более одного, как я могу это сделать? в той же строке это будет идеально

2. @Kalakutas : Вам нужно изменить логику. Я был бы признателен, если бы вы опубликовали новый вопрос с ожидаемым результатом.