728x90
selenium headless
chrome_options = webdriver.ChromeOptions() # 크롬 옵션 객체 생성
chrome_options.add_argument('headless') # headless 모드 설정
chrome_options.add_argument("--disable-gpu" ) # gpu(그래픽 카드 가속) 사용 안하도록 설정
chrome_options.add_argument("lang=ko_KR") # 한국어로 실행되도록 설정
chrome_options.add_argument('window-size=1920x1080') # 일반적인 모니터 사이즈로 설정
driver = webdriver.Chrome("드라이버 경로", chrome_options=chrome_options)
https://beomi.github.io/2017/09/28/HowToMakeWebCrawler-Headless-Chrome/
아래는 (2017년 내용이라서 의미가 있을지 모르겠음.)
user-agent 바꾸는 방법 외에는 모두 javascript를 이용해 값을 추출하고 오버라이딩 하는 방식.
하지만, driver.execute_script 함수는 사이트 로딩이 끝난 후 onload()이후 실행되기 때문에 빈칸으로 나옴
사이트 로딩 전 실행되어야 한다!
# <useragent에 'Headless'라는 단어가 들어가있다.>
# 일반적인 사용자는 headless를 사용하지 않기 때문에 봇으로 추측하고 제재를 가할 수 있다.
# 따라서 UserAgent 값 새로 정하기
chrome_options.add_argument("일반적인 크롬브라우저의 UserAgent")
# useragent 값 확인하기
user_agent = driver.find_element_by_css_selector('#user-agent').text
print('User-Agent: ', user_agent)
# <플러그인이 0개>
# 플러그인의 갯수 확인
if(navigator.plugins.length === 0) {
console.log("Headless 크롬이 아닐까??");
}
# 가짜 플러그인 만들기 (url을 get하기 전에 넣어주기)
# JS로 navigator객체의 plugins 속성 자체를 오버라이딩 해 임의의 배열을 반환해 개수를 속임
driver.execute_script("Object.defineProperty(navigator, 'plugins', {get: function() {return[1, 2, 3, 4, 5];},});")
# 단, 사이트가 로딩될 때 이미 저 속성이 들어가있어 plugin length는 여전히 0으로 나올 것임
plugins_length = driver.find_element_by_css_selector('#plugins-length').text
# <언어 설정이 되어있지 않다.>
# 언어설정
driver.execute_script("Object.defineProperty(navigator, 'languages', {get: function() {return ['ko-KR', 'ko']}})")
#단, 사이트가 로딩될 때 이미 저 속성이 들어가있어 language는 빈칸으로 나올 것임
languages = driver.find_element_by_css_selector('#languages').text
# <gpu(그래픽 가속) 꺼져있음>
# WebGL렌더러를 Nvidia회사와 GTX980Ti엔진인 ‘척’
driver.execute_script("const getParameter = WebGLRenderingContext.getParameter;WebGLRenderingContext.prototype.getParameter = function(parameter) {if (parameter === 37445) {return 'NVIDIA Corporation'} if (parameter === 37446) {return 'NVIDIA GeForce GTX 980 Ti OpenGL Engine';}return getParameter(parameter);};")
#스크린샷
driver.get_screenshot_as_file('image.png')
'PYTHON > 자동화' 카테고리의 다른 글
Implicit Waits vs explicitly wait (Expected Conditions) (0) | 2019.11.22 |
---|---|
console창에서 코드save&load (0) | 2019.11.19 |
유튜브영상링크 스크롤 끝까지 크롤링 (0) | 2019.11.17 |
유튜버의 영상 제목 크롤링 / 영상 댓글 크롤링 (0) | 2019.11.14 |
(pandas) 로그인>검색>링크와 제목 csv에 저장 (0) | 2019.11.12 |