• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

셀레니움 headless chrome으로 사이트 접속시 Access Denied 문제가 발생합니다.

20.03.08 23:45 작성 조회수 6.95k

1

기존의 셀레니움 방식의 크롤링이 아닌,

이미 제가 사용하고 있는 크롬창에서 셀레니움으로 크롤링을 하고 있습니다.

아래 코드를 추가하니 크롬창 재사용이 가능하더라구요.

options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")

headless chrome으로 웹사이트를 띄워놓고 원격으로 디버깅을 하는데,

이상하게 특정 사이트에 접속이 안되는 문제가 생깁니다.

headless chrome 모드를 끄고 일반적인 셀레니움으로만 사용하면

해당 사이트에 접속이 가능한데,

headless chrome을 적용하기만 하면

아래와 같은 메시지와 함께 접속제한이 생기네요.

Access Denied

You don't have permission to access "http://www.coupang.com/" on this server."

Reference #18.57da2317.1583518355.74a9211

혹시 이런 경우가 한번 발생하면, 해당 사이트는 headless chrome으로 접속을 계속 못하게 되는건가요??

구글링과 해외 개발자 커뮤니티 등 닥치는대로 해결방법을 찾고 적용해보는데 도통 해결이 되지않아 이렇게 질문 올립니다.

인터넷에 알아보니 user-agent를아래와 같이 변경하라고 해서 적용해봤지만

유독 쿠팡 사이트만 계속 Access Denied가 뜹니다.

아래는 사용중인 크롬창에서의 headless chrome 테스트용 코드입니다.

from selenium.webdriver.chrome.options import Options
from selenium import webdriver
import time

path = '/Users/yoons/Documents/chrome/chromedriver'
options = Options()

options = webdriver.ChromeOptions()
options.add_argument('headless')
options.add_argument('window-size=1920x1080')
options.add_argument('lang=ko_KR')
options.add_argument(f'user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.87 Safari/537.36')
options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")

driver = webdriver.Chrome(path, options=options)

TEST_URL = 'https://www.google.com/search?ei=ZspgXu77K8KnoATe3qCgCQ&q=basketball&oq=basket&gs_l=psy-ab.3.0.0l10.274346.277887..278777...2.3..0.337.1834.1j6j1j2......0....1..gws-wiz.....0..0i71j0i67j0i273.cDhByzynOnk'
TEST_URL2 = 'https://www.coupang.com/'

driver.get(TEST_URL)
title_test = driver.find_elements_by_css_selector('#rso > div > div > div > div > div > div.r > a > h3')[0].text
time.sleep(2)

driver.switch_to.window(driver.window_handles[-1])
driver.get(TEST_URL2)

print(title_test)

답변 1

답변을 작성해보세요.

0

일단 말씀하신 코드를 제 컴퓨터의 윈도우 환경에 맞게 수정해서 돌려봤습니다만 큰 문제점을 발견하지 못했습니다. 질문하신 헤드레스 브라우저를 판독하여 거부를 하는 사이트는 좀 더 디테일하게 분석을 해봐야 하지만 검색해보신것 처럼 대부분 유저에이전트 값으로 판단하는 경우가 많아서 유저 에이전트만 수정되도 해결되는 사이트들이 많습니다.

물론 이런 방식으로 해결되지 않는 경우에는 일반 브라우저와 헤드레스사이의 차이점을 직접 분석하셔서 해결해야 하는 부분이기도 합니다.

from selenium.webdriver.chrome.options import Options
from selenium import webdriver
import time

# path = '/Users/yoons/Documents/chrome/chromedriver'
options = Options()

options = webdriver.ChromeOptions()
options.add_argument('headless')
options.add_argument('window-size=1920x1080')
options.add_argument('lang=ko_KR')
options.add_argument(f'user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.87 Safari/537.36')
# options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")
# driver = webdriver.Chrome(path, options=options)
driver = webdriver.Chrome(chrome_options=options)

TEST_URL = 'https://www.google.com/search?ei=ZspgXu77K8KnoATe3qCgCQ&q=basketball&oq=basket&gs_l=psy-ab.3.0.0l10.274346.277887..278777...2.3..0.337.1834.1j6j1j2......0....1..gws-wiz.....0..0i71j0i67j0i273.cDhByzynOnk'
TEST_URL2 = 'https://www.coupang.com/'

# driver.get(TEST_URL)
# title_test = driver.find_elements_by_css_selector('#rso > div > div > div > div > div > div.r > a > h3')[0].text
# time.sleep(2)

# driver.switch_to.window(driver.window_handles[-1])
driver.get(TEST_URL2)

# print(title_test)
print(driver.page_source)

위의 코드가 올려주신 코드를 제가 환경에 맞게 수정해서 실행해본 코드이며 해당 코드는 문제없이 정상 동작 되었습니다.