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작성하는 건 언제쯤 익숙해지실런지..
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
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
에서 계속 오류난다...ㅠ
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()