파이썬 크롤링중 특정 패턴 id의 버튼만 클릭하는 방법

조회수 3017회
  • 이전 질문에서 받은 답으로 열심히 코드 만들어보다가 막혀서 다시 물어보는 질문입니다

서로 비슷한 id 를 가진 버튼이 여러 개있을 경우 버튼을 모두 클릭하고

해당 버튼의 id가 없을 경우 아무것도 하지 않는 코드를 만들려고합니다

서로 비슷한 id 의 경우, 앞은 btnclick_ 이와 같고 언더바 뒤로는 0~9까지의 각기 다른 숫자여서 정규표현식을 사용하였습니다

html = driver.page_source
soup = BeautifulSoup(html,'html.parser')
btn_click = soup.find_all(id=re.compile('btnclick_[0-9]{1,2}'))

크롤링을 통해 id를 찾는 것 까지는 코드를 만들었는데 이후부터 문제입니다

if 를 사용하여 btn_click에 해당할 경우 버튼을 클릭하고

반복문을 사용하여 btn_click에 해당하는 모든 버튼을 클릭하고 싶은데

if문과 for문을 조합할 방법을 모르겠습니다

if btn_click에 해당하는 id가 있을때:
    for i in :
        해당하는 모든 버튼을 클릭한다

이런식으로 코드를 만들고싶습니다.

if문과 for문을 어떻게 조합해야하나요?

2 답변

  • 단순히 아래와 같이 하면 됩니다.

    soup.find_all 에 의해 필요한 버튼만 추출하고 있고 항목이 list로 반환이 됩니다. 못찾았을 경우에는 빈 list로 반환되니 btn_click 를 상대로 이터레이션 처리하면 됩니다.

    for btn in btn_click:
        버튼클릭 작업
    
    • 혹시 selenium 을 사용한 건가요? selenium 을 이용해서 이벤트 처리 하고 싶다는 것인가요? 그러면 beautifulsoup 은 필요없습니다...각각 용도가 다른겁니다. 질문을 애초부터 잘못했습니다...selenium 만으로 작업해야 원하는 클릭등의 이벤트처리를 할 수 있습니다. 정영훈 2020.1.9 19:08
    • selemiun만으로 작업해야할때 정규표현식을 어떻게 바꿔야하나요? btn_click = driver.find_element_by_id(id=re.compile('btnclick_[0-9]{1,2}'))가 맞을까요? 알 수 없는 사용자 2020.1.10 08:39
    • 크롤링하려는 주소를 올려보세요. 정영훈 2020.1.10 14:55
    • 크롤링하려는 주소가 로그인이 필요한 주소라 보내드려도 해결이 되진 않을 것 같습니다. 구글링을 통해 이곳저곳 찾아보고 맞는 코드를 만들었습니다. beautifulsoup는 필요치 않고 selenium만으로 작업해야한다 알려주셔서 덕분에 답을 찾았습니다. 감사합니다 :) 알 수 없는 사용자 2020.1.13 10:48
  • 이곳저곳 찾아보고 드디어 맞는 코드를 만들었습니다

    try:
        for QTY in range(0,5):
            driver.find_element_by_css_selector('#btnclick_%s'%QTY).click()
    except:
        pass
    

    항상 버튼이 0~5까지 모두 있는 건 아니라서 없을 경우 에러가 떠서 try~except로 해결했습니다

    • (•́ ✖ •̀)
      알 수 없는 사용자
    • 이건 BeautifulSoup을 이용한게 아니라 셀레니움을 이용한거예요. 두개를 잘 조합하면서 하면 쉽게 잘 될겁니다~ hermesmagic 2022.2.19 19:43

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)