-
Notifications
You must be signed in to change notification settings - Fork 4
/
bgc_add_vol_pack.py
executable file
·101 lines (79 loc) · 4.33 KB
/
bgc_add_vol_pack.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#!/usr/bin/python3
# -*- coding: utf-8 -*-
"""
Copyright (C) 2016 Tuxicoman
This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License along with this program. If not, see <http://www.gnu.org/licenses/>.
---
Script modified by :
Francois B. (Makotosan/Shakasan)
Github :
https://github.com/shakasan/bgc_add_vol_pack
Changelog :
- Updated for Python3
- Any volume pack sizes
- WebDriverWait increased up to 20 to try to avoid login failures
- Headless mode added as optional parameter
- repeat and packSize are optional with default value to 1 pack of 150 GB
"""
import argparse
parser = argparse.ArgumentParser(description='Add extra data volume pack to Belgacom Internet')
parser.add_argument('login', type=str, help='Belgacom login email')
parser.add_argument('password', type=str, help='Belgacom password')
parser.add_argument('--repeat', type=int, default=1, help='Number of volume packs to add (1 pack by default)')
parser.add_argument('--packSize', type=str, default='150', help='Volume size of the pack to add (150 GB by default)')
parser.add_argument('--headless', type=int, default=1, help='Headless mode (enabled by default ; using xvfb)') #, action='store_true'
args = parser.parse_args()
try:
import selenium
except ImportError:
print ("Cannot import selenium. Try: $ pip3 install --user selenium")
sys.exit()
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
if args.headless :
try:
import pyvirtualdisplay
except ImportError:
print ("Cannot import pyvirtualdisplay. Try: $ pip3 install --user pyvirtualdisplay")
sys.exit()
from pyvirtualdisplay import Display
display = Display(visible=0, size=(1920, 1080))
display.start()
browser = webdriver.Firefox()
print ("Login ...")
browser.get('https://www.belgacom.be/login/fr/?ru=https%3A%2F%2Fadmit.belgacom.be%2F&pv=fls')
browser.switch_to_frame(browser.find_element_by_xpath('//iframe[@name="loginIframe"]'))
browser.switch_to_frame(browser.find_element_by_xpath('//iframe[@name="frame"]'))
browser.find_element_by_xpath('//input[@id="loginForm:userName"]').send_keys(args.login)
browser.find_element_by_xpath('//input[@id="loginForm:password"]').send_keys(args.password)
browser.find_element_by_xpath('//input[@id="loginForm:continue"]').click()
wait = WebDriverWait(browser, 20)
wait.until(lambda browser: browser.find_element_by_xpath('//div[@data-tms-id="TMS_myBillAndProducts"]'))
print ("Login done")
browser.find_element_by_xpath('//i[contains(@class, "icon-Internetlaptop")]').click()
for i in range(args.repeat):
print ("Round :", i+1)
print ("Choosing Volume pack " + args.packSize + " free")
wait.until(lambda browser: browser.find_element_by_xpath('//a[@href="#pb-tabs-notActivated"]'))
browser.find_element_by_xpath('//a[@href="#pb-tabs-notActivated"]').click()
elements = browser.find_elements_by_xpath('//span[contains(@class,"og-unit")]')
for element in elements :
extraVol = "Extra Volume " + args.packSize + " GB"
if extraVol in element.get_attribute("innerHTML"):
element.click()
break
myProduct = "myProducts/myOrder?selectedOption=hbs_volume_pack_" + args.packSize + "_free"
browser.find_element_by_xpath('//a[contains(@href,"' + myProduct + '")]').click()
wait.until(lambda browser: browser.find_element_by_xpath('//a[contains(@class,"pcp-order-next")]'))
browser.find_element_by_xpath('//a[contains(@class,"pcp-order-next")]').click()
print ("Approving general terms")
wait.until(lambda browser: browser.find_element_by_xpath('//input[@id="generalTerms"]'))
browser.find_element_by_xpath('//input[@id="generalTerms"]').click()
browser.find_element_by_xpath('//a[@eventdetail="confirmOrderLink"]').click()
print ("Confirmation")
browser.find_element_by_xpath('//a[@href="/eservices/wps/myportal/myProducts"]').click()
browser.quit()
if args.headless == "yes":
display.stop()