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())
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
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)
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
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)
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)
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)
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']