Now using urljoin to join urls.
[toast/webscraper/bob.git] / bob_download.py
index 9896b7a39f1bdefad64e027628a43655ac1c16d6..2a00b2796b416355f3d8aac944091a21ba35edd3 100644 (file)
@@ -2,6 +2,7 @@
 import os
 import re
 import time
+from urllib.parse import urljoin
 import requests
 from bs4 import BeautifulSoup
 
@@ -16,8 +17,7 @@ session.headers.update({
     })
 
 # load login page
-main_url = 'https://rechnung.bob.at/'
-response = session.get(main_url)
+response = session.get('https://rechnung.bob.at/')
 html = BeautifulSoup(response.text, 'html.parser')
 
 # fill out login form (name='asmpform') with username=<phone number> and password
@@ -36,7 +36,7 @@ response = session.post(form['action'], data=fields)
 # https://rechnung.bob.at/bill/pdf/;BOBOBPSESSIONID=B7DB9938A3B9541E3D0EB6CD728F54C0.obpBobCustomer4Rechnungskopie_1509_523260091_1.pdf?bsn=61
 # same after reload:
 # '/bill/pdf/Rechnungskopie_1509_523260091_1.pdf?bsn=61'
-response = session.get(main_url)
+response = session.get(response.url)
 html = BeautifulSoup(response.text, 'html.parser')
 
 # Download PDFs
@@ -49,7 +49,7 @@ for link in links:
     assert filename.startswith('Rechnungskopie_')
     filepath = os.path.join(dest_dir, filename)
     if not os.path.exists(filepath):
-        response = session.get(main_url[:-1] + url)
+        response = session.get(urljoin(response.url, url))
         assert response.status_code == 200
         with open(filepath, 'wb') as file:
             file.write(response.content)
@@ -60,11 +60,11 @@ regexp = re.compile(r'\/bill.set.obp\?')
 links = html.findAll('a', href=regexp)
 for link in links:
     url = link['href']
-    response = session.get(main_url[:-1] + url)
+    response = session.get(urljoin(response.url, url))
     assert response.status_code == 200
     assert 'OBP.utils.reloadAfterDelay("/bill.ctn.cdr.set.obp",5);' in response.text
     time.sleep(5) # OBP.utils.reloadAfterDelay("/bill.ctn.cdr.set.obp",5);
-    response = session.get(main_url + 'bill.ctn.cdr.set.obp')
+    response = session.get(urljoin(response.url, 'bill.ctn.cdr.set.obp'))
     assert 'OBP.utils.reloadAfterDelay("/bill.ctn.cdr.set.obp",5);' not in response.text
     html = BeautifulSoup(response.text, 'html.parser')
     assert html.find('a', id='link_csv_download') is not None