Моя цель - автоматизировать загрузку 1-минутных тиковых данных (csv) из Fidelity.
Проблема в том, что веб-драйвер не открывает раскрывающийся список, в котором отображаются различные варианты интервалов.
Я определил, что кнопка не нажимается, так как, как написано ниже, код python печатает только оператор 'ElementNotInteractableException', и я не вижу раскрывающегося списка, когда код запущен.
То, что я пробовал до сих пор, - это как xpath, так и путь селектора для элемента раскрывающейся кнопки с заголовком «DAILY». Я также попытался использовать элементы, окружающие кнопку раскрывающегося списка в коде HTML, например маленький треугольник рядом с «DAILY». Я также пробовал использовать Select, но получил ошибку, поскольку элемент был div.
Возможно, это актуально, я также не могу нажимать другие кнопки в контейнере, содержащем раскрывающийся список интервалов, например кнопки, которые изменяют диапазон отображаемые цены. И мне удалось открыть другие раскрывающиеся списки на экране, а именно раскрывающийся список, который позволяет загружать CSV. Наконец, «не нажимаемые» кнопки находятся в нижней части экрана.
Все предложения приветствуются. Если есть детали кода или html фрагменты, дайте мне знать.
Веб-сайт (для доступа требуется учетная запись Fidelity): https://screener.fidelity.com/ftgw/etf/gotoCL/snapshot/advancedChart.jhtml?symbols=KO
python код:
from selenium import webdriver as webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By as By
import selenium.common.exceptions as exceptions
from selenium.webdriver.support import (
expected_conditions as EC)
import time
class Scraper:
def __init__(self):
self.driver = webdriver.Safari()
def scrapes(self):
try:
self.signIn()
time.sleep(3)
self.getCSV('KO')
except exceptions.TimeoutException:
print('TimeoutException')
except exceptions.ElementNotInteractableException:
print('ElementNotInteractableException')
self.driver.close()
def signIn(self):
driver = self.driver
driver.get('https://www.fidelity.com/')
#enter username
ecTuple = (By.CSS_SELECTOR, 'input#userId-input')
elPresent = EC.element_to_be_clickable(ecTuple)
WebDriverWait(driver, 30).until(elPresent).send_keys(
"USERNAME")
#enter password
driver.find_element_by_css_selector(
'input#password').send_keys("PASSWORD")
#click login button
driver.find_element_by_css_selector(
'button#fs-login-button').click()
def getCSV(self, tickerStr):
driver = self.driver
stockURL = (
'https://screener.fidelity.com/' +
'ftgw/etf/gotoCL/snapshot/advancedChart' +
'.jhtml?symbols=' + tickerStr
)
driver.get(stockURL)
# open intervals dropdown
drpDnXP = '//*[@id="selected_frequency"]'
ecTuple = (By.XPATH, drpDnXP)
elPresent = EC.element_to_be_clickable(ecTuple)
WebDriverWait(driver, 30).until(elPresent).click()
# choose one minute intervals
minute1XP = '//*[@id="frequency_0"]'
driver.find_element_by_xpath(minute1XP).click()
print(1)
Scraper().scrapes()
html рассматриваемого элемента раскрывающейся кнопки:
<div id="selected_frequency" class="ng-binding ng-scope">DAILY</div>
Некоторые окружающие html код:
<div class="selected-item-container">
<div class="selected-item ng-binding">
<div id="selected_frequency" class="ng-binding ng-scope">DAILY</div>
</div>
<span class="triangle"></span>
</div>