# duolingo_delete_friends.py -rw-r--r-- 2.5 KiB View raw
                                                                                
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
import random
from selenium import webdriver 
from selenium.webdriver.common.action_chains import ActionChains 
from selenium.webdriver.chrome.options import Options

duolingo_user = os.environ['DULOINGO_USER']
duolingo_pw = os.environ['DULOINGO_PW']


def get_chrome_driver(nojs: bool):
    chrome_driver_path = "/Users/t.shears/Downloads/chromedriver_83" 
    if nojs:
        chrome_options = Options()
        chrome_options.add_experimental_option( "prefs",{'profile.managed_default_content_settings.javascript': 2})
        return webdriver.Chrome(chrome_driver_path,chrome_options=chrome_options)
    return webdriver.Chrome(chrome_driver_path)

driver = get_chrome_driver(nojs=False);

def get_random_wait():
    return random.randint(1,3)

def main():
    try: 
        driver.get(f"https://www.duolingo.com/?isLoggingIn=true")
        ActionChains(driver).pause(get_random_wait()).perform()

        i_have_account_el = driver.find_element_by_css_selector('[data-test="have-account"]')
        i_have_account_el.click()
        ActionChains(driver).pause(get_random_wait()).perform()

        email_input = driver.find_element_by_css_selector('[data-test="email-input"]')
        email_input.send_keys(duolingo_user)
        ActionChains(driver).pause(get_random_wait()).perform()

        pw_input = driver.find_element_by_css_selector('[data-test="password-input"]')
        # todo: get pw from env
        pw_input.send_keys(duolingo_pw)
        ActionChains(driver).pause(get_random_wait()).perform()

        login_btn_el = driver.find_element_by_css_selector('[data-test="register-button"]')
        login_btn_el.click()
        ActionChains(driver).pause(5).perform()

        while True:
            driver.get(f"https://www.duolingo.com/profile/BTBTravis/following")
            ActionChains(driver).pause(get_random_wait() + 15).perform()

            try:
                friend_anchors = driver.find_elements_by_css_selector('.xdvY3 a')
                friend_urls = []
                for anchorEl in friend_anchors:
                    friend_urls.append(anchorEl.get_attribute('href'))

                for url in friend_urls:
                    driver.get(url)
                    ActionChains(driver).pause(get_random_wait() + 10).perform()
                    follow_btn_el = driver.find_element_by_css_selector('._91Tq4._2JXBr button') 
                    follow_btn_el.click()
                    ActionChains(driver).pause(get_random_wait() + 3).perform()
            except:
                print("problem retrying")

    finally: 
        driver.quit()

main()
# Pipfile -rw-r--r-- 168 bytes View raw
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true

[dev-packages]

[packages]
requests = "*"
selenium = "*"

[requires]
python_version = "3.8"