
인터넷 속도가 최소 보장 속도보다 느릴 때 X에서 자동으로 인터넷 공급사에 불만을 제기하는 봇
(실제로 멘션을 보내는 대신 트윗을 작성하는 것으로 변경)
🔍 유의 사항
- X 계정 생성
- 인터넷 공급사에서 보장한 다운로드/업로드 속도 값을 상수로 추가
🔍 유의 사항
- 클래스를 사용하여 코드 정리
- 인터넷 속도를 구하는 메소드와 인터넷 공급사에게 트윗을 보내는 메소드 생성
- 두 메소드를 순서대로 호출
🔍 유의 사항
- 속도 테스트 사이트 : https://www.speedtest.net/
- 셀레니움이 자동으로 사이트에 들어가서 속도를 측정하도록 하기
- 인터넷 속도에 따라 결과가 나올 때까지 1-3분 정도 대기 시간 필요
🔍 유의 사항
- 셀레니움으로 자동 로그인 후 측정된 속도값을 넣어서 트윗 작성
- 반복적으로 로그인 시 로봇으로 의심받기 때문에 주의
⌨️ main.py
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
PROMISED_DOWN = 500
PROMISED_UP = 250
X_EMAIL = "이메일"
X_PASSWORD = "비밀번호"
class InternetSpeedXBot:
def __init__(self):
chrome_options = webdriver.ChromeOptions()
chrome_options.add_experimental_option("detach", True)
self.driver = webdriver.Chrome(options=chrome_options)
self.down = 0
self.up = 0
def get_internet_speed(self):
# 인터넷 속도 측정 사이트 접속
self.driver.get("https://www.speedtest.net/")
# 속도 측정 버튼 클릭
time.sleep(3)
go_button = self.driver.find_element(By.XPATH, '//*[@id="container"]/div[1]/div[3]/div/div/div/div[2]/div[3]/div[1]/a/span[4]')
go_button.click()
# 측정된 속도 저장
time.sleep(80)
self.down = self.driver.find_element(By.XPATH, '//*[@id="container"]/div[1]/div[3]/div/div/div/div[2]/div[3]/div[3]/div/div[3]/div/div/div[2]/div[1]/div[1]/div/div[2]/span')
self.up = self.down.find_element(By.XPATH, '//*[@id="container"]/div[1]/div[3]/div/div/div/div[2]/div[3]/div[3]/div/div[3]/div/div/div[2]/div[1]/div[2]/div/div[2]/span')
def tweet_at_provider(self):
# X 로그인 페이지 접속
self.driver.get("https://x.com/i/flow/login")
# 이메일 입력 후 패스워드 입력
time.sleep(2)
email = self.driver.find_element(By.XPATH, '/html/body/div/div/div/div[1]/div[2]/div/div/div/div/div/div[2]/div[2]/div/div/div[2]/div[2]/div/div/div/div[4]/label/div/div[2]/div/input')
email.send_keys(X_EMAIL)
email.send_keys(Keys.ENTER)
time.sleep(2)
password = self.driver.find_element(By.XPATH, '//*[@id="layers"]/div[2]/div/div/div/div/div/div[2]/div[2]/div/div/div[2]/div[2]/div[1]/div/div/div[3]/div/label/div/div[2]/div[1]/input')
password.send_keys(X_PASSWORD)
password.send_keys(Keys.ENTER)
# 메인 페이지에서 트윗 작성
time.sleep(5)
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 = self.driver.find_element(By.XPATH, '//*[@id="react-root"]/div/div/div[2]/main/div/div/div/div/div/div[3]/div/div[2]/div[1]/div/div/div/div[2]/div[1]/div/div/div/div/div/div/div/div/div/div/div/div[1]/div/div/div/div/div/div[2]/div/div/div/div')
tweet_compose.send_keys(tweet)
# 트윗 포스트
post_button = self.driver.find_element(By.XPATH, '//*[@id="react-root"]/div/div/div[2]/main/div/div/div/div/div/div[3]/div/div[2]/div[1]/div/div/div/div[2]/div[2]/div[2]/div/div/div/button/div/span/span')
post_button.click()
# bot 객체 생성 후 실행
bot = InternetSpeedXBot()
bot.get_internet_speed()
bot.tweet_at_provider()
