{
  "version": "1.0.0",
  "exported_at": "2026-06-02T00:00:00.000Z",
  "project": {
    "name": "Nikkei Art Artworks Scraper",
    "description": "Best-effort UScraper equivalent of the Octoparse Nikkei Art Artworks Scraper. Autonomous DNS tests failed for multiple inferred hyphenated domains: www.nikkei-art.com, nikkei-art.com, www.nikkei-art.co.jp, www.nikkeiart.co.jp, and www.nikkei-art.jp. This final version targets the likely no-hyphen .com host https://www.nikkeiart.com/ using EC-CUBE-style product search/listing URLs. It loops through keyword searches for 絵画, 版画, and 陶芸, extracts keyword, page number, artist, artwork/title, genre, price, and item URL, follows available Next pagination links until exhausted, then advances to the next keyword URL. Uses append mode so all results are written to nikkei-art-artworks-scraper.csv. Because no Page Analysis JSON was attached and the target domain had to be inferred, this template may require replacing the Navigate URLs with the confirmed Nikkei Art live site URL before production use.",
    "color": "bg-[#4589ff]",
    "template_id": "ai-generated"
  },
  "blocks": [
    {
      "block_id": "navigate-1",
      "block_type": "process",
      "title": "Navigate",
      "description": "Go to a URL",
      "position_x": 120,
      "position_y": 220,
      "config": {
        "urls": [
          "https://www.nikkeiart.com/products/list?name=%E7%B5%B5%E7%94%BB",
          "https://www.nikkeiart.com/products/list?name=%E7%89%88%E7%94%BB",
          "https://www.nikkeiart.com/products/list?name=%E9%99%B6%E8%8A%B8"
        ],
        "color": "bg-[#4589ff]"
      }
    },
    {
      "block_id": "wait-for-page-load-1",
      "block_type": "process",
      "title": "Wait for Page Load",
      "description": "Wait for page to finish loading",
      "position_x": 456,
      "position_y": 220,
      "config": {
        "timeout": 30
      }
    },
    {
      "block_id": "sleep-1",
      "block_type": "process",
      "title": "Sleep",
      "description": "Wait for specified time",
      "position_x": 792,
      "position_y": 220,
      "config": {
        "duration": 2
      }
    },
    {
      "block_id": "wait-for-element-1",
      "block_type": "process",
      "title": "Wait for Element",
      "description": "Wait until element appears",
      "position_x": 1128,
      "position_y": 220,
      "config": {
        "selector": ".ec-shelfGrid__item, .ec-productItem, .product-item, .item, .artwork-item, .work-item, .works-list li, .artworks-list li, article, .post, table tbody tr, main",
        "timeout": 30,
        "visible": true
      }
    },
    {
      "block_id": "structured-export-1",
      "block_type": "process",
      "title": "Structured Export",
      "description": "Export data with custom columns",
      "position_x": 1464,
      "position_y": 220,
      "config": {
        "rowSelector": ".ec-shelfGrid__item, .ec-productItem, .product-item, .item, .artwork-item, .work-item, .works-list li, .artworks-list li, article, .post, table tbody tr",
        "fileName": "nikkei-art-artworks-scraper.csv",
        "saveLocation": "C:\\Users\\theskd\\Documents\\UScraper\\templates",
        "includeHeaders": true,
        "fileMode": "append",
        "columns": [
          {
            "name": "keyword",
            "selector": "(()=>{const p=new URL(location.href); const raw=p.searchParams.get('name')||p.searchParams.get('s')||p.searchParams.get('keyword')||p.searchParams.get('q')||''; try{return decodeURIComponent(raw);}catch(e){return raw;}})()",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "page_number",
            "selector": "(()=>{const p=new URL(location.href); return document.querySelector('.ec-pager__item--active, .pagination .current, .pagination .active, [aria-current=\"page\"], .nav-links .current, .wp-pagenavi .current, .pager .current')?.textContent.trim() || p.searchParams.get('pageno') || p.searchParams.get('page') || p.searchParams.get('paged') || (location.pathname.match(/page\\/(\\d+)/)?.[1]) || '1';})()",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "artist",
            "selector": "(()=>{const text=(ROW.textContent||'').trim(); const q=s=>ROW.querySelector(s)?.textContent.trim()||''; const direct=q('.artist, .artist-name, [class*=\"artist\"], [class*=\"author\"], .creator, .maker, .name'); if(direct) return direct; const label=Array.from(ROW.querySelectorAll('dt, th, span, p, div, li')).find(e=>/アーティスト|作家|作者|artist|creator|maker/i.test(e.textContent||'')); if(label){const n=label.nextElementSibling?.textContent?.trim(); if(n && !/アーティスト|作家|作者|artist|creator|maker/i.test(n)) return n;} const lines=text.split(/\\n+/).map(s=>s.trim()).filter(Boolean); const noPrice=lines.filter(l=>!/円|税込|消費税|ジャンル|カテゴリ/.test(l)); return noPrice.length>1 ? noPrice[0] : '';})()",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "work",
            "selector": "(()=>{const q=s=>ROW.querySelector(s)?.textContent.trim()||''; const title=q('.ec-productItem__name, .ec-productRole__title, .work-title, .artwork-title, .product-title, .entry-title, .title, [class*=\"title\"], h1, h2, h3, h4') || ROW.querySelector('a')?.textContent.trim() || ''; const parts=title.split(/\\n+/).map(s=>s.trim()).filter(Boolean); return parts.length ? parts[parts.length-1] : title;})()",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "genre",
            "selector": "(()=>{const q=s=>ROW.querySelector(s)?.textContent.trim()||''; const direct=q('.genre, .category, .cat, .term, [class*=\"genre\"], [class*=\"category\"], [class*=\"cat\"]'); if(direct) return direct; const label=Array.from(ROW.querySelectorAll('dt, th, span, p, div, li')).find(e=>/ジャンル|カテゴリ|技法|genre|category/i.test(e.textContent||'')); if(label){const n=label.nextElementSibling?.textContent?.trim(); if(n && !/ジャンル|カテゴリ|技法|genre|category/i.test(n)) return n;} return '';})()",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "price",
            "selector": "(()=>{const q=s=>ROW.querySelector(s)?.textContent.trim()||''; const byClass=q('.ec-price__price, .ec-productItem__price, .price, [class*=\"price\"], .amount, [class*=\"amount\"], .cost, [class*=\"cost\"]'); if(byClass) return byClass; const m=(ROW.textContent||'').match(/[0-9０-９,，]+\\s*円(?:（[^）]*）)?/); return m ? m[0].replace(/，/g, ',') : '';})()",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "url",
            "selector": "a",
            "attribute": "href"
          }
        ],
        "color": "bg-[#42be65]"
      }
    },
    {
      "block_id": "element-exists-1",
      "block_type": "process",
      "title": "Element Exists",
      "description": "Check if element exists",
      "position_x": 1800,
      "position_y": 220,
      "config": {
        "selector": ".ec-pager a[rel=\"next\"], .ec-pager__item a[rel=\"next\"], a.next:not(.disabled), .pagination a.next:not(.disabled), .pagination .next a, a[rel=\"next\"], .nav-links .next, .wp-pagenavi a.nextpostslink, .pager a.next",
        "color": "bg-[#ff832b]"
      }
    },
    {
      "block_id": "click-1",
      "block_type": "process",
      "title": "Click",
      "description": "Click on element",
      "position_x": 2136,
      "position_y": 520,
      "config": {
        "selector": ".ec-pager a[rel=\"next\"], .ec-pager__item a[rel=\"next\"], a.next:not(.disabled), .pagination a.next:not(.disabled), .pagination .next a, a[rel=\"next\"], .nav-links .next, .wp-pagenavi a.nextpostslink, .pager a.next",
        "timeout": 10,
        "color": "bg-[#ff832b]"
      }
    },
    {
      "block_id": "wait-for-page-load-2",
      "block_type": "process",
      "title": "Wait for Page Load",
      "description": "Wait for page to finish loading",
      "position_x": 2472,
      "position_y": 520,
      "config": {
        "timeout": 30
      }
    },
    {
      "block_id": "sleep-2",
      "block_type": "process",
      "title": "Sleep",
      "description": "Wait for specified time",
      "position_x": 2808,
      "position_y": 520,
      "config": {
        "duration": 2
      }
    },
    {
      "block_id": "wait-for-element-2",
      "block_type": "process",
      "title": "Wait for Element",
      "description": "Wait until element appears",
      "position_x": 3144,
      "position_y": 520,
      "config": {
        "selector": ".ec-shelfGrid__item, .ec-productItem, .product-item, .item, .artwork-item, .work-item, .works-list li, .artworks-list li, article, .post, table tbody tr, main",
        "timeout": 30,
        "visible": true
      }
    },
    {
      "block_id": "loop-continue-1",
      "block_type": "process",
      "title": "Loop Continue",
      "description": "Continue multi-input loop",
      "position_x": 1800,
      "position_y": 520,
      "config": {
        "color": "bg-[#8d8d8d]"
      }
    }
  ],
  "connections": [
    {
      "from_block_id": "navigate-1",
      "from_connector_id": "right",
      "to_block_id": "wait-for-page-load-1",
      "to_connector_id": "left"
    },
    {
      "from_block_id": "wait-for-page-load-1",
      "from_connector_id": "right",
      "to_block_id": "sleep-1",
      "to_connector_id": "left"
    },
    {
      "from_block_id": "sleep-1",
      "from_connector_id": "right",
      "to_block_id": "wait-for-element-1",
      "to_connector_id": "left"
    },
    {
      "from_block_id": "wait-for-element-1",
      "from_connector_id": "right",
      "to_block_id": "structured-export-1",
      "to_connector_id": "left"
    },
    {
      "from_block_id": "structured-export-1",
      "from_connector_id": "right",
      "to_block_id": "element-exists-1",
      "to_connector_id": "left"
    },
    {
      "from_block_id": "element-exists-1",
      "from_connector_id": "true",
      "to_block_id": "click-1",
      "to_connector_id": "left"
    },
    {
      "from_block_id": "click-1",
      "from_connector_id": "right",
      "to_block_id": "wait-for-page-load-2",
      "to_connector_id": "left"
    },
    {
      "from_block_id": "wait-for-page-load-2",
      "from_connector_id": "right",
      "to_block_id": "sleep-2",
      "to_connector_id": "left"
    },
    {
      "from_block_id": "sleep-2",
      "from_connector_id": "right",
      "to_block_id": "wait-for-element-2",
      "to_connector_id": "left"
    },
    {
      "from_block_id": "wait-for-element-2",
      "from_connector_id": "right",
      "to_block_id": "structured-export-1",
      "to_connector_id": "left"
    },
    {
      "from_block_id": "element-exists-1",
      "from_connector_id": "false",
      "to_block_id": "loop-continue-1",
      "to_connector_id": "left"
    }
  ],
  "canvas_elements": [
    {
      "id": "group-load",
      "element_type": "group",
      "title": "Page Load",
      "color": "#08bdba",
      "position_x": 48,
      "position_y": 116,
      "width": 3344,
      "height": 596,
      "z_index": 20,
      "data": {
        "memberBlockIds": [
          "navigate-1",
          "wait-for-page-load-1",
          "sleep-1",
          "wait-for-element-1",
          "wait-for-page-load-2",
          "sleep-2",
          "wait-for-element-2"
        ]
      }
    },
    {
      "id": "group-extract",
      "element_type": "group",
      "title": "Data Extraction",
      "color": "#42be65",
      "position_x": 1392,
      "position_y": 116,
      "width": 380,
      "height": 296,
      "z_index": 20,
      "data": {
        "memberBlockIds": [
          "structured-export-1"
        ]
      }
    },
    {
      "id": "group-pagination",
      "element_type": "group",
      "title": "Pagination Loop",
      "color": "#ff832b",
      "position_x": 1728,
      "position_y": 116,
      "width": 656,
      "height": 596,
      "z_index": 20,
      "data": {
        "memberBlockIds": [
          "element-exists-1",
          "click-1",
          "loop-continue-1"
        ]
      }
    },
    {
      "id": "note-overview",
      "element_type": "note",
      "title": "Overview",
      "content": "Best-effort UScraper equivalent of the Octoparse Nikkei Art Artworks Scraper. Autonomous DNS tests failed for multiple inferred hyphenated domains: www.nikkei-art.com, nikkei-art.com, www.nikkei-art.co.jp, www.nikkeiart.co.jp, and www.nikkei-art.jp. This final version targets the likely no-hyphen .com host https://www.nikkeiart.com/ using EC-CUBE-style product search/listing URLs. It loops through keyword searches for 絵画, 版画, and 陶芸, extracts keyword, page number, artist, artwork/title, genre, price, and item URL, follows available Next pagination links until exhausted, then advances to the next keyword URL. Uses append mode so all results are written to nikkei-art-artworks-scraper.csv. Because no Page Analysis JSON was attached and the target domain had to be inferred, this template may require replacing the Navigate URLs with the confirmed Nikkei Art live site URL before production use.",
      "color": "#f1c21b",
      "position_x": 80,
      "position_y": 20,
      "width": 480,
      "height": 160,
      "z_index": 22,
      "data": {}
    },
    {
      "id": "note-block-navigate-1",
      "element_type": "note",
      "title": "Note: Navigate",
      "content": "Multi-URL loop over 3 pages. Pair with loop-continue at the end of each iteration.",
      "color": "#ee5396",
      "position_x": 320,
      "position_y": 200,
      "width": 328,
      "height": 107,
      "z_index": 22,
      "data": {
        "block_id": "navigate-1"
      }
    },
    {
      "id": "note-block-structured-export-1",
      "element_type": "note",
      "title": "Note: Structured Export",
      "content": "Structured export with JS columns (keyword, page_number, artist, work, genre). These selectors are fragile — update if the site layout changes.",
      "color": "#ee5396",
      "position_x": 1664,
      "position_y": 200,
      "width": 340,
      "height": 127,
      "z_index": 22,
      "data": {
        "block_id": "structured-export-1"
      }
    },
    {
      "id": "note-block-element-exists-1",
      "element_type": "note",
      "title": "Note: Element Exists",
      "content": "Condition block: checks `.ec-pager a[rel=\"next\"], .ec-pager__item a[rel=\"next\"], a.next:not(.disabled), .pagination a.next:not(.disabled), .pagin`. True / False branches control which path runs next. Keep enough space between branches so both connector lines are visible.",
      "color": "#ee5396",
      "position_x": 2000,
      "position_y": 200,
      "width": 340,
      "height": 170,
      "z_index": 22,
      "data": {
        "block_id": "element-exists-1"
      }
    },
    {
      "id": "note-block-click-1",
      "element_type": "note",
      "title": "Note: Click",
      "content": "Pagination click — add waits after this block; the page reloads asynchronously.",
      "color": "#ee5396",
      "position_x": 2336,
      "position_y": 500,
      "width": 316,
      "height": 106,
      "z_index": 22,
      "data": {
        "block_id": "click-1"
      }
    },
    {
      "id": "note-block-loop-continue-1",
      "element_type": "note",
      "title": "Note: Loop Continue",
      "content": "Loop Continue advances a multi-URL or multi-text loop. Place at the end of the loop body with a clear back-edge to the loop start.",
      "color": "#ee5396",
      "position_x": 2000,
      "position_y": 500,
      "width": 340,
      "height": 123,
      "z_index": 22,
      "data": {
        "block_id": "loop-continue-1"
      }
    }
  ]
}