RT 추첨기 만들어보기~!
실험용 게시물로 언제 만들어질지, 만들 수 있는지는 아무도 모름
일단 (구)트우I터에서 'nn 재게시'를 누르면
이 창이 뜨는데 여기서 하나하나 뜯어보면 될 것 같음
굳이 로그인 스크립트부터 짤 필요는 없을 것 같고, 그냥 이 창 띄운 후부터 시작하게끔..
//*[@id="layers"]/div[2]/div/div/div/div/div/div[2]/div[2]/div/div/div/section/div/div/div[1]/div/div/div/div/div[2]/div[1]/div[1]/div/div[2]
위 창에서 @ID 부분의 XPath는 위와 같음
그중에서도
//*[@id="layers"]/div[2]/div/div/div/div/div/div[2]/div[2]/div/div/div/section/div/div/div[1]/div/div/div/div/div[2]/div[1]/div[1]/div/div[2]/div/a/div/div/span
이 부분인데, 이 부분 내 @ID 문자열을 추출해서 저장해야 함
그리고 RT 수는 게시글마다 다르기 때문에 해당 부분 고려해서 for+if문 작성 필요!
일단 ID 부분 추출까지는 완료
이제 리스트 생성 -> 랜덤값 불러오기를 해볼 예정
chrome_options = Options()
chrome_options.add_experimental_option("detach", True)
driver = webdriver.Chrome(options=chrome_options)
driver.maximize_window()
url = "https://www.twitter.com/"
driver.get(url)
time.sleep(30)
로그인 및 대상 화면을 직접 띄울 것이기 때문에 타이머를 좀 길게 줬다.
자동으로 링크 접속 후 30초 대기하는데, 대기하는 동안 로그인 후 대상 화면까지 진입해두면 된다.
rtsoo = driver.find_element(By.XPATH,'//*[@id="react-root"]/div/div/div[2]/main/div/div/div/div[1]/div/section/div/div/div[2]/div/div/article/div/div/div[3]/div[6]/div[2]/a/div/span/span/span').text
rtsoo2 = int(rtsoo)
driver.find_element(By.XPATH,'//*[@id="react-root"]/div/div/div[2]/main/div/div/div/div[1]/div/section/div/div/div[2]/div/div/article/div/div/div[3]/div[6]/div[2]/a').click()
time.sleep(1)
이 부분은
이 'N재게시'의 숫자(이 이미지에서는 1) 부분을 추출, int로 형변환 후 rtsoo2로 기억해두고
'재게시한 사용자' 팝업을 띄우는 스크립트
idlist = []
i = 0
j = 0
while j < rtsoo2 :
rttext = '//*[@id="layers"]/div[2]/div/div/div/div/div/div[2]/div[2]/div/div/div/section/div/div/div[{}]/div/div/div/div/div[2]/div[1]/div[1]/div/div[2]/div/a/div/div/span'.format(i+1)
rtpath = driver.find_element(By.XPATH, rttext).text
idlist.append(rtpath)
j += 1
i += 1
time.sleep(1)
print(idlist)
choicelist = random.choice(idlist)
print(choicelist)
idlist는 ID 값을 저장할 리스트
format을 사용하여 XPATH 내 div[{}]의 값을 지속적으로 증가시켜줬다.
chrome_options = Options()
chrome_options.add_experimental_option("detach", True)
driver = webdriver.Chrome(options=chrome_options)
driver.maximize_window()
url = "https://www.twitter.com/"
driver.get(url)
time.sleep(30)
rtsoo = driver.find_element(By.XPATH,'//*[@id="react-root"]/div/div/div[2]/main/div/div/div/div[1]/div/section/div/div/div[2]/div/div/article/div/div/div[3]/div[6]/div[2]/a/div/span/span/span').text
rtsoo2 = int(rtsoo)
driver.find_element(By.XPATH,'//*[@id="react-root"]/div/div/div[2]/main/div/div/div/div[1]/div/section/div/div/div[2]/div/div/article/div/div/div[3]/div[6]/div[2]/a').click()
time.sleep(1)
idlist = []
i = 0
j = 0
while j < rtsoo2 :
rttext = '//*[@id="layers"]/div[2]/div/div/div/div/div/div[2]/div[2]/div/div/div/section/div/div/div[{}]/div/div/div/div/div[2]/div[1]/div[1]/div/div[2]/div/a/div/div/span'.format(i+1)
rtpath = driver.find_element(By.XPATH, rttext).text
idlist.append(rtpath)
j += 1
i += 1
time.sleep(1)
print(idlist)
choicelist = random.choice(idlist)
print(choicelist)
import 부분 제외 풀 스크립트~
근데 이렇게 짜게 될 경우 한 가지 문제가 생기게 됨
아주 큰 문제가-
그건 바로 플텍 유저들이 있을 경우 계산이 불가능하다는 것..
갑자기 재게시 창이 이렇게 바뀌어서.. 뭔가 변한 게 있을지도 몰라서 XPATH 다시 복붙했다 ㅎㅎ;
idlist = []
i = 0
while True:
try:
rttext = '//*[@id="react-root"]/div/div/div[2]/main/div/div/div/div[1]/div/section/div/div/div[{}]/div/div/div/div/div[2]/div[1]/div[1]/div/div[2]/div/a/div/div/span'.format(i + 1)
element = driver.find_element(By.XPATH, rttext)
rtpath = driver.find_element(By.XPATH, rttext).text
idlist.append(rtpath)
i += 1
time.sleep(1)
except NoSuchElementException:
print(idlist)
choicelist = random.choice(idlist)
print(choicelist)
break
try, except문 활용해서 구현 완료!!!
한계 : 소수 한정으로만 가능하다.... 사람이 많아지면 집계가 안 된다.
이후로 생각 중인 것은 추출 후 엑셀에 저장 -> 엑셀에서 랜덤값 불러오기?
될지 안 될지는 모르겠지만 ㅎㅎ
'Selenium' 카테고리의 다른 글
[Selenium] 클래스 (0) | 2023.10.29 |
---|---|
[Selenium] 스크린샷 (0) | 2023.10.10 |
[Selenium] 크롬 창 종료 현상? (0) | 2023.06.16 |
[Selenium] 엑셀 파일 읽기/쓰기 (0) | 2023.01.21 |
[Selenium] 뮤트하기 (0) | 2023.01.08 |