{"id":1047,"date":"2019-06-20T11:03:03","date_gmt":"2019-06-20T02:03:03","guid":{"rendered":"https:\/\/oboki.net\/workspace\/?p=1047"},"modified":"2019-09-01T22:19:51","modified_gmt":"2019-09-01T13:19:51","slug":"selenium%ec%9d%84-%ec%9d%b4%ec%9a%a9%ed%95%9c-melon-playlist-%ec%b6%94%ea%b0%80-%ec%9e%90%eb%8f%99%ed%99%94","status":"publish","type":"post","link":"https:\/\/oboki.net\/workspace\/python\/selenium%ec%9d%84-%ec%9d%b4%ec%9a%a9%ed%95%9c-melon-playlist-%ec%b6%94%ea%b0%80-%ec%9e%90%eb%8f%99%ed%99%94\/","title":{"rendered":"[Python] Selenium\uc744 \uc774\uc6a9\ud55c Melon Playlist \ucd94\uac00 \uc790\ub3d9\ud654"},"content":{"rendered":"<h1>Melon Playlist \ucd94\uac00 \uc790\ub3d9\ud654<\/h1>\n<p><code>Selenium<\/code>\uc744 \uc774\uc6a9\ud574 <code>Melon<\/code>\uc5d0\uc11c \uc74c\uc545\uc744 \uac80\uc0c9\ud574 Playlist\uc5d0 \ucd94\uac00\ud558\ub294 \uacfc\uc815\uc744 \uc790\ub3d9\ud654\ud55c\ub2e4.<\/p>\n<p><code>Bugs<\/code>\uc5d0\uc11c <code>Melon<\/code>\uc73c\ub85c \uac08\uc544\ud0d4\ub294\ub370 \uadf8\ub3d9\uc548 Bugs\uc5d0\uc11c \ub4e3\ub358 \ub178\ub798\uac00 500\uace1\uc774 \ub118\uc5b4\uc11c.. \uc77c\uc77c\uc774 \uac80\uc0c9\ud574 \ucd94\uac00\ud558\uae30\uac00 \ubc88\uac70\ub85c\uc6cc Python Selenium\uc73c\ub85c playlist \uac80\uc0c9\ud574 \ucd94\uac00\ud558\ub294 \uc790\ub3d9\ud654 \uc2a4\ud06c\ub9bd\ud2b8\ub97c \ub9cc\ub4e4\uc5b4\ubd04.<\/p>\n<p>Selenium\uc740 \uc138\uc158\uc744 \uc774\uc6a9\ud574 \ud06c\ub864\ub9c1\uc744 \ud560 \uc218 \uc788\ub294 \uc815\ub3c4\ub85c\ub9cc \uc54c\uace0\uc788\uc5c8\ub294\ub370, \ud328\ud0a4\uc9c0 \ub0b4 WebDriver\ub85c\uc11c \ud65c\uc6a9\ud560 \uc218 \uc788\ub294 \ud074\ub798\uc2a4\uac00 \ub9ce\ub2e4. \ub85c\uadf8\uc778 \ud558\ub294 \uacfc\uc815\uacfc \uc74c\uc545\uc744 \ub2f4\ub294 \uacfc\uc815\uc5d0\uc11c \ubcc4\ub3c4\uc758 Window\uac00 \uc0ac\uc6a9\ub418\ub294\ub370 \ub4dc\ub77c\uc774\ubc84\uc758 <code>switch_to<\/code> \uba54\uc18c\ub4dc\ub97c \uc774\uc6a9\ud574\uc11c \uc5ec\ub7ec \ucc3d\ub4e4\uc744 \ud578\ub4e4\ub9c1\ud560 \uc218 \uc788\uace0, <code>implicitly_wait<\/code> \ubfd0\ub9cc \uc544\ub2c8\ub77c <code>WebDriverWait<\/code>\uc744 \uc774\uc6a9\ud574\uc11c \ud544\uc694\ud55c \uc815\ubcf4\uac00 \ub098\uc62c \ub54c\uae4c\uc9c0 \uc801\uc808\ud558\uac8c \uc138\uc158\uc744 \ub300\uae30\uc2dc\ud0ac \uc218 \uc788\ub2e4. <code>Alert<\/code> \ub97c \uc774\uc6a9\ud574 \uc6f9 \ube0c\ub77c\uc6b0\uc800\uc758 Alert \ud31d\uc5c5\ub3c4 \ucc98\ub9ac \uac00\ub2a5.<\/p>\n<h2>\uc74c\uc545 \ubaa9\ub85d<\/h2>\n<p>\uc544\ub798\uc640 \uac19\uc774 <code>plist.txt<\/code> \ud30c\uc77c\ub85c \uc74c\uc545 \ubaa9\ub85d\uc744 \uc900\ube44.<\/p>\n<p>\ub2f4\uc544\ub454 \uc74c\uc545\uc774 \uc218\ucc9c\uace1\uc774 \ub118\uc73c\uba74 \uc774\uac83\ub3c4 \uc790\ub3d9\ud654\ud574\uc57c\ud560 \uac83 \uac19\uc740\ub370 500\uace1 \uc815\ub3c4\ubc16\uc5d0 \uc548\ub3fc\uc11c, \uc7ac\uc0dd \ubaa9\ub85d\uc744 \ubc85\uc2a4 \uc568\ubc94\uc5d0 \ub2f4\uace0 \uadf8\ub0e5 \ub9c8\uc6b0\uc2a4\ub85c \ubcf5\uc0ac\ud574 \uc815\uc81c\ud568.<\/p>\n<p>\uad04\ud638\ub294 \ubaa8\ub450 \uc81c\uac70\ud558\uace0 <code>\uace1 \uba85 - \uc544\ud2f0\uc2a4\ud2b8 \uba85<\/code> \ud615\ud0dc\ub85c \uc815\ub9ac\ud588\ub294\ub370 \uba5c\ub860\uc5d0\uc11c \uc774 \uc0c1\ud0dc\ub85c \uac80\uc0c9\ud558\ub2c8 \uacb0\uacfc\uac00 \uc798 \ub098\uc628\ub2e4.<\/p>\n<pre><code class=\"txt\">Jenny - Mae Muller\nEverything's Gonna Be Alright  - PJ Morton [Maroon 5]\nOther Side Of The World - Melissa Polinar\n\ubc14\ub78c\uc774 \ubd84\ub2e4 - \uc774\uc18c\ub77c\nAqua Man - \ube48\uc9c0\ub178\n\ub204\uad70\uac00\uc758 \uc704\ub85c\uac00 \ud544\uc694\ud55c \ubc24 - \ud55c\uc62c\nHER - \ube14\ub77d\ube44\n\ub108 \uc5c6\uc778 \uc548 \ub41c\ub2e4 - \ube44\ud22c\ube44\nBellbottoms - Jon Spencer Blues Explosion\nGettin' Over You  - David Guetta\n1\uc6d4\ubd80\ud130 6\uc6d4\uae4c\uc9c0 - \uc724\uc885\uc2e0\n\uadf8\ub300\uac00 \ub0b4 \uc548\uc5d0 \ubc15\ud614\ub2e4 - \ud669\uce58\uc5f4\n\ud654  - \ub9e4\ub4dc \ud074\ub77c\uc6b4\n\ubc1c\uac78\uc74c - \uc5d0\uba54\ub784\ub4dc \uce90\uc2ac\nSunburn - Droeloe\nRoar - Katy Perry\n\uacb0\ud63c - \ubb38\ubb38\nBirthday - Katy Perry\nGucci - \uc81c\uc2dc\n\uc194\uc9c1\ud558\uac8c \ub9d0\ud574\uc11c \ub098 - \uae40\ub098\uc601\nWoman  - Kesha\n\uac00\ub9cc\ud788 \ub208\uc744 \uac10\uace0  - \uc815\uc7ac\uc6b1\n\uace0\ubc31 - \uc591\ub2e4\uc77c\n\uc740\uc601\uc774\uc5d0\uac8c - KCM\n\uc0ac\ub791\ud55c\ub2e4\ub294 \ub9d0 - \uc774\uc2b9\uae30\n\uc0ac\ub791...\uadf8 \ud754\ud55c \ub9d0 - \ubc15\ud6a8\uc2e0\n\uadf8 \ub178\ub798 - \uae40\ub3d9\ub960\n...\n<\/code><\/pre>\n<h2>\uc18c\uc2a4 \ucf54\ub4dc<\/h2>\n<ul>\n<li>\uc0ac\uc6a9\ud558\ub294 \ud06c\ub86c \ubc84\uc804\uc5d0 \ub9de\ub294 chromedriver \ub97c \uc900\ube44\ud574\uc57c \ud568<\/li>\n<li>\uc544\ub798 <code>${EMAIL_ADDR}<\/code>, <code>${PASSWORD}<\/code> \uc704\uce58\uc5d0 \uacc4\uc815\uba85\uacfc \ube44\ubc00\ubc88\ud638\ub97c \ub300\uc785\ud558\uace0 \uc2e4\ud589<\/li>\n<\/ul>\n<pre><code class=\"py\">import traceback\nfrom selenium import webdriver\nfrom selenium.webdriver.common.alert import Alert\nfrom selenium.webdriver.support.wait import WebDriverWait\nfrom selenium.common.exceptions import NoSuchElementException, NoAlertPresentException\n\ndriver = webdriver.Chrome('.\/chromedriver.exe')\ndriver.implicitly_wait(2)\ndriver.get('https:\/\/www.melon.com\/index.htm')\n\ndriver.find_element_by_xpath('\/\/*[@id=\"gnbLoginDiv\"]\/div\/button\/span').click()\ndriver.find_element_by_xpath('\/\/*[@id=\"conts_section\"]\/div\/div\/div[1]\/button').click()\nWebDriverWait(driver, 10).until(lambda d: len(d.window_handles) == 2)\ndriver.switch_to.window(driver.window_handles[1])\n\ndriver.find_element_by_id('loginEmail').send_keys('${EMAIL_ADDR}')\ndriver.find_element_by_id('loginPw').send_keys('${PASSWORD}')\ndriver.find_element_by_xpath('\/\/*[@id=\"login-form\"]\/fieldset\/button').click()\nWebDriverWait(driver, 10).until(lambda d: len(d.window_handles) == 1)\ndriver.switch_to.window(driver.window_handles[0])\n\n# \uba54\uc778 \uac80\uc0c9 \ucc3d\uacfc \uac80\uc0c9 \uacb0\uacfc \ud654\uba74\uc758 \uac80\uc0c9\ucc3d element id \uac00 \ub2ec\ub77c, \uc544\ub798 \ub8e8\ud504\uc5d0\uc11c\ub294 \uac80\uc0c9 \uacb0\uacfc \ud654\uba74\uc774 \uac80\uc0c9\ucc3d element id\ub85c \ud1b5\uc77c\uc2dc\ud0a4\uae30 \uc704\ud574 \uc784\uc758 \uac80\uc0c9\uc744 \ud55c\ubc88 \uc218\ud589\ndriver.find_element_by_id('top_search').send_keys('oboki')\ndriver.find_element_by_xpath('\/\/*[@id=\"gnb\"]\/fieldset\/button[2]\/span').click()\n\n# Playlist \ub85c\ub4dc\nfile = open('plist.txt',mode='rt',encoding='utf-8')\nplist = file.readlines()\nfile.close()\n\n# Loop\nfor p in plist:\n    try:\n        WebDriverWait(driver, 10).until(lambda d: len(d.window_handles) == 1)\n        driver.switch_to.window(driver.window_handles[0])\n\n        p = p.split('\\n')[0]\n\n        driver.find_element_by_id('top_search').clear()\n        driver.find_element_by_id('top_search').send_keys(p)\n        driver.find_element_by_xpath('\/\/*[@id=\"header_wrap\"]\/div[3]\/fieldset\/button[2]\/span').click()\n\n        driver.find_element_by_xpath('\/\/*[@id=\"divCollection\"]\/ul\/li[3]\/a').click()\n        driver.find_element_by_xpath('\/\/*[@id=\"frm_defaultList\"]\/div\/table\/tbody\/tr[1]\/td[3]\/div\/div\/button[2]\/span').click()\n\n        WebDriverWait(driver, 10).until(lambda d: len(d.window_handles) == 2)\n        driver.switch_to.window(driver.window_handles[1])\n\n        tmp = driver.window_handles[1]\n\n        driver.find_element_by_xpath('\/\/*[@id=\"plylstList\"]\/div\/table\/tbody\/tr\/td[1]\/div\/div\/span').click()\n        driver.find_element_by_xpath('\/\/*[@id=\"plylstList\"]\/div\/table\/tbody\/tr\/td[1]\/div\/span\/button\/span\/span').click()\n\n        try:\n            alert = Alert(driver)\n            alert_text = alert.text\n            alert.accept()\n            driver.close()\n            print(alert_text)\n        except NoAlertPresentException:\n            while True:\n                if len(driver.window_handles) &gt; 1:\n                    if (tmp != driver.window_handles[1]):\n                        break\n\n            WebDriverWait(driver, 10).until(lambda d: len(d.window_handles) == 2)\n            driver.switch_to.window(driver.window_handles[1])\n            driver.find_element_by_xpath('\/html\/body\/div\/div\/div[2]\/button\/span\/span').click()\n\n    except NoSuchElementException:\n        print(\"Error: \"+p)\n        traceback.print_exc()\n        continue\n    except IndexError:\n        print(\"Error: \"+p)\n        traceback.print_exc()\n        continue\n\ndriver.close()\n<\/code><\/pre>\n<h2>Melon \uc0ac\uc6a9 \ud6c4\uae30<\/h2>\n<p>\uae30\uc874\uc5d0 \ub4e3\ub358 \uace1\uc740 Melon\uc73c\ub85c \uc804\ubd80 \ub2e4 \uc62e\uae30\uae34 \ud588\ub294\ub370 \uba70\uce60 \uc368\ubcf4\ub2c8 Bugs\uac00 \ub354 \uc88b\uc740 \uac83 \uac19\ub2e4.<\/p>\n<ul>\n<li>\uae30\uae30\ub4f1\ub85d \uac00\ub2a5\ud55c \uc218\uac00 \uba5c\ub860\uc740 \ud55c \uac1c\uc774\uace0 \ubc85\uc2a4\ub294 \ub450 \uac1c<\/li>\n<li>\ubc85\uc2a4\ub294 \uc800\uc7a5\ud558\ub294 \uc74c\uc6d0\uc758 \uc74c\uc9c8\uc744 \uc120\ud0dd\ud560 \uc218 \uc788\uace0 \uc800\uc7a5\ud558\uace0\uc790 \ud558\ub294 \uace1\ub9cc \uc120\ud0dd\ud574\uc11c \uc800\uc7a5 \uac00\ub2a5\n<ul>\n<li>\uba5c\ub860\uc740 <code>\uc624\ud504\ub77c\uc778 \uc7ac\uc0dd<\/code> \uae30\ub2a5\uc744 \uc774\uc6a9\ud558\uba74 \uc790\ub3d9\uc801\uc73c\ub85c \uce90\uc2dc\ud558\ub294\ub370<\/li>\n<li>\uc774\ub54c \uc74c\uc9c8\uc774 \uac00\uc7a5 \ub0ae\uc740 \uc0c1\ud0dc\ub85c \uc800\uc7a5\ub418\uace0<\/li>\n<li>\ud574\ub2f9 \uae30\uae30\uac00 \ubb34\uc870\uac74 \uc624\ud504\ub77c\uc778 \uc0c1\ud0dc\uc774\uc5b4\uc57c \uc2a4\ud2b8\ub9ac\ub9dd\uc744 \ud558\uc9c0 \uc54a\uace0 \uce90\uc2dc\ub41c \ud30c\uc77c\uc744 \uc0ac\uc6a9<\/li>\n<\/ul>\n<\/li>\n<li>\uba5c\ub860\uc740 \uc2a4\ud2b8\ub9ac\ubc0d \ud50c\ub7ec\uc2a4 \uc694\uae08\uc81c\uae4c\uc9c0 FLAC \uc74c\uc6d0\uc744 \ub4e4\uc744 \uc218 \uc5c6\uc74c\n<ul>\n<li>\ubc85\uc2a4\ub294 \uae30\ubcf8 \uc694\uae08\uc81c\uc5d0\uc11c\ub3c4 FLAC \uc74c\uc6d0\uc744 \uc81c\ud55c\uc801\uc73c\ub85c \ub4e4\uc744 \uc218 \uc788\uc74c<\/li>\n<\/ul>\n<\/li>\n<li>Windows \ud658\uacbd\uc5d0\uc11c \ubc85\uc2a4 \ud50c\ub808\uc774\uc5b4\uac00 \uc6d4\ub4f1\ud788 \uc608\uc058\uace0 \uc0ac\uc6a9\uc131\uc774 \uc88b\uc74c<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Melon Playlist \ucd94\uac00 \uc790\ub3d9\ud654 Selenium\uc744 \uc774\uc6a9\ud574 Melon\uc5d0\uc11c \uc74c\uc545\uc744 \uac80\uc0c9\ud574 Playlist\uc5d0 \ucd94\uac00\ud558\ub294 \uacfc\uc815\uc744 \uc790\ub3d9\ud654\ud55c\ub2e4. Bugs\uc5d0\uc11c Melon\uc73c\ub85c \uac08\uc544\ud0d4\ub294\ub370 \uadf8\ub3d9\uc548 Bugs\uc5d0\uc11c \ub4e3\ub358 \ub178\ub798\uac00 500\uace1\uc774 \ub118\uc5b4\uc11c.. \uc77c\uc77c\uc774 \uac80\uc0c9\ud574 \ucd94\uac00\ud558\uae30\uac00 \ubc88\uac70\ub85c\uc6cc Python Selenium\uc73c\ub85c playlist \uac80\uc0c9\ud574 \ucd94\uac00\ud558\ub294 \uc790\ub3d9\ud654 \uc2a4\ud06c\ub9bd\ud2b8\ub97c \ub9cc\ub4e4\uc5b4\ubd04. Selenium\uc740 \uc138\uc158\uc744 \uc774\uc6a9\ud574 \ud06c\ub864\ub9c1\uc744 \ud560 \uc218 \uc788\ub294 \uc815\ub3c4\ub85c\ub9cc \uc54c\uace0\uc788\uc5c8\ub294\ub370, \ud328\ud0a4\uc9c0 \ub0b4 WebDriver\ub85c\uc11c \ud65c\uc6a9\ud560 \uc218 \uc788\ub294 \ud074\ub798\uc2a4\uac00 \ub9ce\ub2e4. \ub85c\uadf8\uc778 \ud558\ub294 \uacfc\uc815\uacfc \uc74c\uc545\uc744 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[10],"tags":[],"class_list":["post-1047","post","type-post","status-publish","format-standard","hentry","category-python"],"_links":{"self":[{"href":"https:\/\/oboki.net\/workspace\/wp-json\/wp\/v2\/posts\/1047","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/oboki.net\/workspace\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/oboki.net\/workspace\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/oboki.net\/workspace\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/oboki.net\/workspace\/wp-json\/wp\/v2\/comments?post=1047"}],"version-history":[{"count":4,"href":"https:\/\/oboki.net\/workspace\/wp-json\/wp\/v2\/posts\/1047\/revisions"}],"predecessor-version":[{"id":1159,"href":"https:\/\/oboki.net\/workspace\/wp-json\/wp\/v2\/posts\/1047\/revisions\/1159"}],"wp:attachment":[{"href":"https:\/\/oboki.net\/workspace\/wp-json\/wp\/v2\/media?parent=1047"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/oboki.net\/workspace\/wp-json\/wp\/v2\/categories?post=1047"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/oboki.net\/workspace\/wp-json\/wp\/v2\/tags?post=1047"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}