기본 콘텐츠로 건너뛰기

Tor를 활용해서 Python Selenium 크롤링 IP차단 우회하기

N잡러가 되기 위해 특정 사이트를 주기적으로 (1시간에 3회) 크롤링해오는 코드를 짰다.

1. 파이썬크롤링 후 웹페이지에 게시하고 

2. 주문접수 폼에서 주문을 받아서

3. 받은 폼 정보를 기반으로 풀 자동화를 통해

 물건을 판매를 알선하고 원 판매자로부터 수수료를 받는 부업!


헌데... 모든 코드 작성과 테스트가 끝날 무렵 나를 충격에 빠트린것이 있었으니...



바로.. IP가 차단 된 것이다. 판매자와 일종의 동업자(라고 말하고 하청업자라고 읽는다) 관계지만 그래도.. IP차단이라니.. 하지만 판매자는 판매자일 뿐 개발자가 아니기도 하고.. 이렇게 내가 편하게 수익을 가져가게 되는 것을 알게되신다면... 수수료를 낮추실 수도 있어 risky하다. 하핳...


그래서!

Tor라는 솔루션을 활용해 IP차단을 우회했다.

먼저 기존 코드를 건드리기보다는 테스트를 위한 코드를 작성했는데 그 코드를 공유한다.

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager #Chrome webdriver를 자동으로 다운받도록 추가
import os

# To use Tor's SOCKS proxy server with chrome, include the socks protocol in the scheme with the --proxy-server option
# PROXY = "socks5://127.0.0.1:9150" # IP:PORT or HOST:PORT

torexe = os.popen(r'/opt/homebrew/bin/tor/')
PROXY = "socks5://localhost:9050" # IP:PORT or HOST:PORT


service = Service(executable_path=ChromeDriverManager().install()) #Chrome webdriver를 최신버전으로 사용
#service = Service(executable_path=ChromeDriverManager(version="114.0.5735.90").install())

options = webdriver.ChromeOptions()
options.add_experimental_option("detach", True)

options.add_argument('--proxy-server=%s' % PROXY) #추가됨
driver = webdriver.Chrome(service=service, options=options)

driver.get("http://icanhazip.com/")


일단 맥을 기준으로 설명하자면, 간단한 순서다.

1. Tor를 설치

    - 설치 과정에서 고생을 많이 했다( brew install tor 를 했는데, brew 가 Apple silicon 프로세서 버전이 아니라 업그레이드 하라고.. 해서 했는데 안되고.. 안되길래 지우고 다시 깔았더니 파이썬 인터프리터가 날아가고.. 모든 모듈을 새로 설치해줬다 ㅠㅠ)

2.  파이썬 코드로 테스트(위 코드)

   - torexe = os.popen(r'/opt/homebrew/bin/tor/') 부분의 경로는 터미널에서 which tor 에서 나온 경로를 그대로 입력해주면 된다.

   - 나머지는그대로 해도 무방하다. 기본적으로 tor는 포트 9050을 쓴다.

   - detach는 크롬창이 계속 열려있도록 하는 옵션이다.

   - icanhazip.com 은 현재 내 pc의 ip 주소를 확인할 수 있는 심플한 사이트이다.

3. 실제 파이썬 코드에 삽입후 구동

   - 잘 되는 것을 확인했다.











댓글

이 블로그의 인기 게시물

#1 (진행 중)아두이노 뇌파센서 헤드셋 만들기(Arduino EEG brain wave headset for psychological test) 만들어 뇌파 읽기

 15년 겨울쯤엔가 TED에서 흥미로운 동영상을 봤다. 뇌파를 통해 컴퓨터 안의 객체를 조종하는 모습을 시연하는 것이었다. 뇌파로 이런 것들이 가능하다는 것이 놀라웠다. 나는 심리학도가 아닌가. 뇌파가 더 정확한 심리검사를 만들 수 있는 도구가 될 수 있다는 생각이 들었다.  예를들어 검사문항(디지털 검사)이 100개짜리 라면 핵심 문항들(각 10번 단위)을 체크할 때마다 심경의 변화, 뇌파변화를 센서(객관적)도 기록하고 디지털검사(주관적)로도 기록해서 함께 데이터화 한다면 더 정확한 심경을 읽어 낼 수 있지 않을까? 라는 생각이었다. 2011년 대학원 다닐 때 컴공과 학부생들 겨울방학 특강으로 Objective-C를 무려1개월간 청강했고, C언어를 무려 2개월동안 학원에 다니면서 공부한 사람이기에 ! -_-;;;; 할 수 있을 것이다............  우선 뇌파센서를 구매해야겠지.  알리 익스프레스에서 구매한 EEG 뇌파센서 kit.  2개를 구매했다.비싸군 ㅠㅠ 배송이 한달정도 걸렸다. 학창시절 라디오 만들기인가..실과시간에 도전해본 납땜 이후로는 처음 해보는 납땜이어서 고생좀 했다. 뇌파를 측정해서 hex 코드로 컴퓨터로 읽어들일 수 있는 상태다. 읽어들인 hex값들을 10진수로 변환하고 유의미한 그래프로 그리거나 데이터화 하는 것이 필요 해 보이지만 아직 받은 값을 10진수로 변환하는 방법을 모르겠다. ㅠㅠ 소스코드는 그냥 단순히 hex값으로 읽어오는것이다보니.. 별거 없다;; 나중에 10진수로 변환하여 읽어들이고 자료화 하는 단계가 필요한 것 같은데 차근차근 진행 해 봐야겠다. 준비물 :  1. HM-08 블루투스 모듈 ($5.30) 2. 아두이노 나노 호환품 ($1.89) 3. direct nerosky e eg  brain...

#1 (완료) Auto touch와 Activator를 활용한 차량용 아이패드 미니1(탈옥) 세팅

 작년 7월 경 차를 하나 샀다. 벌써 1.6만km를 함께 달려왔구나~ 계속 중고차만 타다가 처음으로 장만한 이쁜이 우리 푸푸(골프의 애칭)에겐 아쉽게도 네비게이션이 없다. 2.0 고급형 모델과 일반형 모델이 네비게이션+가죽시트+스마트키 정도의 차이인데도 500만원 정도로 가격차이가 너무커서 사제 네비게이션을 달고 가죽시트를 포기하겠다는 생각으로(실제로 독일에서는 가죽시트보다 알칸타라 직물시트가 더 인기가 많음 - 아마 주행 중 엉덩이 미끄러짐 현상이 있기 때문인 듯.) 골랐는데 막상 네비게이션 장착점에 가니 100만원 ~ 150만원을 부른다. 아니.............. 그돈이면 아이패드 프로를 사요 아저씨. 네비로도 쓰고, 떼어서 영화도 보고 그림도 그릴 수 있다구요.... 그래서 아이패드 프로 12.9도 아닌, 아이패드 프로 9.7도 아닌, 아이패드 에어2도 아닌, 아이패드 에어1도아닌, 아이패드 미니4도 아닌, 아이패드 4도 아닌, 아이패드 미니2도 아닌, 아이패드 3도 아닌, 아이패드2 급의 아이패드 미니1을..... 그 당시 중고가 20만원가량을 주고 구입했다. 8.4.1 버전으로 탈옥이 가능했고, 탈옥 후 Auto touch(루아 스크립트 언어를 사용하는 Cydia앱) + Activator(탈옥기기엔 거의 필수인 Cydia앱) 으로 아래와 같은 아이디어를 실현해보고자 한다. 아니 이미 실현했으나.. 블로그를 만든지가 얼마 안돼 밀려서 쓰고 있다 ㅠ_ㅠ 아이디어 1.  차량에 시동을 걸면 아이패드가 자동으로 블루투스로 연결되고, 셀룰러 데이터, GPS ON 2.  음악앱(벅스 뮤직 플레이어)과 네비게이션 앱을 실행한다. 아래와 같이 코드를 입력했다. 잘 작동한다. 다만 lua명령 만으로는 와이파이나 셀룰러 on/off 제어가 안되기에 Activator 의 기능을 함께 활용 하는 방법을 택했다. 아이패드가 구형모델이다보니 다소 느린편이라 usleep 명령어를 통해 딜레이를 충분히 주었...

#1 (완료) 아두이노 음주 측정기(Alcohol tester with Arduino)

음주운전을 하지 않는 가장 좋은방법은 대리운전 비용 1만원~1.2만원이 아깝지 않으면서 대리운전 전화번호를 누를 수 있는 정도의 취함 상태인 것 같다. 그래서 생각해본 아이디어가 아예 법적으로 차량에 의무적으로 장치를 설치하도록 하는데 이 장치는 차에 시동을 걸기 전 음주측정을 해야하고 정상 수치내에 있을때만 시동이 걸리는 장치!  물론 조수석에 앉을 누군가가 음주운전을 돕기 위해 대신불어준다면 안되겠지만..ㅠㅠ 아침 출근을 위해 정말 급하게 가글을 하고 나와 출근하려 시동을 걸었는데..가글액에 섞인 알코올 성분때문에 지각을 하는 경우도 생길 수 있겠다만.. 그래도 한번 만들어 보자. 어차피 내게는 차량과 연동할 기술적 지식이 아직 없으므로! 하하하하 06.13 진행 중이나 아직 정리가 안됨 07.01 에 05.28 진행 내용 추가 실제 경찰들 처럼 더더더~ 멘트로 몰입감+정확성(3회 불어서 나온수치의 평균을 활용하는 벙법)을 높일 수 있도록 개선하였다. -_-; Ready 상태. 이후 3,2,1 카운트 후 blow! 그리고 수치를 반복하여 깜빡이며 한다. 이하 소스코드 #include <LiquidCrystal.h> // initialize the library with the numbers of the interface pins LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup() {   // set up the LCD's number of columns and rows:   lcd.begin(16, 2); } void loop() { lcd.setCursor(1, 0); //라인1로 커서 위치   lcd.print("Ready...");   delay(4000); lcd.clear();   // set the cursor to column 0, line 1   /...