Очистить данные в теге скрипта - PullRequest
0 голосов
/ 19 октября 2019

Может кто-нибудь предложить способ очистки данных в теге <script>, в частности, в этом случае 30-минутная таблица из AEMO (https://www.aemo.com.au/aemo/apps/visualisations/elec-nem-priceanddemand.html).

Чтобы получить таблицу данных, мне понадобитсящелкнуть либо по кнопке, чтобы отобразить таблицу на веб-сайте, либо по кнопке загрузки. Однако препятствием здесь является то, что кнопка и текст для таблицы скрыты за тегом <script>, когда я пытался очистить его с помощью Selenium.

Вот мой код:

# import libraries
import urllib.request
from bs4 import BeautifulSoup
from selenium import webdriver
import time
import pandas as pd
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait

url = "https://www.aemo.com.au/aemo/apps/visualisations/elec-nem-priceanddemand.html"
browser = webdriver.Safari(executable_path='/usr/bin/safaridriver')
browser.get(url)
try:
    print(browser.page_source)
except:
    print("not found")
finally:
    browser.quit()

и часть результата:

<body aurelia-app="visualisation-main" data-gr-c-s-loaded="true">
    <div class="splash">
      <div class="message"><span class="icon-spinner"></span></div>
    </div>

    <script src="jspm_packages/system.js"></script>
    <script src="config.js"></script>
    <script>
      System.import('aurelia-bootstrapper');
    </script>


</body></html>

1 Ответ

0 голосов
/ 19 октября 2019

Selenium имеет свой собственный способ определения местоположения элементов, например find_element_by_css_selector . И часто браузерам требуется некоторое время для визуализации элементов, поэтому вам может понадобиться WebdriverWait .

Вот пример для извлечения спотовой цены со страницы:

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

url = 'https://www.aemo.com.au/aemo/apps/visualisations/elec-nem-priceanddemand.html'

browser = webdriver.Chrome()
browser.get(url)

sel = 'body > div > compose > div > compose.fill-height.flex-container.au-target > compose > div > div:nth-child(1) > div'
element = WebDriverWait(browser, 10).until(
    EC.presence_of_element_located((By.CSS_SELECTOR, sel))
)

print(element.text)

Результат

$92.02/MWh
...