Перебрать список в Selenium и сохранить результаты в фрейме данных

Я пытаюсь перебрать список, выполнить поиск на веб-странице через селен и сохранить результаты в файле df. Как сохранить результаты цикла из каждого элемента списка в df?

from selenium.webdriver.common.keys import Keys
import pandas as pd
import numpy as np


url  = 'https://au.finance.yahoo.com/australia/'
driver_path = 'chromedriver.exe'
browser = Chrome(executable_path= driver_path)
loop_search = browser.find_element_by_id('yfin-usr-qry')

search_companies = ['Commonwealth Bank','Rio Tinto','Wesfarmers']


for i in search_companies:
    loop_search.send_keys(i)
    browser.find_element_by_id('search-button').click()
    comp = browser.find_element_by_id('quote-header-info').text
    df3 = [comp]```

Still fairly new to Python! Thank you!
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
31
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если вы просто запустите свой код и сделаете print(comp)

вы увидите следующую ошибку:

selenium.common.exceptions.StaleElementReferenceException: Message: stale element reference: element is not attached to the page document
(Session info: chrome=99.0.4844.74)

поэтому, прежде чем сохранять его в DF, нам нужно решить это:

это можно исправить, переопределив веб-элемент следующим образом в цикле:

loop_search = wait.until(EC.visibility_of_element_located((By.ID, "yfin-usr-qry")))

Полный код для сохранения в DF:

driver_path = 'chromedriver.exe'
browser = Chrome(executable_path= driver_path)
wait = WebDriverWait(driver, 20)
url  = 'https://au.finance.yahoo.com/australia/'
driver.get(url)

search_companies = ['Commonwealth Bank','Rio Tinto','Wesfarmers']

company_details_lst = []
for i in search_companies:
    time.sleep(2)
    loop_search = wait.until(EC.visibility_of_element_located((By.ID, "yfin-usr-qry")))
    loop_search.send_keys(i)
    time.sleep(2)
    wait.until(EC.element_to_be_clickable((By.ID, "search-button"))).click()
    time.sleep(2)
    comp = wait.until(EC.element_to_be_clickable((By.ID, "quote-header-info"))).text
    company_details_lst.append(comp)
    #print(comp)

data = {
         'Details': company_details_lst
        }

df = pd.DataFrame.from_dict(data)
df.to_csv('output.csv', index = 0

Импорт:

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

после запуска вашего кода вы должны увидеть файл csv в папке вашего проекта с именем output.csv

и внутреннее содержание будет:

Output

Спасибо @cruisepandey за исчерпывающий ответ и объяснение! Тем не менее, я хотел также перебрать список search_companies, чтобы заполнить его в файле df. как мне получить информацию о других пунктах списка Rio Tinto и Wesfarmers?

R Sta 19.03.2022 20:19

Это была проблема синхронизации данных, которую можно легко решить с помощью time. sleep(2), см. выше также измененный код, вы можете увеличить 2 до 5 или 7 в зависимости от успешности выполнения вашего кода.

cruisepandey 20.03.2022 06:53

Другие вопросы по теме