Возникли проблемы при получении данных с помощью css selector / xpath в селене - PullRequest
0 голосов
/ 16 октября 2018

Я пытаюсь извлечь данные из ссылки ниже, используя селен через python: www.oanda.com

Но я получаю сообщение об ошибке: «Невозможно найтиЭлемент".В консоли браузера я попытался использовать этот селектор Css:

document.querySelector('div.position.short-position.style-scope.position-ratios-app')

Этот querySelector возвращает мне данные для короткого процента 1-й строки в консоли браузера (для этого теста), но когда я использовал этот селектор в PythonСкрипт ниже он дает мне ошибку, что «Невозможно найти элемент» или иногда пустую sctring.Пожалуйста, предложите мне решение, если есть. Будем благодарны, спасибо :)

# All Imports
import time
from selenium import webdriver

#will return driver
def getDriver():
    driver = webdriver.Chrome()
    time.sleep(3)
    return driver


def getshortPercentages(driver):
    shortPercentages = []
    shortList = driver.find_elements_by_css_selector('div.position.short-position.style-scope.position-ratios-app')
    for elem in shortList:
        shortPercentages.append(elem.text)
    return shortPercentages

def getData(url):
    driver = getDriver()
    driver.get(url)
    time.sleep(5)
    # pagesource = driver.page_source
    # print("Page Source: ", pagesource)
    shortList = getshortPercentages(driver)
    print("Returned source from selector: ", shortList)


if __name__ == '__main__':
    url = "https://www.oanda.com/forex-trading/analysis/open-position-ratios"
    getData(url)

1 Ответ

0 голосов
/ 16 октября 2018

Обязательные данные находятся внутри iframe, поэтому вам нужно переключиться на iframe перед обработкой элементов:

driver.switch_to.frame(driver.find_element_by_class_name('position-ratios-iframe'))

Также обратите внимание, что данные внутри iframe являются динамическими, поэтому убедитесь, что вы используете Явное / явное ожидание (использование time.sleep(5) ИМХО не лучшее решение)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...