오늘은 셀레늄으로 트위터와 인터넷속도 측정 앱에 접속하여 계약한 속도보다 낮게 측정될 경우 트위터로 불만을 표시하는 프로그램을 작성했다.
셀레늄은 직관적이여서 편리하긴 하지만, 실제로 셀레늄을 활용해서 무언가를 하기에는 제한점이 너무 많을거 같다.
가령 웹에서 bot으로 식별하여 차단한다던지,
최종결과는 아래와 같고 발송하기엔 너무 진상같아서 코드를 여기까지 작성했다.
import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
PROMISED_DOWN = 150
PROMISED_UP = 10
CHROME_DRIVER_PATH = "/Users/zzang/Desktop/chromedriver_win32/chromedriver.exe"
TWITTER_EMAIL = "01028919394"
TWITTER_PASSWORD = "Skarndcjf0"
SPEEDTEST_URL = "<https://www.speedtest.net/>"
TWITTER_URL = "<https://twitter.com/>"
class InternetSpeedTwitterBot :
def __init__(self,driver_path):
self.driver = webdriver.Chrome(executable_path=driver_path)
self.down = 0
self.up = 0
def get_internet_speed(self):
# 인터넷 속도 측정 사이트 접속self.driver.get(SPEEDTEST_URL)
# 속도 측정 시작 버튼 누르기self.driver.find_element_by_class_name("start-text").click()
# 30초 후 다운로드 속도와 업로드 속도 가져오기time.sleep(40)
self.down = self.driver.find_element_by_class_name("download-speed").text
self.up = self.driver.find_element_by_class_name("upload-speed").text
print(f"다운로드 : {self.down}\\n업로드 : {self.up}")
def tweet_at_provider(self):
# 트위터 홈페이지 접속self.driver.get(TWITTER_URL)
# 2초 후 로그인 클릭time.sleep(2)
self.driver.find_element_by_xpath('//*[@id="react-root"]/div/div/div[2]/main/div/div/div[1]/div[1]/div/div[3]/div[5]/a/div').click()
# 2초 후 아이디 입력time.sleep(2)
id = 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/div/div/div[5]/label/div/div[2]/div/input')
id.send_keys(TWITTER_EMAIL)
id.send_keys(Keys.ENTER)
# 2초 후 패스워드 입력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[2]/div/label/div/div[2]/div[1]/input')
password.send_keys(TWITTER_PASSWORD)
password.send_keys(Keys.ENTER)
# 2초 후 트위터 내용 작성하기time.sleep(4)
tweet = self.driver.find_element_by_xpath('//*[@id="react-root"]/div/div/div[2]/main/div/div/div/div[1]/div/div[2]/div/div[2]/div[1]/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.send_keys(f"다운로드 : {PROMISED_DOWN}, 업로드 {PROMISED_UP}으로 계약했지만,\\n 측정 결과 다운로드 :{self.down} 업로드 :{self.up}으로 측정됩니다. 조치를 취해주세요.")
bot = InternetSpeedTwitterBot(CHROME_DRIVER_PATH)
bot.get_internet_speed()
bot.tweet_at_provider()