-->

แจก imacro เก็บสินค้าและรายละเอียดของเว็บ Lazada

สคริบ Imacro สำหรับการเก็บสินค้าของเว็บ Lazada เป็นโปรแกรมที่ใช้ร่วมงานระหว่างโปรแกรม Firefox และ Extension อย่าง Imacro ตัวสคริบนี้ผมเขียนให้เก็บสินค้าอย่างอัตโนมิติ โดยจะเก็บข้อมูลในรูปแบบ csv ที่สามารถเปิดใน Excel ได้ง่าย 

โดยการเปิดหน้าหมวดหมู่สินค้าของเว็บ Lazada ไว้ แล้วรันสคริบ imacro ได้เลย หลังจากนั้น ไฟล์และข้อมูลจะถูกเก็บไว้ตามที่เราระบุในการตั้งค่าครับ

โดยสามารถตั้งค่าเบื้องต้น เช่น 

  • folder ที่ใช้จัดเก็บไฟล์ csv ที่ได้จาก Lazada
  • fileName(ชื่อไฟล์ csv) เป็นการระบุชื่อไฟล์ว่าเราจะตั้งไว้อย่างไร ตัวนี้ไม่ได้อัตโนมัติครับ
  • perPage ที่ใช้ตั้งค่ารายการสินค้าต่อหน้าของเว็บ Lazada ครับ ผมตั้งเบื้องเต้นไว้ 40 ชิ้นต่อหน้า
//------User Setting--------------------------------------------------
var folder = "D:\\Keeper\\Lazada"; //ไฟล์จะถูกเก็บที่ D:\keeper\Lazada สร้างโฟลเดอร์ไว้ด้วยนะครับ
var fileName = "lazada";
var perPage = '40';
var waitPage = "1" //second

//------Text Display Status-----
var web = "Lazada"
var modifiedDate = "29-05-2021"

Download imacro เก็บสินค้าและรายละเอียดของเว็บ Lazada

Lazada-Keep-Detail-210529.zip 2kb

Full Script Imacro Js Lazada

//------User Setting--------------------------------------------------
var folder = "D:\\Keeper\\Lazada"; //ไฟล์จะถูกเก็บที่ D:\keeper\Lazada สร้างโฟลเดอร์ไว้ด้วยนะครับ
var fileName = "lazada";
var perPage = '40';
var waitPage = "1" //second

//------Text Display Status-----
var web = "Lazada"
var modifiedDate = "29-05-2021"

//***Check URL HTTP***
function http(str) {
    var tarea = str;
    var tarea_regex = /^(http|https)/;
    if (tarea_regex.test(String(tarea).toLowerCase()) == true) {
        return str;
    } else {
        return "http:" + str;
    }
}

//Check data
function checkdata(str) {
    //if (str !== "__undefined__" || str !== "#EANF#") {
    if (![undefined, "undefined", "null", "#EANF#", '#nodata#', "", " ", null].includes(str)) {
        str = str.replace("SKUSKU", "SKU : ");
        str = str.replace("แบรนด์แบรนด์", "แบรนด์ : ");
        str = str.replace("เทรนด์แฟชั่นผู้หญิงเทรนด์แฟชั่นผู้หญิง", "เทรนด์แฟชั่นผู้หญิง : ");
        str = str.replace("ประเภทของคอเสื้อประเภทของคอเสื้อ", "ประเภทของคอเสื้อ : ");
        str = str.replace("จัดส่งแบบประหยัดจัดส่งแบบประหยัด", "จัดส่งแบบประหยัด : ");
        str = str.replace("แบบธรรมดา : 4 - 12 วันแบบธรรมดา : 4 - 12 วัน", "แบบธรรมดา : 4 - 12 วัน : ");
        return str.trim();
    } else {
        return '';
    }
}

function htmlToText(str) {
    if (!str || str == null || str == "") {
        return "";
    }
    var rxb = /(<([^>]+)>)/ig;
    var allText = str;
    while ((text = rxb.exec(str)) !== null) {
        allText = allText.replace(text[1], "");
    }
    return allText;
}

//Check Page
iimPlay("CODE: VERSION BUILD=8920312 " + "\n" +
    "SET !ERRORIGNORE YES" + "\n" +
    "SET !ERRORCONTINUE YES" + "\n" +
    "SET !EXTRACT_TEST_POPUP NO" + "\n" +
    "SET !TIMEOUT_PAGE 360" + "\n" +
    "TAB T=1" + "\n" +
    "SET !DATASOURCE_LINE {{!LOOP}}" + "\n" +
    "SET !TIMEOUT_STEP 1" + "\n" +
    "TAG POS=1 TYPE=SPAN ATTR=TXT:*ค้นพบสินค้า* EXTRACT=TXT" + "\n");
extract = iimGetLastExtract();
if (extract !== '#EANF#') {
    counts = extract.replace(',', '');
    counts = counts.replace(/.*?(([0-9]*\.)?[0-9]+).*/g, "$1");
    if (counts != '') {
        counts = counts;
        pages = counts / perPage;
        page = Math.ceil(pages); //count page
    } else {
        javascript: page = prompt("Please Enter number of Pages:", "");
    }
} else {
    javascript: page = prompt("Please Enter number of Pages:", "");
}
iimPlay("CODE:VERSION BUILD=6500420" + "\n" +
    "TAG POS=1 TYPE=LI ATTR=CLASS:*ant-pagination-item-active" + "\n" +
    "WAIT SECONDS=" + waitPage + "\n");

var totalKeep = 0;
for (var a = 1; a <= page; a++) {

    //URL on Cat Page
    iimPlay("CODE: SET !EXTRACT NULL" + "\n" +
        "SET !TIMEOUT_STEP 2" + "\n" +
        "TAB T=1" + "\n" +
        "TAG POS=1 TYPE=DIV ATTR=data-qa-locator:general-products EXTRACT=HTM" + "\n");

    htmlCat = iimGetLastExtract();

    var findUrlA = /href="([^"]*)" title="[^>]*"/ig;
    var i = 1;
    while ((urlProduct = findUrlA.exec(htmlCat)) !== null) {

        iimDisplay(web + " Last update : " + modifiedDate + " \nPage " + a + "/" + page + " Item " + i + " /" + perPage + " Total " + totalKeep + " /" + counts);

        var urlProductG = http(urlProduct[1]);

        //goto page product
        iimSet("urlProduct", urlProductG);
        iimPlay("CODE: SET !EXTRACT NULL" + "\n" +
            "SET !ERRORIGNORE YES" + "\n" +
            "SET !ERRORCONTINUE YES" + "\n" +
            "SET !EXTRACT_TEST_POPUP NO" + "\n" +
            "SET !DATASOURCE_LINE {{!LOOP}}" + "\n" +
            "SET !TIMEOUT_STEP 1" + "\n" +
            "TAB OPEN" + "\n" +
            "TAB T=2" + "\n" +
            "url goto={{urlProduct}}" + "\n" +
            "TAG POS=1 TYPE=H1 ATTR=CLASS:pdp-mod-product-badge-title EXTRACT=TXT" + "\n" + //1
            "TAG POS=1 TYPE=A ATTR=CLASS:pdp-link<SP>pdp-link_size_s<SP>pdp-link_theme_blue<SP>pdp-review-summary__link EXTRACT=TXT" + "\n" + //2
            "TAG POS=1 TYPE=SPAN ATTR=CLASS:pdp-price<SP>pdp-price_type_normal* EXTRACT=TXT" + "\n" + //3
            "TAG POS=1 TYPE=IMG ATTR=CLASS:pdp-mod-common-image<SP>gallery-preview-panel__image EXTRACT=HREF" + "\n" + //4
            "TAG POS=1 TYPE=A ATTR=CLASS:pdp-link<SP>pdp-link_size_l<SP>pdp-link_theme_black<SP>seller-name__detail* EXTRACT=TXT" + "\n" + //5
            "TAG POS=1 TYPE=LI ATTR=CLASS:key-li&&TXT:Brand* EXTRACT=TXT" + "\n" + //6
            "TAG POS=1 TYPE=LI ATTR=CLASS:key-li&&TXT:SKU* EXTRACT=TXT" + "\n" + //7
            "TAG POS=1 TYPE=DIV ATTR=CLASS:html-content<SP>pdp-product-highlights  EXTRACT=HTM" + "\n" + //8
            "TAG POS=1 TYPE=DIV ATTR=CLASS:detail_decorate_root  EXTRACT=HTM" + "\n"); //9

        title = checkdata(iimGetLastExtract(1));
        userRating = checkdata(iimGetLastExtract(2));
        productPrice = checkdata(iimGetLastExtract(3));
        productImage = checkdata(iimGetLastExtract(4));
        productSeller = checkdata(iimGetLastExtract(5));
        productBrand = checkdata(iimGetLastExtract(6));
        productSKU = checkdata(iimGetLastExtract(7));
        productHighlights = htmlToText(iimGetLastExtract(8));
        productDescription = htmlToText(iimGetLastExtract(9));

        iimSet("urlProductG", urlProductG);
        iimSet("title", title);
        iimSet("userRating", userRating);
        iimSet("productPrice", productPrice);
        iimSet("productImage", productImage);
        iimSet("productSeller", productSeller);
        iimSet("productBrand", productBrand);
        iimSet("productSKU", productSKU);
        iimSet("productHighlights", productHighlights);
        iimSet("productDescription", productDescription);

        iimSet("folder", folder);
        iimSet("fileName", fileName);

        //Save File
        iimPlay("CODE: SET !EXTRACT NULL" + "\n" +
            "ADD !EXTRACT {{urlProductG}}" + "\n" +
            "ADD !EXTRACT {{title}}" + "\n" +
            "ADD !EXTRACT {{userRating}}" + "\n" +
            "ADD !EXTRACT {{productPrice}}" + "\n" +
            "ADD !EXTRACT {{productImage}}" + "\n" +
            "ADD !EXTRACT {{productSeller}}" + "\n" +
            "ADD !EXTRACT {{productBrand}}" + "\n" +
            "ADD !EXTRACT {{productSKU}}" + "\n" +
            "ADD !EXTRACT {{productHighlights}}" + "\n" +
            "ADD !EXTRACT {{productDescription}}" + "\n" +
            "SAVEAS TYPE=EXTRACT FOLDER={{folder}} FILE={{fileName}}.csv" + "\n");

        iimPlay("CODE: SET !EXTRACT NULL" + "\n" + "TAB CLOSE" + "\n");

        i++;
        totalKeep++;

    }

    if (a != page) {
        iimDisplay("Next Page Wait " + waitPage + " Second");
        iimPlay("CODE: SET !EXTRACT NULL" + "\n" +
            "SET !TIMEOUT_STEP 1" + "\n" +
            "TAG POS=1 TYPE=UL ATTR=CLASS:ant-pagination EXTRACT=HTM" + "\n");
        ulNav = iimGetLastExtract();
        var findNextpage = /title="Next Page".*aria-disabled="false"/ig;
        urlProduct = findUrlA.exec(htmlCat);

        if (urlProduct[1] !== null) {

            iimPlay("CODE:VERSION BUILD=6500420" + "\n" +
                "TAG POS=1 TYPE=LI ATTR=CLASS:ant-pagination-next" + "\n" +
                "WAIT SECONDS=" + waitPage + "\n");

        } else {
            break;
        }
    }
    if (a == page) {
        iimDisplay(web + " Last update : " + modifiedDate + " \nPage " + a + "/" + page + " Item " + i + " /" + perPage + " Total " + totalKeep + " /" + counts);
    }

}