JavaScript로 HTML 페이지 데이터 가져오기

소개



HTML 페이지 데이터를 JavaScript를 사용하여 검색합니다.

검색할 데이터의 HTML



다음 페이지의 데이터를 검색합니다.



sample.html
<HTML>
<BODY>
    <TABLE id="personList" class="persons" border="1">
        <TR class="person">
            <TD class="id">123</TD>
            <TD class="name">Sato Taro</TD>
            <TD class="email">[email protected]</TD>
        </TR>
        <TR class="person">
            <TD class="id">124</TD>
            <TD class="name">Suzuki Hana</TD>
            <TD class="email">[email protected]</TD>
        </TR>
    </TABLE>
</BODY>
</HTML>

background script 에서 페이지로 javascript 삽입



페이지의 오른쪽 클릭 메뉴에서 JavaScript를 실행하여 데이터를 검색하는 프로그램을 만듭니다. background.js부터는 실행중인 페이지의 document를 얻을 수 없었으므로 JavaScript를 페이지에 삽입하여 실행하도록합니다.

포인트
* browser.tabs.executeScript에서 JavaScript를 페이지에 삽입
* 기점이 되는 element 를 document.getElementById 로 취득
* element.childNodes에서도 얻을 수 있었습니다만,\t 등 여분의 데이터가 들어가 있었으므로 children으로 아이 element를 취득

background.js
browser.contextMenus.create({
    id: "getTableData",
    title: "get table data",
    contexts: ["all"]
})

browser.contextMenus.onClicked.addListener((info, tab) => {
    if (info.menuItemId === "getTableData") {
        let executing = browser.tabs.executeScript(
                tab.id, {
                file: "/gettabledata.js"
            });
        executing.then(function(val) { 
                console.log("gettabledata.js executed"); 
                })
            .catch((reason) => { 
                console.log('gettabledata.js failed ('+reason+') here.');
                });

    }
});

gettabledata.js
getTableData();

function getTableData() {
    const personList = document.getElementById("personList");
    const persons = [];
    for (let i = 0; i < personList.children.length; i++) { // tbody
        console.log(personList.children);
        for (let j = 0; j < personList.children[i].children.length; j++) { // person
            const person = new Object();
            for (let k = 0; k < personList.children[i].children[j].children.length; k++) { // td
                if (personList.children[i].children[j].children[k].className
                        .indexOf("id") >= 0) {
                    person.id = personList.children[i].children[j].children[k].innerHTML;
                    console.log(person.id);
                }
                if (personList.children[i].children[j].children[k].className
                        .indexOf("name") >= 0) {
                    person.name = personList.children[i].children[j].children[k].innerHTML;
                    console.log(person.name);
                }
                if (personList.children[i].children[j].children[k].className
                        .indexOf("email") >= 0) {
                    person.email = personList.children[i].children[j].children[k].innerHTML;
                    console.log(person.email);
                }
            }
            persons.push(person);
        }
    }
    console.log(persons);
}

요약



오른쪽 클릭 메뉴에서 get table data를 선택하면


데이터를 검색할 수 있습니다.


참고



tabs.executeScript() - Mozilla | MDN
document - Web API 인터페이스 | MDN
Promise - JavaScript | MDN

좋은 웹페이지 즐겨찾기