File size: 2,762 Bytes
8430de7
aead3eb
c412087
8430de7
aead3eb
492f7eb
aead3eb
 
8430de7
 
 
c412087
8430de7
aead3eb
8430de7
aead3eb
8430de7
 
aead3eb
 
 
 
8430de7
 
 
 
c412087
8430de7
aead3eb
 
c412087
 
aead3eb
 
 
c412087
aead3eb
 
 
492f7eb
c412087
 
aead3eb
 
 
 
 
 
 
c412087
aead3eb
 
 
c412087
aead3eb
 
 
492f7eb
c10a05f
c412087
c10a05f
c412087
492f7eb
 
8430de7
492f7eb
c412087
492f7eb
 
 
 
 
 
c412087
8430de7
 
 
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
import os
import time

from dotenv import load_dotenv
from selenium import webdriver
from selenium.common.exceptions import UnexpectedAlertPresentException
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys


class SeleniumPlayer:
    def __init__(self):
        self.wordle_url = self.get_wordle_url()
        self.driver = self.get_driver()
        self.log_in()

    def get_driver(self):
        chrome_options = Options()
        chrome_options.add_experimental_option("detach", True)
        driver = webdriver.Chrome(options=chrome_options)
        driver.get(self.wordle_url)
        return driver

    def get_wordle_url(self):
        load_dotenv()
        return os.getenv("RS_WORDLE_URL")

    def get_credentials(self):
        load_dotenv()
        username = os.getenv("RS_WORDLE_USER")
        password = os.getenv("RS_WORDLE_PASSWORD")
        return username, password

    def logged_in(self):
        return self.driver.current_url != self.wordle_url + "/login"

    def log_in(self):
        if not self.logged_in():
            time.sleep(2)
            login_div = self.driver.find_element(By.CLASS_NAME, "login-button")
            login_btns = login_div.find_elements(By.TAG_NAME, "button")
            login_btn = login_btns[0]
            login_btn.click()
            time.sleep(10)
            wordle_window = self.driver.window_handles[0]
            login_window = self.driver.window_handles[1]
            self.driver.switch_to.window(login_window)
            username, password = self.get_credentials()
            element = self.driver.find_element(By.ID, "identifierId")
            element.send_keys(username)
            element.send_keys(Keys.ENTER)
            time.sleep(10)
            element = self.driver.find_element(By.NAME, "password")
            element.send_keys(password)
            element.send_keys(Keys.ENTER)
            self.driver.switch_to.window(wordle_window)
            time.sleep(5)
            onboard_div = self.driver.find_element(
                By.CLASS_NAME, "onboarding-modal-container"
            )
            onboard_btn = onboard_div.find_elements(By.TAG_NAME, "button")
            onboard_btn[-1].click()

    def play_word(self, word):
        try:
            element = self.driver.find_element(By.TAG_NAME, "html")
            # simulate typing the letters in the word into the input field
            element.send_keys(word)
            # simulate pressing the Enter key
            element.send_keys(Keys.ENTER)
            time.sleep(5)
        except UnexpectedAlertPresentException:
            print("Won game alert on screen")

    def finish(self):
        self.driver.quit()