1
+ import os
2
+ import time
3
+ from dotenv import load_dotenv
4
+ from selenium import webdriver
5
+ from selenium .webdriver .common .by import By
6
+ from selenium .webdriver .edge .service import Service
7
+ from selenium .webdriver .edge .options import Options
8
+
9
+ class ExtendExpiryBot :
10
+ def __init__ (self , driver_path , mode = 'default' ):
11
+ self .service = Service (driver_path )
12
+ self .options = Options ()
13
+ if mode == 'headless' :
14
+ self ._headless_mode ()
15
+ elif mode == 'default' :
16
+ self .options .add_experimental_option ('detach' , True )
17
+
18
+ self .driver = webdriver .Edge (
19
+ service = self .service , options = self .options
20
+ )
21
+ self .website_url = 'https://www.pythonanywhere.com/'
22
+
23
+ def open_website (self ):
24
+ self .driver .get (self .website_url )
25
+
26
+ def go_to_login_page (self ):
27
+ login = self .driver .find_element (By .LINK_TEXT , 'Log in' )
28
+ login .click ()
29
+
30
+ def sign_in (self , username : str , password : str ):
31
+ username_input = self .driver .find_element (By .NAME , 'auth-username' )
32
+ username_input .send_keys (username )
33
+ password_input = self .driver .find_element (By .NAME , 'auth-password' )
34
+ password_input .send_keys (password )
35
+ login_btn = self .driver .find_element (By .ID , 'id_next' )
36
+ login_btn .click ()
37
+
38
+ def go_to_tasks_page (self ):
39
+ tasks = self .driver .find_element (By .ID , 'id_tasks_link' )
40
+ tasks .click ()
41
+
42
+ def extend_expiry (self ):
43
+ extend_expiry_btn = self .driver .find_element (
44
+ By .CSS_SELECTOR , 'button.extend_scheduled_task' )
45
+ extend_expiry_btn .click ()
46
+
47
+ def log_out (self ):
48
+ logout_btn = self .driver .find_element (By .CSS_SELECTOR , '.logout_link' )
49
+ logout_btn .click ()
50
+
51
+ def _headless_mode (self ):
52
+ self .options .add_argument ('--headless' )
53
+
54
+ if __name__ == '__main__' :
55
+ load_dotenv ("config.env" )
56
+
57
+ USER = os .environ .get ('PA_USER' )
58
+ PASSWORD = os .environ .get ('PA_PASS' )
59
+
60
+ webdriver_path = r'C:\Development\chromedriver\msedgedriver.exe'
61
+ expBot = ExtendExpiryBot (webdriver_path )
62
+ expBot .open_website ()
63
+ time .sleep (2 )
64
+ expBot .go_to_login_page ()
65
+ time .sleep (1 )
66
+ expBot .sign_in (USER , PASSWORD )
67
+ time .sleep (4 )
68
+ expBot .go_to_tasks_page ()
69
+ time .sleep (2 )
70
+ expBot .extend_expiry ()
71
+ time .sleep (1 )
72
+ expBot .log_out ()
0 commit comments