Beispiel #1
0
def fetch_latest_bill(driver: webdriver.remote.webdriver.WebDriver) -> bytes:
    driver.get('https://one.viseca.ch/de/rechnungen')
    driver.implicitly_wait(30)
    latest_bill_a_elem = driver.find_element(
        By.CSS_SELECTOR, '#statement-list-statement-date0 a')
    latest_bill_id = extract_bid(latest_bill_a_elem.get_attribute('id'))
    return fetch_bill(latest_bill_id, driver.get_cookies())
Beispiel #2
0
def fetch_account_statement_csv(driver: webdriver.remote.webdriver.WebDriver,
                                download_url: str) -> bytes:
    fetch_page = 'https://www.bcge.ch/next/' + download_url
    cookies = driver_cookie_jar_to_requests_cookies(driver.get_cookies())
    headers = prepare_headers(cookies, get_user_agent(driver))
    response = requests.get(fetch_page, headers=headers, cookies=cookies)
    if not response.ok:
        raise Exception("The statement fetch request has failed. " +
                        ('Response reason: {0}, parameters: {1}'
                         ).format(response.reason, (fetch_page, cookies)))
    return response.content
Beispiel #3
0
def fetch_account_history(driver: webdriver.remote.webdriver.WebDriver,
                          creds: Credentials) -> bytes:
    """Fetches Charles Schwab's account history using Selenium

    Returns:
        A CSV UTF-8 encoded statement.
    """
    driver.implicitly_wait(30)
    login(creds, driver)
    cookies = driver_cookie_jar_to_requests_cookies(driver.get_cookies())
    return fetch_account_history_csv(cookies)
Beispiel #4
0
def fetch_all_transactions_since_2018(
        driver: webdriver.remote.webdriver.WebDriver) -> bytes:
    from_date = datetime.date(2018, 1, 1)
    to_date = datetime.date.today()
    resp = requests.post(
        FETCH_PAGE,
        json=download_request_json_payload(from_date, to_date),
        cookies=driver_cookie_jar_to_requests_cookies(driver.get_cookies()))
    if not resp.ok:
        raise Exception(
            "The CSV fetch request has failed. Response reason: {0}".format(
                resp.reason))
    return resp.content
Beispiel #5
0
def fetch_account_statement(
        driver: webdriver.remote.webdriver.WebDriver) -> bytes:
    logging.info("Going to the reports page.")
    go_to_reports_page(driver)
    logging.info("Reports page loaded, fetching cookies.")
    last_get = get_last_get_request(driver)
    if last_get is None:
        raise Exception(
            'Could not fetch the account statement, because we did not ' +
            'find any previous GET requests in the session to initialize ' +
            'the fetch requests ')
    cookies = driver_cookie_jar_to_requests_cookies(driver.get_cookies())
    logging.info("Fetching the CSV file.")
    return fetch_account_statement_csv(dict(last_get.headers), cookies)
Beispiel #6
0
def fetch_portfolio(driver: webdriver.remote.webdriver.WebDriver) -> bytes:
    logging.info("Fetching portfolio.")
    portfolioSideBarLink = driver.find_element(By.CSS_SELECTOR,
                                               '[href="#/portfolio"]')
    portfolioSideBarLink.click()
    exportButton = driver.find_element(By.CSS_SELECTOR,
                                       '[data-name="exportButton"]')
    exportButton.click()
    time.sleep(1)
    reportExportForm = driver.find_element(By.CSS_SELECTOR,
                                           '[data-name="reportExportForm"]')
    csvLink = reportExportForm.find_element(
        By.XPATH, "//a[normalize-space(text()) = 'CSV']")
    csvFetchUrl = csvLink.get_attribute('href')
    cookies = driver_cookie_jar_to_requests_cookies(driver.get_cookies())
    return fetch_csv(csvFetchUrl, cookies)
Beispiel #7
0
def fetch_account(driver: webdriver.remote.webdriver.WebDriver) -> bytes:
    logging.info("Fetching account.")
    driver.get(
        get_account_overview_url(
            from_date=get_three_months_ago(date.today()),
            to_date=date.today(),
        ))
    exportButton = driver.find_element(By.CSS_SELECTOR,
                                       '[data-name="exportButton"]')
    exportButton.click()
    time.sleep(1)
    reportExportForm = driver.find_element(By.CSS_SELECTOR,
                                           '[data-name="reportExportForm"]')
    csvLink = reportExportForm.find_element(
        By.XPATH, "//a[normalize-space(text()) = 'CSV']")
    csvFetchUrl = csvLink.get_attribute('href')
    cookies = driver_cookie_jar_to_requests_cookies(driver.get_cookies())
    return fetch_csv(csvFetchUrl, cookies)
Beispiel #8
0
def fetch_download_url(driver: webdriver.remote.webdriver.WebDriver,
                       account_id: str) -> str:
    fetch_page = ('https://www.bcge.ch/' +
                  'next/api/accounts/{0}/bookings/export'.format(account_id))
    json_payload = download_url_request_json_payload(
        account_id,
        from_date=datetime.date(2018, 1, 1),
        to_date=datetime.date.today())
    cookies = driver_cookie_jar_to_requests_cookies(driver.get_cookies())
    headers = prepare_headers(cookies, get_user_agent(driver))
    response = requests.post(fetch_page,
                             headers=headers,
                             cookies=cookies,
                             json=json_payload)
    if not response.ok:
        raise Exception("The URL fetch request has failed. " +
                        ('Response reason: {0}, parameters: {1}'
                         ).format(response.reason, (fetch_page, headers,
                                                    cookies, json_payload)))
    return json.loads(response.content)['data']['downloadUrl']