리눅스 서버로 실행할 때는 로컬에 vscode를 설치한 후 원격으로 접속해서 연결했지만 윈도우 서버에서는 인스턴스 안에 직접 vscode 를 설치하고 실행하였기에 포트포워딩을 로컬호스트로 해주지 않는다.
이를 위해서 ( 외부에서 접속하기 위해서 ) 해야될 것이 2가지 있는데,
1. 하나는 이미 해두었던 settings.py 파일에 아래 구문을 추가하는 것.
ALLOWED_HOSTS = ['*']
이 구문을 추가해주면 123.45.67.89:8000/ 이런식으로 외부에서 접속이 가능하다. 물론 나중에는 수정해야겠지만 지금은 테스트니까
2. 윈도우 서버에서는 방화벽을 따로 설정해주어야 한다. 탐색기에서 firewall을 검색하고 Windows Defender FireWall에 들어간다.
3. 인바운드에 기존에 있던 80에 관련된 규칙들에 Enabled를 활성화해주고 8000번 포트( django )를 열어준다.
이 준비까지 다 되었으면 내 컴퓨터 로컬호스트에서 인터넷이나 postman 으로 응답을 확인할 수 있다.
4. 이제 셀레니움을 설치해서 사용해보자.
$ pip install selenium
5. 라우터에 다음 내용을 추가해준다. 여기서 chromedriver 는 전 포스트에서 설치했던 실행 파일의 위치이다.
/chwideukapp/views.py
from time import sleep
from rest_framework.views import APIView
from rest_framework.response import Response
from selenium import webdriver
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument("--single-process")
chrome_options.add_argument("--disable-dev-shm-usage")
path = "C:\\Users\\Administrator\\Downloads\\chromedriver_win32\\chromedriver.exe"
driver = webdriver.Chrome(path, chrome_options=chrome_options)
class ChwideukRouter(APIView):
def get(self, request):
driver.get("https://typo.tistory.com/")
print("+" * 100)
print(driver.title) # 크롤링한 페이지의 title 정보
print(driver.current_url) # 현재 크롤링된 페이지의 url
print("-" * 100)
title = driver.title
url = driver.current_url
driver.close()
return Response({'title': title, 'url': url})
def post(self, request):
driver.get("https://typo.tistory.com/")
print("+" * 100)
print(driver.title) # 크롤링한 페이지의 title 정보
print(driver.current_url) # 현재 크롤링된 페이지의 url
print("-" * 100)
title = driver.title
url = driver.current_url
driver.close()
return Response({'title': title, 'url': url})
6. 서버를 키고 postman으로 요청을 보내보자.
$ python mnage.py runserver 0.0.0.0:8000
정상적으로 뜨는 것을 확인할 수 있다.