#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 : Вам нужно изменить логику. Я был бы признателен, если бы вы опубликовали новый вопрос с ожидаемым результатом.