2017-08-17 01:27:05 -06:00
|
|
|
import logging
|
|
|
|
import os
|
|
|
|
import time
|
|
|
|
|
|
|
|
from . import browser
|
|
|
|
from . import log
|
|
|
|
from . import dal
|
|
|
|
from . import pages
|
|
|
|
|
|
|
|
settings = {}
|
|
|
|
|
|
|
|
def init(settings_obj):
|
|
|
|
global settings
|
|
|
|
settings = settings_obj
|
|
|
|
|
|
|
|
browser.init(settings_obj)
|
|
|
|
dal.init(settings_obj)
|
|
|
|
pages.init(settings_obj)
|
|
|
|
log.init(settings_obj)
|
|
|
|
|
|
|
|
class Model:
|
|
|
|
def __init__(self):
|
|
|
|
self._webdriver = None
|
|
|
|
|
|
|
|
@property
|
|
|
|
def webdriver(self):
|
|
|
|
if not self._webdriver:
|
2017-08-17 01:45:07 -06:00
|
|
|
self._webdriver = browser.create_webdriver(settings.WEBDRIVER_BROWSER)
|
|
|
|
page_api = pages.LandingPage(self.webdriver)
|
|
|
|
page_api.goto_landing_page()
|
2017-08-17 01:27:05 -06:00
|
|
|
return self._webdriver
|
|
|
|
|
|
|
|
def do_random_page(self):
|
|
|
|
# Landing page (select language)
|
|
|
|
page_api = pages.LandingPage(self.webdriver)
|
|
|
|
page_api.goto_landing_page()
|
|
|
|
page_api.select_language(settings.PAGE_LANGUAGE)
|
|
|
|
|
|
|
|
# Main page
|
|
|
|
page_api = pages.MainPage(self.webdriver)
|
|
|
|
page_api.goto_random_article()
|
|
|
|
|
|
|
|
# Article page
|
|
|
|
pages_visited = []
|
|
|
|
while True:
|
|
|
|
page_api = pages.ArticlePage(self.webdriver)
|
|
|
|
|
|
|
|
title = page_api.get_title()
|
|
|
|
logging.debug('visited page: %s' % title)
|
|
|
|
if title in pages_visited:
|
|
|
|
logging.info('encountered loop at page = %s' % title)
|
|
|
|
break
|
|
|
|
if title == 'Philosophy':
|
|
|
|
logging.info('made it to philosophy in %s pages' % len(pages_visited))
|
|
|
|
pages_visited.append(title)
|
|
|
|
break
|
|
|
|
pages_visited.append(title)
|
|
|
|
|
|
|
|
rc = page_api.click_first_link()
|
|
|
|
if not rc:
|
|
|
|
logging.warn('failure: unable to continue (perhaps no valid links?)')
|
|
|
|
break
|
|
|
|
print()
|
|
|
|
|
|
|
|
|