Selenium

[Selenium] 실험1

MASSO 2023. 9. 9. 16:40
728x90

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문 작성 필요!
 

XPATH에 .text 붙여서 @ID 부분만 추출하기
결과

일단 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 부분 제외 풀 스크립트~
 

공개 계정 유저 4명이 리트윗한 트윗을 대상으로 테스트
결과(위 : 리트윗한 유저 전체 / 아래 : 랜덤 유저)

 
근데 이렇게 짜게 될 경우 한 가지 문제가 생기게 됨
아주 큰 문제가-
그건 바로 플텍 유저들이 있을 경우 계산이 불가능하다는 것..
 

갑자기 재게시 창이 이렇게 바뀌어서.. 뭔가 변한 게 있을지도 몰라서 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문 활용해서 구현 완료!!!

한계 : 소수 한정으로만 가능하다.... 사람이 많아지면 집계가 안 된다.
 
이후로 생각 중인 것은 추출 후 엑셀에 저장 -> 엑셀에서 랜덤값 불러오기?
될지 안 될지는 모르겠지만 ㅎㅎ
 

엑셀 파일 생성
값이 엑셀 파일에 저장된 것을 볼 수 있음

 

728x90

'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