์๋ ํ์ธ์.
์ค๋์ ์นํฌ๋กค๋ง์ ๋ํด ๊ธ์ ์ฐ๋๋ก ํ๊ฒ ์ต๋๋ค.
์ ๊ฐ ์นํฌ๋กค๋ง์ ๊ณต๋ถํด์ผ์ง! ํด์ ๊ณต๋ถํ๊ฒ ์๋๋ผ ์ผ์ ๋๊ณ ์ ์๋ํ๋ฅผ ์ฐพ์๋ณด๋ค
Beautifulsoup๊ณผ Selenium์ ์๊ฒ ๋์์ต๋๋ค.
์ ๊ฐ ์ผ์ ๋๊ธฐ ์ํด ๋ง๋๋ ํ๋ก๊ทธ๋จ์ ์ ํ๋ฒํธ๋ฅผ ์๋์ ์ผ๋ก ๋ฐ์ค๋ ํ๋ก๊ทธ๋จ์ ๋๋ค.
๊ตณ์ด ์นํฌ๋กค๋ง์ ๊ณต๋ถํ ๋ ์๋ฐ ์คํฌ๋ฆฝํธ ๊ฐ์ ์ธ์ด๋ ๋ชฐ๋ผ๋ ๋ฉ๋๋ค.
Beautifulsoup๋ ํํ์ด์ง์ ๋ํ ๋ด์ฉ์ ๋ถ๋ฌ์ค๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๊ณ ,
Selenium์ ์๋ํ๋ฅผ ๊ตฌํํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค.
์ด ๋ ๊ฐ์ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ง ์๋ค๋ฉด ๊ตฌํํ๋๋ฐ ์ฌ๋งํ ์๋ํํ๋ก๊ทธ๋จ์ ๋ง๋ค ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ ๊ฐ ๋ง๋ ๋งคํฌ๋ก ํ๋ก๊ทธ๋จ๋ ์น๊ธฐ๋ฐ ์ง์์ ๋ชจ๋ฅด๋ ์ํ์์ 3์ผ์ ๊ฑฐ์ณ ๋ง๋ค์์ต๋๋ค.
๋์์์ผ๋ก ๋ณด์ฌ๋๋ฆฌ๊ณ ์ถ์ง๋ง, ํ๋ก๊ทธ๋จ ์์ฒด์ ์๋๋ค์ ์ ํ๋ฒํธ๋ฑ์ด ์์ด, ์ ๊ฐ ๋ชจ์์ดํฌ๋ฅผ ๋ค ์ฒ๋ฆฌํ ์ํ์์ ๋์์์ ์ฌ๋ฆด ์๊ฐ์ ๋๋ค.
์ ๋ ์นํฌ๋กค๋ง์ ํ๊ธฐ ์ํด ๊ธฐ๋ณธ์ด ์๋, ์ ๊ฐ ํ๋ก๊ทธ๋จ์ ๊ตฌํํ๋ฉด์ ๋งํ๋ ๋ถ๋ถ์ ์์ฑํ๋๋ก ํ๊ฒ ์ต๋๋ค.
iframe : ์นํ์ด์ง ์์ ๋๋ค๋ฅธ ์นํ์ด์ง
ํ๋ก๊ทธ๋จ์ ๊ตฌํํ ๋ ๊ฐ์ฅ ์ด๋ ค์ ๋ ๋ฌธ์ ์ค ํ๋๊ฐ iframe ๋ฌธ์ ์์ต๋๋ค.
์ฒ์์
[selenium]
driver.find_element_by_xpath() : ์ ๋ ๊ฒฝ๋ก
driver.find_element_by_id() : id๊ฐ
driver.find_element_by_name() : ์ด๋ฆ
driver.find_element_by_tag_name() : ํ๊ทธ ์ด๋ฆ
์ด์ง๊ฐํ์ง ์๊ณ ์์ผ ์ด 4๊ฐ์ง ํจ์๋ก ๊ตฌํํ ์ ์์ต๋๋ค.
iframe์ 4๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ๋ถ๊ฐ๋ฅํฉ๋๋ค. ์ฌ์ฉํ ์
stale element reference: element is not attached to the page document selenium.common.exceptions.NoSuchElementException:
Message: no such element: Unable to locate element
์ด๋ฐ ๋ฌด์๋ฌด์ํ ์๋ฌ๋ฅผ ๋ณด์๊ฒ ๋ ๊ฒ๋๋ค.
iframe์ ์นํ์ด์ง ์์ ๋ ๋ค๋ฅธ ์์ ์นํ์ด์ง์ด๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ์ ๊ทผ ๋ฐฉ๋ฒ์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
์ฐ์ ์ฐ๋ฆฌ๋ค์ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ด์ด๋ณด๊ธฐ ์ ์ iframe์ ํ์ธํ ์ ์์ต๋๋ค.
์ฒซ ๋ฒ ์งธ:
iframes = driver.find_elements_by_tag_name('iframe')
for i in iframes:
print(i)
print๋ฅผ ์ฐ์ด์ ์์ ์ด ์ฐพ๊ณ ์ ํ๋ iframe ์ด๋ ์๋์ง ํ์ธํฉ๋๋ค.
๋ง์ฝ ์์ ์ด ์ํ๋ ๊ฐ์ด iframe[0]์ ์๋ค๊ณ ๊ฐ์ ํฉ์๋ค.
iframe[0]์ผ๋ก ํ๋ ์์ผ๋ก ์์น๋ฅผ ์ฎ๊น๋๋ค.
๋ ๋ฒ ์งธ:
[selenium]
driver.switch_to.frame(iframes[0])
์ด์ ์์น๊ฐ iframes[0]๋ก ์ฎ๊ฒจ ์ก๋ค๋ฉด,
์ธ ๋ฒ ์งธ:
[selenium]
html = driver.page_source
iframes[0]์ ํ์ฃผ์๋ฅผ ๋ฐ์์ต๋๋ค.
๋ค ๋ฒ ์งธ:
[beautifulsoup]
soup = BeautifulSoup(html, 'html.parser')
html์ ํ์ฑํฉ๋๋ค.
๋ค ์ฏ ๋ฒ ์งธ:
[beautifulsoup]
soup.find()
soup.find_all()
์ด์ ์์ ์ด ์ํํ๊ณ ์ ํ๋ ํจ์๋ฅผ ๊ตฌํํฉ๋๋ค.
์ฌ ์ฏ ๋ฒ ์งธ:
[selenium]
driver.switch_to.default_content()
๋ค์ ์๋ ํ๋ ์์ผ๋ก ๋์๊ฐ๋๋ค.
์ด๋ฐ์์ผ๋ก ํ๋ค๋ฉด iframe์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
๋ค์ additem๋ฐ์ค๋ฅผ ์ ๊ทผํ๋ select์ ๋ํด ๊ธ์ฐ๋๋ก ํ๊ฒ ์ต๋๋ค.