Day 051

AWESOMee·2022년 3월 25일
0

Udemy Python Bootcamp

목록 보기
51/64
post-thumbnail

Udemy Python Bootcamp Day 051

Internet Speed Twitter Complaint Bot

Create a Class

from selenium import webdriver
from selenium.webdriver.chrome.service import Service

SERVICE = Service("/Users/****/Development/chromedriver")
PROMISED_DOWN = 150
PROMISED_UP = 10
TWITTER_EMAIL = "*******@*****.***"
TWITTER_PASSWORD = "***********"


class InternetSpeedTwitterBot:
    def __init__(self, service):
        self.driver = webdriver.Chrome(service=service)
        self.down = 0
        self.up = 0
        
    def get_internet_speed(self):
        pass

    def tweet_at_provider(self):
        pass


bot = InternetSpeedTwitterBot(SERVICE)
bot.get_internet_speed()
bot.tweet_at_provider()

class작성하는 건 언제쯤 익숙해지실런지..

Get Internet Speeds

import time

...
    def get_internet_speed(self):
        time.sleep(5)
        self.down = self.driver.find_element(By.XPATH, '/html/body/div[3]/div/div[3]/div/div/div/div[2]/div[3]/div[3]/div/div[2]/div[1]/div[2]/div/div[2]/div/div[2]/span')
        self.up = self.driver.find_element(By.XPATH, '/html/body/div[3]/div/div[3]/div/div/div/div[2]/div[3]/div[3]/div/div[2]/div[1]/div[2]/div/div[3]/div/div[2]/span')
        print(f"down: {self.down.text}")
        print(f"up: {self.up.text}")
...

#output
down: 91.12
up: 87.30

Building a Twitter Bot to Tweet at your Internet Provider

from selenium.webdriver.common.keys import Keys

...
    def tweet_at_provider(self):
        time.sleep(3)
        twitter_button = self.driver.find_element(By.XPATH, '/html/body/div[3]/div/div[3]/div/div/div/div[2]/div[3]/div[3]/div/div[2]/div[1]/div[1]/div/div[1]/div[2]/div/div[1]/a[2]')
        twitter_button.click()
        
        twitter_login_window = self.driver.window_handles[1]
        self.driver.switch_to.window(twitter_login_window)
        
        time.sleep(5)
        twitter_email = self.driver.find_element(By.XPATH, '/html/body/div[1]/div/div/div[1]/div[2]/div/div/div/div/div/div[2]/div[2]/div/div[1]/div[2]/form/div/div[1]/label/div/div[2]/div/input')
        twitter_email.send_keys(TWITTER_EMAIL)
        twitter_password = self.driver.find_element(By.XPATH, '/html/body/div[1]/div/div/div[1]/div[2]/div/div/div/div/div/div[2]/div[2]/div/div[1]/div[2]/form/div/div[2]/label/div/div[2]/div/input')
        twitter_password.send_keys(TWITTER_PASSWORD)
        twitter_password.send_keys(Keys.ENTER)
        
        time.sleep(3)
        tweet_compose = self.driver.find_element(By.XPATH, '//*[@id="react-root"]/div/div/div[2]/main/div/div/div[3]/div/div/div[1]/div/div/div/div/div[2]/div[1]/div/div/div/div/div/div/div/div/div/label/div[1]/div/div/div/div/div[2]/div/div/div/div')
        tweet = f"Hey Internet Provider, why is my internet speed {self.down}down/{self.up}up when I pay for {PROMISED_DOWN}down/{PROMISED_UP}up?"
        tweet_compose.send_keys(tweet)
        
        time.sleep(3)
        send_twit = self.driver.find_element(By.XPATH, '/html/body/div[1]/div/div/div[2]/main/div/div/div[2]/div/div/div/div/div[3]/div')
        send_twit.click()

아이고,,, 안되네,,
로그인까지는 됐는데 tweet_compose xpath가 잘못된 것 같은데 도저히 방법을 모르겠는...
div가 너무 많아요....
솔루션 봐도 div가 바뀌었는지 영 안먹고....
계속 시도하다가 로그인하는데 추가인증하라고 계속 떠서 이제 확인도 못함ㅋㅋㅋㅋㅋ

아까 뭐 어찌 하다가 tweet내용 수정안되고 tweet보내진걸로 봐서는 click버튼 까지는 아무이상 없는데 tweet_compose에서 계속 오류난다...ㅠ

FINAL

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time

SERVICE = Service("/Users/****/Development/chromedriver")
PROMISED_DOWN = 150
PROMISED_UP = 10
TWITTER_EMAIL = "******@*****.***"
TWITTER_PASSWORD = "**********"


class InternetSpeedTwitterBot:
    def __init__(self, service):
        self.driver = webdriver.Chrome(service=service)
        self.driver.get("https://www.speedtest.net/result/12942105219")
        self.down = 0
        self.up = 0

    def get_internet_speed(self):
        time.sleep(5)
        self.down = self.driver.find_element(By.XPATH, '/html/body/div[3]/div/div[3]/div/div/div/div[2]/div[3]/div[3]/div/div[2]/div[1]/div[2]/div/div[2]/div/div[2]/span').text
        self.up = self.driver.find_element(By.XPATH, '/html/body/div[3]/div/div[3]/div/div/div/div[2]/div[3]/div[3]/div/div[2]/div[1]/div[2]/div/div[3]/div/div[2]/span').text

    def tweet_at_provider(self):
        time.sleep(3)
        twitter_button = self.driver.find_element(By.XPATH, '/html/body/div[3]/div/div[3]/div/div/div/div[2]/div[3]/div[3]/div/div[2]/div[1]/div[1]/div/div[1]/div[2]/div/div[1]/a[2]')
        twitter_button.click()
        
        twitter_login_window = self.driver.window_handles[1]
        self.driver.switch_to.window(twitter_login_window)
        
        time.sleep(5)
        twitter_email = self.driver.find_element(By.XPATH, '/html/body/div[1]/div/div/div[1]/div[2]/div/div/div/div/div/div[2]/div[2]/div/div[1]/div[2]/form/div/div[1]/label/div/div[2]/div/input')
        twitter_email.send_keys(TWITTER_EMAIL)
        twitter_password = self.driver.find_element(By.XPATH, '/html/body/div[1]/div/div/div[1]/div[2]/div/div/div/div/div/div[2]/div[2]/div/div[1]/div[2]/form/div/div[2]/label/div/div[2]/div/input')
        twitter_password.send_keys(TWITTER_PASSWORD)
        twitter_password.send_keys(Keys.ENTER)
        
        time.sleep(3)
        tweet_compose = self.driver.find_element(By.XPATH, '//*[@id="react-root"]/div/div/div[2]/main/div/div/div[3]/div/div/div[1]/div/div/div/div/div[2]/div[1]/div/div/div/div/div/div/div/div/div/label/div[1]/div/div/div/div/div[2]/div/div/div/div')
        tweet = f"Hey Internet Provider, why is my internet speed {self.down}down/{self.up}up when I pay for {PROMISED_DOWN}down/{PROMISED_UP}up?"
        tweet_compose.send_keys(tweet)
        
        time.sleep(3)
        send_twit = self.driver.find_element(By.XPATH, '/html/body/div[1]/div/div/div[2]/main/div/div/div[2]/div/div/div/div/div[3]/div')
        send_twit.click()


bot = InternetSpeedTwitterBot(SERVICE)
bot.get_internet_speed()
bot.tweet_at_provider()
profile
개발을 배우는 듯 하면서도

0개의 댓글