• 돌아가기
  • 아래로
  • 위로
  • 목록
  • 댓글

셀레니움과 NPM 도커를 이용한 의미있나 싶은 삽질

th20ry 403

1

4

원래는 셀레니움으로 자동 로그인 등 크롤링을 배우려고 했는데 

어쩌다보니 삽질을 하게 되어서... 나중에 관리용으로 내용 정리도 할 겸, 혹시 보안문제가 있다면 여기 계신 전문가분들의 조언도 받아볼겸 삽질의 과정을 올려보게 되었습니다.

예 뭐... 그냥 매번 클릭하면 되는걸

클릭당 3초 아끼려고 4시간을 날린 결과입니다. ㅇㅅㅇ;;:

딱히 문제될 내용은 없어보이지만, 혹여 문제된다면 삭제하겠습니다.

 

아시다시피 토렌트 사이트들은 대부분 자주 차단되는편이라서 사이트 뒤의 숫자가 계속 바뀝니다. 

하지만 현행법상 특정 사이트로 링크를 남기는 경우는 불법사이트로 차단되는 경우가 드물기에 보통 차단되지 않을 링크 사이트들을 만들고 본 사이트는 숫자를 바꾸어서 운영하게 되죠

그래서 링크 사이트를 이용해서 바뀌는 사이트들을 계속 트래킹(?)하면 어떨까 싶었습니다.  

대충 이런 사이트를 이용하는거죠

image.png.jpg

 

 

 

1)NPM에서 Redirection_host 설정을 합니다.

1.jpg

test.mydomain.com 을 원하는 사이트로 307 redirect 하게 됩니다. (307이 보안상 맞는지는 잘 모르겠습니다...;;)

 

2)셀레니움 도커를 설치합니다. 

version: "3"
services:
  chrome:
    image: selenium/node-chrome
    shm_size: 2gb                                          
    container_name: selenium
    depends_on:
      - selenium-hub
    environment:
      - SE_EVENT_BUS_HOST=selenium-hub
      - SE_EVENT_BUS_PUBLISH_PORT=4442
      - SE_EVENT_BUS_SUBSCRIBE_PORT=4443
    volumes:
      - /selenium/scripts:/selenium                             #script.py를 저장할 장소(관리용)
      - /selenium/address:/address                             #크롤링으로 얻어낸 address를 임시 저장하는 장소
      - /npm/data/nginx/redirection_host:/npm   #본인이 설치한 npm의 redirection_host *.conf가 저장되는 장소
    ports:
      - "7900:7900"                                                              #VNC 포트, localhost:7900으로 접속 및 !pw:secret 입력시 실행확인가능
  selenium-hub:
    image: selenium/hub:latest
    container_name: selenium-hub
    ports:
      - "4444:4444" 

 

docker-compose로 설치한 이후에 

"docker exec -it selenium 명령어" 로 필요한 파일들을 설치합니다. 

apt update -y

apt upgrade -y

apt install pip -y

pip install selenium

pip install webdriver_manager 

#이거 docker-compose 다시 할 때마다 이미지 파일이 바뀌어서 그런지 설치한거 다 날라갈것같은데... 어떻게 해결할 방법 없을까요?...

#command 이용해서 docker-compose 될때마다 실행되게 해볼까 해봤는데.. 뭔가 잘 안되더군요. 혹시 아시는분 도움좀 부탁드려요.

 

3)크롤링을 활용해서 원하는 사이트의 매번 바뀌는 주소를 구합니다. 

셀레니움은 업데이트 될때마다 이것저것 명령어가 바뀌는것같은데  ver.4(?) 기준 제가 사용한 파일입니다. 

웹드라이버는 아까 입력한 명령어 (pip install webdriver_manager)로 크롬 기준 따로 다운받을 필요는 없습니다.

docker-compose 수정했던것처럼 각자의 취향(?)에 맞게 수정합니다. 

 

from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium.webdriver.common.by import By
import time
options = webdriver.ChromeOptions()
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option("useAutomationExtension", False)
service = ChromeService(executable_path='/usr/bin/chromedriver')
driver = webdriver.Chrome(service=service, options=options)

 

link_site = "https://www.ygy07.com/"     #링크 전용(?) 사이트, 예시

npm_address = "/npm/3.conf"                    #redirection 넘버 #1번 npm에서 위치 확인 필요
pattern = "ygy[0-9][0-9][0-9]"                       #사이트 패턴 #e.g의 ygy07.com이라면 ygy[0-9][0-9]
pattern_address = "/address/ygy13.txt" #임시로 저장할 현재 작동 가능한 주소

 

driver.get(link_site)  #원하는 링크 사이트 ex. https://www.ygy07.com/
time.sleep(5) # wait seconds
driver.find_element(By.XPATH, '/html/body/form/div[1]/div[2]/div/div/a').click() #XPATH에 따라서 클릭하기
time.sleep(5) # wait seconds
driver.switch_to.window(driver.window_handles[-1]) # 탭 전환
time.sleep(5) # wait seconds
#url 따기
site_url = driver.current_url
print(site_url)
f = open(pattern_address , 'w')
f.write(site_url)
f.close()
time.sleep(10) # wait seconds
driver.quit();

import re;

f = open(pattern_address,"r")
raw_data = f.read()
f.close();
temp = re.search( pattern , raw_data )
NEWDOMAIN = temp.group()

print(raw_data);
print(NEWDOMAIN);

f = open(npm_address, 'r')
old_data = f.read()
new_data = re.sub(pattern, NEWDOMAIN, old_data)

f.close()

f = open(npm_address, 'w')
f.close()

f = open(npm_address, 'a')
f.write(new_data)
f.close()

 

4. crontab에 적용시켜서 매일 새로 사이트 업데이트를 하게 합니다. 

ex.

crontab -e;

0 15 * * * /crontab/cron.sh

 

#!/bin/bash

docker exec -it selenium sudo python3 /selenium/ygy.py;

sleep(60);

docker exec -it npm_app_1 nginx -t;

docker exec -it npm_app_1 nginx -s reload; 

신고공유스크랩
4
th20ry 글쓴이 2022.09.14. 23:12
하늘위의하늘

한번 세팅(?)하면 크게 바꿀일은 없어서 괜찮을것 같습니다ㅎㅎ..

2등
KelvinKang 2022.09.15. 10:45

중간쯤에 쓰신 내용대로, Compose 재실행 할때마다 기존 이미지가 지워지고, 새로운 이미지로 설치를 반복하게 됩니다.

 

재설치 안하도록 하려면, 이미지를 만드시면 됩니다.

selenium/node-chrome 를 기반으로 커스텀한 개인 이미지를 만들고,

커스텀 이미지를 불러서 쓰시면 됩니다.

th20ry 글쓴이 2022.09.15. 16:43
KelvinKang

ㅠㅠ 그 방법밖에 없나 보군요.

일단은 watchtower 예외에 넣어뒀는데, 다음에는 아예 이미지 만들어야겠습니다.

감사합니다

댓글 쓰기 권한이 없습니다. 로그인

취소 댓글 등록

cmt alert

신고

"님의 댓글"

이 댓글을 신고하시겠습니까?

댓글 삭제

"님의 댓글"

삭제하시겠습니까?


목록

공유

facebooktwitterpinterestbandkakao story

등록된 글이 없습니다.