์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- ํฌ๋กค๋ง
- ์ฝ๋ฉํ ์คํธ
- ์๊ณ ๋ฆฌ์ฆ
- node.js
- ์ฝ๋ฉ
- ๋ชจ๊ฐ์ฝ
- ํ๋ก ํธ์๋
- CSS
- error
- HTML
- ๋ฐฑ์ค
- KDT
- ํ ์ดํ๋ก์ ํธ
- fe
- ํ์ด์ฌ
- Python
- heapq
- ๊ฐ๋ฐ
- Til
- ๋ ธ๋ง๋์ฝ๋
- ๋๋ฆผ์ฝ๋ฉ
- JS
- ํ๋ก์ ํธ
- ๊ทธ๋ฆฌ๋
- javascript
- ๊ตญ๋น์ง์
- ํ๋ก๊ทธ๋๋จธ์ค
- ์ฝ๋ฉ์ ํ
- mongodb
- react
- Today
- Total
๐ฑ โ ๐ณ
๋ชจ๊ฐ์ฝ ํ์ด์ฌ ํฌ๋กค๋ง 14์ผ์ฐจ ๋ณธ๋ฌธ
#14. ๋์ ํฌ๋กค๋ง โฃ
๐ ํฌ๋กค๋ง ๋์ ์ฌ์ดํธ ์ดํด๋ณด๊ธฐ
์ฝ๋ฎค๋ํฐ ์นดํ์ ์ ์ํ์ฌ ์ ๊ท ํ์ ๊ฒ์ํ์ ๋ด์ฉ ์์ง
1๏ธโฃ ๋ค์ด๋ฒ ๋ก๊ทธ์ธ ํ์ด์ง

๊ทธ๋ฆผ์์๋ ๋ณผ ์ ์๋ฏ, ์์ด๋ ์ ๋ ฅ, ๋น๋ฐ๋ฒํธ ์ ๋ ฅ,
๋ก๊ทธ์ธ ๋ฒํผ ํด๋ฆญ ์์๋ก ์์ ์ ์งํํด์ผ ํ๋ค.
๊ธฐ์กด์๋ ์๋์ผ๋ก ๊ฐ์ ์ ๋ ฅํ๊ธฐ ์ํด, send_keys ํจ์๋ฅผ ์ด์ฉํ์ง๋ง
๋ค์ด๋ฒ๋ ์๋ํ ์ํํธ์จ์ด๋ฅผ ๋ง๊ณ ์๊ธฐ ๋๋ฌธ์,
send_keys ํจ์๋ฅผ ์ฌ์ฉํด ๋ก๊ทธ์ธ์ ์๋ํ๋ฉด
์๋์ ๊ฐ์ด ์๋์ ๋ ฅ๋ฐฉ์ง ์ด๋ฏธ์ง๊ฐ ๋์จ๋ค.

์ด๋ฐ ๊ธฐ๋ฅ์ ํผํ๊ธฐ ์ํด์, selenium์์ execute_script๋ผ๋ ํจ์๊ฐ ์กด์ฌํ๋ค.
์ ๋ ฅ๋ฐ์ JavaScript ์ฝ๋๋ฅผ ๋ธ๋ผ์ฐ์ ์์ ์คํ์ํค๋ ํจ์์ด๋ค.
driver.execute_script("JS ์คํฌ๋ฆฝํธ")
์์ด๋์ ๋น๋ฐ๋ฒํธ๋ ์ง์ ์ ๋ ฅํ ์ ์์ผ๋,
๋ก๊ทธ์ธ ๋ฒํผ์ ํ๊ทธ๋ง ์์๋ณด์๋ค.

ํ๊ทธ๋ button, class๋ btn_login์ด์ง๋ง id๊ฐ์ด log.login์ด๋ค.
์ค์ ํ๊ทธ์ ์ ํ์ ์กฐํฉ์ button#log.login.btn_login์ด์ง๋ง
selenium์์๋ ์ ( . )์ ํด๋์ค๋ก ์ฌ๊ธฐ๊ธฐ ๋๋ฌธ์,
์ ํ์์ ํ๊ทธ ์กฐํฉ์ log.login์ด๋ผ๋ id๋ฅผ ์ฌ์ฉํ ์๋ ์๋ค.
์ด ๊ฒฝ์ฐ find_element ํจ์์์ By.CSS_SELECTOR ๋์ By.ID๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
driver.find_element(By.ID, "id")
css selector๊ฐ ํ๊ทธ์ ์ ํ์ ์กฐํฉ์ ์ธ์๋ก ๋ฐ์๋ค๋ฉด,
id๋ ๋ง ๊ทธ๋๋ก id๋ฅผ ์ธ์๋ก ๋ฐ๋๋ค.
id๋ ํด๋น ํ์ด์ง์์ ์ ์ผํ ์์๋ผ๋๊ฑธ ์ด์ฉํ๋ ๊ฒ์ด๋ค.
2๏ธโฃ ์ ๊ทํ์ ๊ฒ์ํ์ id
๋ก๊ทธ์ธ์ด ์๋ฃ๋๋ฉด, ์ฝ๋ฎค๋ํฐ์ ์ ์ํ ์ ์๋ค.
https://cafe.naver.com/codeuniv
์ ๊ท ํ์ ๊ฒ์ํ ๋ฒํผ์ ํ๊ทธ์ ์ ํ์๋ฅผ ํ์ธํด ๋ณด๋ฉด,

์ ๊ท ํ์ ๊ฒ์ํ ๋ํ menuLink90์ด๋ผ๋ id๋ฅผ ๊ฐ์ง๋ ๊ฒ์ ํ์ธ ํ ์ ์๋ค.
์ด ์น๊ตฌ ์ญ์ find_element ํจ์์ By.ID๋ฅผ ์ด์ฉํด
์์๋ฅผ ์ ํํ๋ฉด ๋ ๊ฒ ๊ฐ๋ค.
3๏ธโฃ ๊ฒ์๊ธ์ XPath
์ด์ ์ฒซ ๋ฒ์งธ ๊ฒ์๋ฌผ์ ํด๋ฆญํด์ ๊ธ์ ๋ด์ฉ์ ํ์ธํด ๋ด์ผํ๋๋ฐ
์ด๋ฒ์๋ ์ฒซ ๋ฒ์งธ ๊ฒ์๋ฌผ์ ํ๊ทธ๋ ์ ํ์ ๋ง๊ณ XPath๋ฅผ ์์๋ณด์๋ค.

XPath๋, ์น ํ์ด์ง์ ๊ตฌ์กฐ ์ต ์๋จ๋ถํฐ ํ๊ทธ๋ฅผ ํ๊ณ ๋ค์ด๊ฐ,
ํด๋น html ์์๊ฐ ์ด๋์ ์กด์ฌ ํ๋ ์ง๋ฅผ ๋ํ๋ด๋ ๊ฒฝ๋ก์ ์ผ์ข
์ค์ ๋ก, ์ฒซ ๋ฒ์งธ ๊ฒ์๊ธ์ XPath๋ ์๋์ ๊ฐ๋ค.
/html/body/div[1]/div/div[4]/table/tbody/tr[1]/td[1]/div[3]/div/a
html ํ๊ทธ๋ถํฐ ์์ํด์, body, div[1], ...๋ฅผ ํ๊ณ ๊ฐ๋ค ๋ณด๋ฉด,
๋ง์ง๋ง aํ๊ทธ๊ฐ ์ฒซ ๋ฒ์งธ ๊ฒ์๊ธ์ ์๋ฏธ
์ด ๋ํ selenium์ find_elementํจ์์ By.XPATH๋ฅผ ํตํด
HTML ์์๋ฅผ ์ ํํ ์ ์๋ค.
4๏ธโฃ ๊ฒ์๋ฌผ์ ํ๊ทธ
ํ๊ทธ๋ div์ด๊ณ , se-module, se-module-text๋ผ๋ ๋ ํด๋์ค๋ฅผ ๊ฐ์ง๋ค.
๐ ํ์ด์ฌ ์ฝ๋ ์์ฑ
1๏ธโฃ ๋ผ์ด๋ธ๋ฌ๋ฆฌ import
# ๋ผ์ด๋ธ๋ฌ๋ฆฌ import
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By
import time
2๏ธโฃ ๋ค์ด๋ฒ ๋ก๊ทธ์ธ ํ์ด์ง ์ ์
chrome_driver = ChromeDriverManager().install()
service = Service(chrome_driver)
driver = webdriver.Chrome(service=service)
# ๋ค์ด๋ฒ ๋ก๊ทธ์ธ ํ์ด์ง ์ ์
login_url = 'https://nid.naver.com/nidlogin.login'
driver.get(login_url)
# ์๊ฐ์ ์ฌ์ ์ํ๋ ๋งํผ
time.sleep(2)
3๏ธโฃ ์์ด๋ & ๋น๋ฐ๋ฒํธ ์ ๋ ฅ
๋ค์ด๋ฒ์ ๋ก๊ทธ์ธํ ๊ฒฝ์ฐ 'send_keys()' ํจ์๊ฐ ์๋๋ผ
'execute_script()' ํจ์๋ฅผ ์ฌ์ฉ
# ๋ณธ์ธ์ ์์ด๋, ๋น๋ฐ๋ฒํธ๋ฅผ ๊ฐ๊ฐ ๋ณ์์ ์ ์ฅ
# ex) ์์ด๋ : comu, ๋น๋ฐ๋ฒํธ : 12345
my_id = 'comu'
my_pw = '12345'
# ์์ด๋์ ๋น๋ฐ๋ฒํธ ์
๋ ฅ
driver.execute_script("document.getElementsByName('id')[0].value = \\'" + my_id + "\\'")
driver.execute_script("document.getElementsByName('pw')[0].value = \\'" + my_pw + "\\'")
# ์๊ฐ์ ์ฌ์ ์ํ๋ ๋งํผ
time.sleep(1)
execute_script ํจ์์ ์ ์ด๋ document.~~ ๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ฌธ๋ฒ
ํ์ด์ฌ์์ ๊ฐ์ ๋๊ฒจ ์ฃผ๋ ๊ฒ์ด ์๋,
๋ธ๋ผ์ฐ์ ์์ JS๋ฅผ ์คํ์์ผ ๋ณด์์ ์ฐํํ๋ ๋ฐฉ๋ฒ
4๏ธโฃ '๋ก๊ทธ์ธ' ๋ฒํผ ํด๋ฆญ
# '๋ก๊ทธ์ธ' ๋ฒํผ ํด๋ฆญ
button = driver.find_element(By.ID, 'log.login')
button.click()
# ์๊ฐ์ ์ฌ์ ์ํ๋ ๋งํผ
time.sleep(1)
5๏ธโฃ ์ฝ๋ฎค๋ํฐ ์ ์
๋ก๊ทธ์ธ์ ์๋ฃํ๋ค๋ฉด, ์ด์ ์ฝ๋ฎค๋ํฐ๋ก ์ ์
'get()' ํจ์๋ฅผ ์ฌ์ฉํด์ ์๋ํ๋ ํฌ๋กฌ ์ฐฝ์ ์ด๋ ์์ผ ์ฃผ์๋ค.
# ์ฝ๋ฎค๋ํฐ ์ ์
comu_url = 'https://cafe.naver.com/codeuniv'
driver.get(comu_url)
# ์๊ฐ์ ์ฌ์ ์ํ๋ ๋งํผ
time.sleep(1)
6๏ธโฃ '์ ๊ทํ์๊ฒ์ํ' ํด๋ฆญ
# '์ ๊ทํ์๊ฒ์ํ' ํด๋ฆญ
menu = driver.find_element(By.ID, 'menuLink90')
menu.click()
# ์๊ฐ์ ์ฌ์ ์ํ๋ ๋งํผ
time.sleep(1)
7๏ธโฃ ํ๋ ์ ์ ํ
ํฌ๋กค๋ง์ ํ๋ค ๋ณด๋ฉด, ๋ถ๋ช ํ ๋ด๊ฐ ์ํ๋ ์ ๋ณด๊ฐ ๋ชจ๋ ํ๋ฉด์ ์๊ณ ..
HTML ์ฝ๋์์๋ ์ํ๋ ์ ๋ณด๊ฐ ๋ชจ๋ ์๋๋ฐ,
ํ์ด์ฌ์ผ๋ก ๊ฒ์ํ๋ฉด ์๊ฑฐ๋, ํฌ๋กค๋ง์ด ๋์ง ์๋ ๊ฒฝ์ฐ๊ฐ ์ข ์ข ๋ฐ์ํ๋ค.
๋ค์ด๋ฒ ์นดํ๊ฐ ๋ฐ๋ก ์์ ๊ฒฝ์ฐ์ธ๋ฐ์!
์ด ๊ฒฝ์ฐ ๊ฐ์ฅ ๋จผ์ ํ๋ ์์ผ๋ก ๊ตฌ์ฑ๋ ๋ถ๋ถ์ด ์๋์ง ํ์ธํด์ผ ํ๋ค.
ํ๋ ์์ HTML ๋ด๋ถ์ ๋ ๋ค๋ฅธ HTML์ ์ง์ด๋ฃ์ด ๋ ๊ฒ์ผ๋ก ์๊ฐํ๋ฉด ๋๋ค.
๊ฐ๋ฐ์ ๋๊ตฌ(ctrl F)์์ iframe์ ๊ฒ์ํ์ฌ ๋ค์ด๋ฒ ์นดํ๊ฐ ํ๋ ์์ผ๋ก ๊ตฌ์ฑ๋ ์นํ์ด์ง ์๋์ง ํ์ธ
ํ๋ ์์ผ๋ก ๊ตฌ์ฑ๋ ์น ํ์ด์ง๋ฅผ ํฌ๋กค๋งํ๊ธฐ ์ํด์
selenium์ ํ์ ์์น๋ฅผ ํ๋ ์ ๋ด๋ถ๋ก ์ ํํด์ค์ผ ํ๋ค.
์ด ๋ ์ฌ์ฉํ๋ ํจ์๊ฐ, switch_to.frame ์ด๋ค.
driver.switch_to.frame("ํ๋ ์์ ์ด๋ฆ")
์ ํ์ ์ค 'name'์ ์ฌ์ฉํ์ฌ selenium์ ์์น๋ฅผ ์ฎ๊ฒจ ์ฃผ์๋ค.
# ํ๋ ์ ์ ํ
driver.switch_to.frame('cafe_main')
# ์๊ฐ์ ์ฌ์ ์ํ๋ ๋งํผ
time.sleep(1)
8๏ธโฃ ์ฒซ๋ฒ์งธ ๊ฒ์๋ฌผ ํด๋ฆญ
xpath = "/html/body/div[1]/div/div[4]/table/tbody/tr[1]/td[1]/div[3]/div/a"
# ์ฒซ๋ฒ์งธ ๊ธ ํด๋ฆญ
writing = driver.find_element(By.XPATH, xpath)
writing.click()
# ์๊ฐ์ ์ฌ์ ์ํ๋ ๋งํผ
time.sleep(1)
9๏ธโฃ ๊ธ ๋ด์ฉ ์ถ๋ ฅ
# ๊ธ ๋ด์ฉ ์ถ๋ ฅ
content = driver.find_element(By.CSS_SELECTOR, "div.se-component-content").text
print(content)
# ํฌ๋กฌ ์ฐฝ ๋ซ๊ธฐ
driver.close()
๐ ์ต์ข ์ฝ๋ ๋ฐ ์คํ๊ฒฐ๊ณผ
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By
import time
chrome_driver = ChromeDriverManager().install()
service = Service(chrome_driver)
driver = webdriver.Chrome(service=service)
login_url = "https://nid.naver.com/nidlogin.login"
driver.get(login_url)
time.sleep(2)
my_id = "comu"
my_pw = "12345"
driver.execute_script("document.getElementsByName('id')[0].value = '" + my_id + "'")
driver.execute_script("document.getElementsByName('pw')[0].value = '" + my_pw + "'")
time.sleep(1)
button = driver.find_element(By.ID, "log.login")
button.click()
time.sleep(1)
comu_url = "https://cafe.naver.com/codeuniv"
driver.get(comu_url)
time.sleep(1)
menu = driver.find_element(By.ID, "menuLink90")
menu.click()
time.sleep(1)
driver.switch_to.frame("cafe_main")
time.sleep(1)
xpath = "/html/body/div[1]/div/div[4]/table/tbody/tr[1]/td[1]/div[3]/div/a"
writing = driver.find_element(By.XPATH, xpath)
writing.click()
time.sleep(1)
content = driver.find_element(By.CSS_SELECTOR, "div.se-component-content").text
print(content)
driver.close()
๐ ์คํ ๊ฒฐ๊ณผ


โโญ์ ๋ฆฌํ๊ธฐโญ
โ 'execute_script()' ํจ์
โ XPath
โ ํ๋ ์ ์ ํ
'Server > Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python] ๊ธฐ์ด ์๋ฃํ (0) | 2022.05.23 |
---|---|
๋ชจ๊ฐ์ฝ ํ์ด์ฌ ํฌ๋กค๋ง 15์ผ์ฐจ (0) | 2022.04.08 |
๋ชจ๊ฐ์ฝ ํ์ด์ฌ ํฌ๋กค๋ง 13์ผ์ฐจ (0) | 2022.04.08 |
๋ชจ๊ฐ์ฝ ํ์ด์ฌ ํฌ๋กค๋ง 12์ผ์ฐจ (0) | 2022.04.08 |
๋ชจ๊ฐ์ฝ ํ์ด์ฌ ํฌ๋กค๋ง 11์ผ์ฐจ (0) | 2022.04.08 |