ๅฃ“ๅ€’
Ye0L
ๅฃ“ๅ€’
Total
Home
Today
  • ByO (59)
    • ์•…์„ฑ์ฝ”๋“œ๋ถ„์„๐Ÿณ (10)
      • Android (2)
      • Windows (8)
    • ๋ฐฑ์ค€โŒจ (1)
    • ๊ฐœ๋ฐœ๐Ÿ’ป (14)
      • Python (14)
      • C (0)
    • AI (2)
      • ML (2)
      • DL (0)
    • Dreamhack (23)
      • Web hacking (20)
      • Reversing (3)
    • CTF (5)
      • Forensic (5)
    • Study (4)
      • Linux (2)
      • Web (2)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ํ™ˆ
  • ๋ฐฉ๋ช…๋ก
  • ๊นƒํ—ˆ๋ธŒ๐Ÿ˜€
  • ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ

๊ณต์ง€์‚ฌํ•ญ

์ธ๊ธฐ ๊ธ€

ํƒœ๊ทธ

  • Raccoon Stealer v2
  • File Download Vulnerability
  • APK ๊ตฌ์กฐ
  • PYTHON
  • Background:Web Browser
  • Crawling
  • [DigitalForensic]with CTF
  • selenium
  • ๋“œ๋ฆผํ•ต
  • CSRF
  • Background: Cookie & Session
  • Raccoon Stealer
  • ClientSide: XSS
  • ์•…์„ฑ์ฝ”๋“œ๋ถ„์„
  • dreamhack
  • ํฌ๋กค๋ง
  • ๋ฆฌ๋ฒ„์‹ฑ
  • web hacking
  • forensic
  • reversing

์ตœ๊ทผ ๋Œ“๊ธ€

์ตœ๊ทผ ๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ

hELLO ยท Designed By ์ •์ƒ์šฐ.
ๅฃ“ๅ€’

Ye0L

[Python] Shadow DOM ํฌ๋กค๋ง - Selenium
๊ฐœ๋ฐœ๐Ÿ’ป/Python

[Python] Shadow DOM ํฌ๋กค๋ง - Selenium

2022. 11. 1. 03:34

Selenium No Such Element ์—๋Ÿฌ

์ตœ๊ทผ Selenium์„ ์‚ฌ์šฉํ•˜์—ฌ ํฌ๋กค๋Ÿฌ๋ฅผ ๊ตฌ์ถ•ํ•  ์ผ์ด ์ƒ๊ฒจ ํ‰์†Œ์™€ ๊ฐ™์ด Xpath, Selector ๋“ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ์ถ•์„ ์‹œ๋„ํ•˜์˜€๋‹ค.

 

ํ•˜์ง€๋งŒ, Selenium ์‚ฌ์šฉ ์‹œ ๊ฐ€์žฅ ํ”ํ•œ ์—๋Ÿฌ์ธ selenium.common.exceptions.NoSuchElementException: Message:no such element:Unable to locate element:{"method":"css selector", "selector':"์‹ค์ œ ์‚ฌ์šฉํ•œ ๊ตฌ๋ฌธ" ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ๋ชจ๋“  ๋ฐฉ๋ฒ•์„ ๋™์›ํ•ด ์ˆ˜์ •ํ•˜์˜€์œผ๋‚˜ ์˜ค๋ฅ˜๋Š” ํ•ด๊ฒฐ๋˜์ง€ ์•Š์•˜๋‹ค.

 

ํ•ด๋‹น ์—๋Ÿฌ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์—๋Š” ํด๋ž˜์Šค ๋ช…์— ๊ณต๋ฐฑ์ด ์กด์žฌํ•˜์—ฌ ๊ณต๋ฐฑ ๋Œ€์‹ ์— ์ (.)์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๊ฒฐ, ๋กœ๋”ฉ ์‹œ๊ฐ„์œผ๋กœ ์ธํ•œ ์˜ค๋ฅ˜๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ์‹œ๊ฐ„ ์ง€์—ฐ ์ฝ”๋“œ ์ถ”๊ฐ€, ๋™์ผํ•œ ํด๋ž˜์Šค ๋ช… ๋“ฑ ์—ฌ๋Ÿฌ ๋ฐฉ๋ฒ•์ด ์กด์žฌํ•˜์ง€๋งŒ ๋ชจ๋“  ๋ฐฉ๋ฒ•์ด ํ†ตํ•˜์ง€ ์•Š์•˜๋‹ค.

(ํ•ด๋‹น ์—๋Ÿฌ ํ•ด๊ฒฐ ๋ฐฉ์‹์€ ํ•ด๋‹น ํฌ์ŠคํŒ… ๊ธ€์„ ์ฐธ๊ณ ํ•˜์˜€๋‹ค.)

https://zeuskwon-ds.tistory.com/67

 

[selenium] ํฌ๋กค๋ง no such element ์˜ค๋ฅ˜ ํ•ด๊ฒฐ

์…€๋ ˆ๋‹ˆ์›€ ์—๋Ÿฌ ํฌ๋กค๋ง์„ ํ•˜๋ฉด์„œ element์— ์ ‘๊ทผํ•˜๋Š” ์ฝ”๋“œ ์‹คํ–‰์‹œ ๊ฐ€์žฅ ๋งŽ์ด ๋งŒ๋‚˜๋Š” ์—๋Ÿฌ๋Š” no such element์ผ ๊ฒƒ์ด๋‹ค. ๋‚ด๊ฐ€ ์ง€์ •ํ•œ element(css_selector = rogA2c)์˜ ๊ฐ’์„ ๋ชป์ฐพ์„ ๊ฒฝ์šฐ ๋ฐœํ–‰ํ•˜๋Š” ์—๋Ÿฌ์ด๋‹ค. ๋‚ด๊ฐ€

zeuskwon-ds.tistory.com

 

 

Shadow DOM 

๋ชจ๋“  ๋ฐฉ๋ฒ•์„ ๋™์›ํ•˜์˜€์œผ๋‚˜ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์•„ ํฌ๋กค๋ง ๋Œ€์ƒ ์‚ฌ์ดํŠธ์˜ ์ฝ”๋“œ๋ฅผ ์œ ์‹ฌํžˆ ๋ณด๋˜ ์ค‘ ๋‹ค์Œ๊ณผ ๊ฐ™์ด #shadow-root ๋ฌธ์ž์—ด์ด ์—ฌ๋Ÿฌ ๊ฐœ ์กด์žฌํ•˜๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ•˜์˜€๋‹ค.

#Shados-root

 

ํ•ด๋‹น ์ฝ”๋“œ๋ฅผ ๊ตฌ๊ธ€๋งํ•œ ๊ฒฐ๊ณผ Shadow DOM ์š”์†Œ๊ฐ€ ์ ์šฉ๋œ ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 

์ผ๋ฐ˜์ ์œผ๋กœ HTML ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด์•˜์„ ๋•Œ #document, #shadow-root ๋ฌธ์ž์—ด์ด ์กด์žฌํ•˜๊ณ  ํ•˜๋‹จ์— ๋˜ HTML ์ฝ”๋“œ๊ฐ€ ์กด์žฌํ•  ๋•Œ Shadow DOM ์š”์†Œ๊ฐ€ ์ ์šฉ๋˜์–ด ์žˆ๋‹ค๊ณ  ํŒ๋‹จํ•  ์ˆ˜ ์žˆ๋‹ค.

 

Shadow DOM์ด๋ž€?

HTML ๊ฐœ๋ฐœ ์‹œ ์ฝ”๋“œ๊ฐ€ ๋ณต์žกํ•ด์ง€๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ˆจ๊ฒจ๋†“์€ HTML ์š”์†Œ์ด๋‹ค.

์ผ๋ฐ˜ ์‚ฌ์šฉ์ž๊ฐ€ ๋ณผ ์ˆ˜ ์—†์œผ๋ฉฐ F1ํ‚ค๋ฅผ ๋ˆ„๋ฅธ ํ›„ ๊ฐœ๋ฐœ์ž ๋„๊ตฌ๋ฅผ ์„ ํƒํ•˜๋ฉด ์ˆจ๊ฒจ์ง„ DOM ์š”์†Œ๊นŒ์ง€ ๋ณผ ์ˆ˜ ์žˆ๋Š” ์˜ต์…˜์„ ์ฒดํฌํ•  ๊ฒฝ์šฐ์—๋Š” ๋ชจ๋‘ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

Show user agent shadow DOM

 

Shadow DOM ์š”์†Œ๊ฐ€ ์ ์šฉ๋˜์—ˆ์„ ๋•Œ ์š”์†Œ๊ฐ€ ์ˆจ๊ฒจ์ง„ ์ƒํƒœ์ด๋ฏ€๋กœ ํฌ๋กค๋ง์„ ์‹œ๋„ํ•˜๋ฉด ์›ํ•˜๋Š” element๋ฅผ ์ฐพ์ง€ ๋ชปํ•˜์—ฌ No such element ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์ด์—ˆ๋‹ค.

 

 

 

Shadow DOM ํฌ๋กค๋ง ๋ฐฉ๋ฒ•

Selenium์—์„œ๋Š” ํ˜„์žฌ Shadow DOM์— ๋Œ€ํ•œ ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ์œผ๋‚˜ pyshadow๋ผ๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์กด์žฌํ•œ๋‹ค.

https://pypi.org/project/pyshadow/

 

pyshadow

Selenium plugin to manage shadow DOM elements on web page.

pypi.org

 

ํ•ด๋‹น ํ”Œ๋Ÿฌ๊ทธ ์ธ์„ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ Shadow DOM ์š”์†Œ์— ๋Œ€ํ•œ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ ์„ค์น˜๋Š” ์ผ๋ฐ˜ ๋ชจ๋“ˆ๊ณผ ๋™์ผํ•˜๊ฒŒ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ช…๋ ์–ด๋กœ ์„ค์น˜ํ•œ๋‹ค.

pip install pyshadow

 

pyshadow์˜ import๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•œ๋‹ค.

from pyshadow.main import Shadow

 

์ดํ›„ ์‹ค์ œ ์ฝ”๋“œ์—์„œ๋Š” driver.get('์›ํ•˜๋Š” URL) ์ฝ”๋“œ ์ดํ›„ Shadow ๊ฐ์ฒด๋ฅผ ์„ ์–ธํ•˜๊ณ  ๊ธฐ์กด ์‚ฌ์šฉ ๋ฐฉ์‹๊ณผ ๋™์ผํ•˜๊ฒŒ find_element()๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์›ํ•˜๋Š” ๊ฒฐ๊ณผ๋ฅผ ํฌ๋กค๋ง ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ผ๋ถ€ ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

driver.get('ํฌ๋กค๋ง ๋Œ€์ƒ URL')

shadow = Shadow(driver) # Shadow ๊ฐ์ฒด ์„ ์–ธ
temp = shadow.find_element('~~')

 

 

 

์˜ค๋ฅ˜, ์ž˜๋ชป๋œ ์  ๋˜๋Š” ๊ถ๊ธˆํ•œ ์ ์ด ์žˆ์œผ์‹œ๋‹ค๋ฉด ๋Œ“๊ธ€ ๋‚จ๊ฒจ์ฃผ์„ธ์š”โ—

'๊ฐœ๋ฐœ๐Ÿ’ป > Python' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Python] Argparse ๋ชจ๋“ˆ ์‚ฌ์šฉ๋ฒ• ๋ฐ Cli ์˜ต์…˜  (0) 2022.11.11
[Crawling] ํ•ฉ๋ฒ•์ ์ธ Web Crawling ํ•˜๋Š” ๋ฒ•  (0) 2022.11.06
[Python] ํŒŒ์ด์ฌ ์ฃผ์„ ์ฒ˜๋ฆฌ ํ•˜๋Š” ๋ฒ• ๋ฐ ๋‹จ์ถ•ํ‚ค(์ฃผ์„ ์ฒ˜๋ฆฌ ์•ˆ๋  ๋•Œ ํ•ด๊ฒฐ๋ฒ•)  (0) 2022.10.15
[Python] ๊ฐ€์ƒ ํ™˜๊ฒฝ ์‚ฌ์šฉํ•˜๊ธฐ(venv)  (0) 2022.10.05
[Python] ZipํŒŒ์ผ ์••์ถ• ํ•ด์ œ(2)(๋น„๋ฐ€๋ฒˆํ˜ธ ํฌํ•จ)  (0) 2022.10.04
    '๊ฐœ๋ฐœ๐Ÿ’ป/Python' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • [Python] Argparse ๋ชจ๋“ˆ ์‚ฌ์šฉ๋ฒ• ๋ฐ Cli ์˜ต์…˜
    • [Crawling] ํ•ฉ๋ฒ•์ ์ธ Web Crawling ํ•˜๋Š” ๋ฒ•
    • [Python] ํŒŒ์ด์ฌ ์ฃผ์„ ์ฒ˜๋ฆฌ ํ•˜๋Š” ๋ฒ• ๋ฐ ๋‹จ์ถ•ํ‚ค(์ฃผ์„ ์ฒ˜๋ฆฌ ์•ˆ๋  ๋•Œ ํ•ด๊ฒฐ๋ฒ•)
    • [Python] ๊ฐ€์ƒ ํ™˜๊ฒฝ ์‚ฌ์šฉํ•˜๊ธฐ(venv)
    ๅฃ“ๅ€’
    ๅฃ“ๅ€’
    ์•…์„ฑ์ฝ”๋“œ ๋ถ„์„, ๊ฐœ๋ฐœ, ๋ฐฑ์ค€ ๋“ฑ ๋‚˜์˜ ์ผ์ง€

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”