Browser Remote Control

The setup on this page is done with a fresh ubuntu desktop 20.04 lts installation.

The final script fetches all account balances from the German bank comdirect, and prints the results on the command line.

Firefox runs headless, and is controlled by Selenium with Python.

Dependencies

sudo apt install python3 python3-pip
pip3 install selenium
sudo apt install firefox-geckodriver

Script

#!/usr/bin/python3
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.firefox.options import Options
import time
 
options = Options()
#options.headless = True
options.headless = False
browser = webdriver.Firefox(options=options)
 
browser.get("https://kunde.comdirect.de/lp/wt/login?execution=e1s1")
 
# Cookies
 
browserWait = WebDriverWait(browser, 10)
element = browserWait.until(EC.element_to_be_clickable((By.ID, "uc-btn-more-info-banner")))
element.click()
time.sleep(0.5)
element = browserWait.until(EC.element_to_be_clickable((By.CLASS_NAME, "uc-save-settings-button")))
element.click()
time.sleep(0.5)
 
# Login
 
browser.find_element(By.ID, "param1Input").send_keys("<USERID>")
browser.find_element(By.ID, "param3Input").send_keys("<USERPIN>")
browser.find_element(By.ID, "loginAction").click()
 
# Account Balances
 
accountTableClass = browser.find_element(By.CLASS_NAME, "table--list")
accountTable = accountTableClass.find_element(By.TAG_NAME, "tbody")
accountRows = accountTable.find_elements(By.TAG_NAME, "tr")
for row in accountRows:
  accountColumns = row.find_elements(By.TAG_NAME, "td")
  print("Name: " + accountColumns[0].text)
  print("Kontostand: " + accountColumns[4].text)
 
# Logout
 
browser.find_element(By.ID, "llLink").click()
browserWait.until(EC.text_to_be_present_in_element((By.TAG_NAME, "h1"), "Sie haben sich erfolgreich abgemeldet"))
browser.close()

Result

$ ./get_balances.py
Name: Das tolle Konto
Kontostand: 10,00 €
Name: Ein ganz anderes Konto
Kontostand: 101,12 €

Further Readings

https://www.selenium.dev/documentation/en/webdriver/web_element/

https://www.selenium.dev/documentation/en/webdriver/keyboard/

https://www.selenium.dev/documentation/en/driver_idiosyncrasies/driver_specific_capabilities/

https://www.selenium.dev/selenium/docs/api/py/webdriver_support/selenium.webdriver.support.expected_conditions.html#module-selenium.webdriver.support.expected_conditions

https://www.tutorialspoint.com/python/