• 카테고리

    질문 & 답변
  • 세부 분야

    데이터 엔지니어링

  • 해결 여부

    미해결

셀레니움 문법 업그레이드 , find_element_by_tag_name 오류

22.06.30 04:31 작성 조회수 2.29k

3

공유하려고 글씁니다.

(질문에 남겨야지, 이 강의 수강하시는분들이 볼수있기때문에, 질문에 글 남깁니다.)

 

방금 공부하는도중에 아무리봐도 오타가 없는데

find_element_by_tag_name('h1') 이 안되네요

 

구글링해서 찾아보니

셀레니움 문법이 업그레이드 되었다고합니다.

몇시간을 헤맨건지..

참고로 이렇게 쓰면 됩니다

elem = driver.find_element(By.TAG_NAME, "h1")

 

find_element_by_tag_name => find_element

위와 같이 문법 변경 되었습니다.

 

데이브리 선생님께 항상 감사드립니다.

 

답변 1

답변을 작성해보세요.

2

안녕하세요. 우선 공유해주셔서 감사합니다. 

또 ㅎㅎ 좋은 분 뵌듯해서 저도 정말 반갑습니다. 저도 사실 이 이슈를 오늘 알게 되었습니다. 급히 전체 코드포함 자료를 수정하였고, 지금에서야 공지를 드렸습니다. 아무쪼록 강의를 진행하시는데 큰 무리가 없으셨으면 좋겠습니다.

-------------------

 

안녕하세요. 잔재미코딩 Dave Lee 입니다.

쉽게 처음하는 파이썬 고급 크롤링 강의가 업데이트되어 공유드립니다.

최근 selenium 라이브러리가 업데이트되면서, 메서드명을 변경하였습니다. 물론 메서드명을 변경하더라도, 기존 메서드는 동일하게 사용할 수 있도록 하는 것이 일반적입니다. '호환성' 때문인데요. 그런데, selenium 라이브러리 개발팀? 은 기존 메서드를 아예 지원을 하지 않도록 하였습니다. 이렇게 되면, 기존에 selenium 을 활용한 코드들은 selenium 라이브러리 버전에 따라, 동작 안하는 케이스가 발생할텐데, 큰 결정인 듯합니다.

이와 함께 코드에 영향을 미치지는 않지만, 변경하려는 코드가 보여서, 다음과 같이 두 가지 사항을 변경하였습니다.

1. find_element_by_***() 메서드를 모두 find_element(By.***, ***) 와 같은 형태로 변경되었습니다.

     - 예: find_element_by_id('myid') --> find_element(By.ID, 'myid')

     - By.ID 등을 선언하기 위해서는 다음 추가 선언도 필요합니다.

        from selenium.webdriver.common.by import By 

2. selenium 이 4.x.x 이상에서, 코드에 영향을 미치지는 않지만, 초기 설정 코드도 변경하려는 듯합니다.

     - 기존에는 경로를 직접 인자로 넣어주면 되었지만 (예: webdriver.Chrome(chromedriver))

     - 이후에는 Service 객체에 넣어주는 방향으로 변경될 듯 합니다. (예: webdriver.Chrome(service=Service(chromedriver)) 

     - 이를 위해, webdriver_manager 라이브러리도 별도 설치가 필요합니다.

 

이상의 변경이 사실상, 메서드명이 변경된 것일 뿐이지만, 핵심 메서드명이 변경되어, 관련 코드 및 자료를 모두 업데이트하였습니다. 다음 챕터의 코드를 포함한 자료를 모두 업데이트하였으므로, 필요하실 때, 새로 다운받으시면 좋을 것 같습니다.

- Selenium 과 Scrapy 프레임워크 큰 그림과 목표 이해하기

- 연습문제로 풀어보기1 : Headless Chrome 과 Selenium 크롤링

- XPATH 큰 그림으로 이해하기

- 연습문제로 풀어보며 이해하는 XPATH 활용

- Selenium 을 활용한 멀티 페이지 크롤링

- Scrapy 다양한 사용법: Selenium 과 Scrapy 조합해서, 동적 웹페이지 크롤링하기

 

저도 오늘 급히 알게 되어, 급히 수정하였는데요. 아무쪼록 진행에 이슈는 없으셨으면 좋겠습니다.

감사합니다.