MechanicalSoup не находит существующий тег - PullRequest
0 голосов
/ 06 мая 2018

Моя проблема: до 31.03.2008 моя функция get_settldays () возвращала ожидаемые значения даты. С тех пор урегулирование пусто; но проверяя этот тег в браузере Mozilla, там ожидаемый контент

import sys, mechanicalsoup, re, datetime
def get_settldays(soup):
    settlDays = soup.find('select', id="cmeTradeDate")
    settlDays = re.findall('\d\d/\d\d/\d\d\d\d',str(settlDays.contents))
    return [datetime.datetime.strptime(adat, '%m/%d/%Y') for adat in settlDays]

url =  "http://www.cmegroup.com/trading/equity-index/us-index/e-mini-sandp500_quotes_settlements_futures.html"
browser = mechanicalsoup.StatefulBrowser()
try:
    browser.open(url)
except:
    print('Error:',  str(sys.exc_info()[1]))
    browser.close()
    quit()
soup = browser.get_current_page()

settlDays = soup.find('select', id="cmeTradeDate")
print('\nsettlDays', settlDays)  #remains empty??
print('\nsettlDays.content', settlDays.contents)
browser.session.close()
browser.close()

Есть ли идея, почему значение параметра assignlDays.contents остается пустым?

1 Ответ

0 голосов
/ 07 мая 2018

Содержимое <select id="cmeTradeDate">...</select> заполняется JavaScript. Без javascript содержимое просто \n вместо списка параметров даты. Вы можете проверить это в браузере, таком как Chrome, зайдя в Настройки -> Настройки контента -> JavaScript и переключив «Разрешено» в выключенное положение, а затем перезагрузив страницу.

Поскольку MechanicalSoup не поддерживает javascript, вы можете использовать инструмент, подобный Selenium .

...