[Python] Selenium + IEDriver 성능 개선 방법


Selenium + ChromeDriver 조합 자체도 느려서 웹 사이트 뜯어가면서 requests 보고있는 판국에

굳이 인터넷 익스플로러 쓰겠다고 Selenium + IEDriver을 쓰는 분들이 얼마나 많을까 싶지만 

 

지금 제가 아버지 업무자동화를 위해 만들고 있는 사이트가 구닥다리라 Active X + 보안 유틸리티 떡칠이라는 끔직한 조합 덕에 어쩔수 없이 IEDriver을 쓰고 있습니다.

 

IEDriver을 쓰면서 조금의 팁을 작성합니다.

 

1. IEDriver이 아예 작동하지 않을때

https://pgh268400.tistory.com/123

 

[C#] Selenium IEDRIVER이 작동하지 않을때 해결법

Selenium으로 IEDriver을 제어하면 일부 컴퓨터에서 프로그램 구동이 되지 않고 소리 소문 없이 꺼져 버리는 경우가 있었습니다. 닷넷 프레임워크를 지워보고 별짓 거리를 다해봤으나.. 원인이 다른

pgh268400.tistory.com

골때리지만 IEDriver은 아예 작동하지 않는것부터 시작할때가 있습니다.

시작이 안되는것이지요.. 보호 모드와 연관이 있는데 위 본문 내용을 참고해서 해결해주세요.

제목은 C#이지만 어떤 언어든 상관없습니다.

 

2. IEDriver에서 입력(send_keys)이 느릴때

from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from selenium import webdriver

URL = 'https://www.google.co.uk/'

path = "C:\iedriver.exe"
cap = DesiredCapabilities.INTERNETEXPLORER
cap['INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS'] = True
cap['requireWindowFocus'] = True
cap['nativeEvents'] = False

driver = webdriver.Ie(capabilities=cap, executable_path=path)

저도 겪어보지 않아서는 잘 모르겠습니다만 IEDriver에서 키 입력하는게 굉장히 느릴때가 있다고 합니다.

capabilities를 옵션으로 추가해주면 되는데 Python + Selenium + IEDriver 조합으로 쓰는 분들이 커뮤니티에서 잘 찾을 수가 없어서 관련 코드를 찾는데 애 먹었습니다.

 

간단히 말하자면 위처럼 driver을 만들때 위처럼 옵션을 주시고 하시면 됩니다.

그리고 64비트가 아니라 32비트 iedriver을 받으셔야 합니다.

 

 

출처 : https://stackoverflow.com/questions/27985300/selenium-webdriver-typing-very-slow-in-text-field-on-ie-browser

 

3. Element(요소) 파싱하는게 느릴때

driver.find_element_by_css_selector("#search")

다음과 같이 find_element... 메서드를 이용해 가져오면 드라이버가 제어중일때 보이는 element를 바로 가져올 수 있지만 이게 드라이버가 직접 찾아서 응답해야 하는것이기 때문에

 

느려 터진 ie에선 노답스러운 속도를 보여줍니다.

 

그래서 파싱을 할때는 아래처럼 페이지 소스를 통째로 가져온 뒤에 bs4 로 파싱하는게 훨씬 빠릅니다.

html = driver.page_source
soup = BeautifulSoup(html, 'html.parser')
deposit = soup.select("#search")

그리고 클릭의 경우에도 자바스크립트를 바로 execute 시키는게 더 빠를거 같긴 합니다만, 이것은 시도해보시길 바랍니다.

COMMENT WRITE