Использование Selenium и Python для очистки сайта Morningstar. Selenium не загружает полную веб-страницу - PullRequest
1 голос
/ 27 января 2020

Вот мой код:

from selenium import webdriver
import pandas as pd
from lxml import etree

url = 'https://www.morningstar.com/stocks/xbsp/UGPA3/quote'
browser = webdriver.Chrome()
browser.get(url)
htmlpage = browser.page_source

doc = etree.HTML(htmlpage)
cap = doc.xpath(
    '/html/body/div[1]/div/div/div[3]/main/div[2]/div/div/div[1]/sal-components/section/div/div/div[1]/div/div[2]/div/div/div/div[2]/ul/li[7]/div/div[2]/text()')

print(cap)

Я пытаюсь соскрести номер рыночной капитализации с веб-страницы.

Я узнал после записи переменной htmlpage в файл, что проблема является то, что он не загружает всю страницу. Он загружает 2228 КБ, в то время как мой браузер загружает файл размером 2664 КБ. html и папку, в которой нет необходимости. Если я вручную сохраню страницу в своем браузере и использую ее содержимое в качестве входных данных для etree. HTML (), это работает, но я хочу автоматизировать.

1 Ответ

0 голосов
/ 27 января 2020

попробуйте

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

    CHROME_DRIVER_PATH = "/usr/local/bin/chromedriver"

    url = 'https://www.morningstar.com/stocks/xbsp/UGPA3/quote'
    browser = webdriver.Chrome(executable_path=CHROME_DRIVER_PATH)

    browser.get(url)

    time.sleep(2)

    # get cap  value from page source and wait for element is present
    cap = WebDriverWait(browser, 10).until(
        EC.element_to_be_clickable((By.XPATH,
                                    '//*[@id="__layout"]/div/div[3]/main/div[2]/div/div/div[1]/sal-components/section/div/div/div[1]/div/div[2]/div/div/div/div[2]/ul/li[7]/div/div[2]')))
    cap_value = cap.text
    print(cap_value)
...