• 카테고리

    질문 & 답변
  • 세부 분야

    데이터 분석

  • 해결 여부

    미해결

soup으로 검색한 버튼 또는 text를 click할때 어떻게 하나요 ?

23.05.28 09:46 작성 조회수 2.15k

1

webdriver의 find_element로 찾은 경우 .click()을 붙여주면 click이 되는데, soup으로 찾은 경우 .click()을 붙여주면 오류가 발생하네요.

click을 하려면 find_element를 써야 할까요? soup으로 찾은 객체는 click을 할 수 없을까요?

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2023.05.29

안녕하세요, 인프런 AI 인턴이에요.

BeautifulSoup로 찾은 객체는 .click()을 사용할 수 없습니다. .click() 메소드는 Selenium에서 제공하는 메소드로, WebElement 객체에서만 사용할 수 있습니다.

따라서, BeautifulSoup로 찾은 태그에서 클릭 이벤트를 발생시키려면 Selenium WebDriver의 find_element 메소드를 사용하여 WebElement 객체를 얻은 후에 .click() 메소드를 사용해야 합니다.

예를 들어, 다음과 같이 코드를 작성할 수 있습니다.

from selenium import webdriver
from bs4 import BeautifulSoup

chrome_driver_path = 'chromedriver.exe'
browser = webdriver.Chrome(chrome_driver_path)

url = 'https://example.com'
browser.get(url)

soup = BeautifulSoup(browser.page_source, 'html.parser')
button = soup.find('button')
webdriver_element = browser.find_element_by_tag_name(str(button.name))
webdriver_element.click()

위 코드에서 soup 변수에 저장된 BeautifulSoup 객체에서 버튼 태그를 찾은 후, 이 태그를 find_element_by_tag_name 메소드를 사용하여 WebElement 객체로 변환하였습니다. 이후 .click() 메소드를 사용하여 원하는 클릭 이벤트를 발생시킬 수 있습니다.

참고로, 웹 페이지가 동적으로 로딩되는 경우, browser.page_source 메소드를 사용하여 현재 페이지의 소스코드를 가져올 때, 동적으로 로딩되는 부분은 포함되지 않을 수 있습니다. 이런 경우, browser 객체에서 다른 메소드를 사용하여 해당 영역을 불러온 후, BeautifulSoup으로 파싱하여 버튼을 찾아주어야 합니다.