// ==UserScript== // @name 네이버 부동산 테이블 뷰 // @namespace Violentmonkey Scripts // @match https://new.land.naver.com/complexes* // @version 0.1 // @author Maru // @description Please use with violentmonkey // @require https://code.jquery.com/jquery-1.12.4.min.js // @require https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.10/clipboard.min.js // @require https://cdn.jsdelivr.net/npm/@violentmonkey/dom@2 // @downloadURL none // ==/UserScript== let gLastSelectedApt = ""; let gItems = ""; class Item { constructor() { this.key = 0; this.name = ""; this.type = ""; this.price = ""; this.monthly = ""; this.dong = ""; this.floor = ""; this.direction = ""; this.desc = ""; this.realEstate = ""; } } let items = []; function observeMainTitle() { // Find the target node let node = document.querySelector('#complexTitle'); if (!node) { return; } if (node.innerText != gLastSelectedApt) { node.innerText += "(Hello)"; gLastSelectedApt = node.innerText; console.error(gLastSelectedApt); } } // 각각의 매물을 감시한다. function observeItems() { let itemNode = document.querySelector('.item_list .item'); if (!itemNode) { return; } let item = new Item(); let titleNode = itemNode.querySelector('.item_title .text'); item.title = titleNode.innerText; item.type = itemNode.querySelector('.price_line .type').innerText; item.dong = titleNode.innerHTML; let price = itemNode.querySelector('.price_line .price').innerText; let prices = price.split('/'); item.price = price[0]; if (prices.length > 1) { item.monthly = price[1]; } let specNode = itemNode.querySelector('.info_area .line:nth-child(1) .spec'); item.floor = specNode.innerHTML; item.desc = itemNode.querySelector('.info_area .line:nth-child(2) .spec').innerText; item.realEstate = itemNode.querySelector('.agent_info:nth-child(2) .agent_name').innerText; console.error(JSON.stringify(item)); } const disconnect = VM.observe(document.body, () => { observeItems(); observeMainTitle(); }); // You can also disconnect the observer explicitly when it's not used any more //disconnect();