{
  "version": "1.0.0",
  "exported_at": "2026-05-31T11:25:00.000Z",
  "project": {
    "name": "Mynavi Job Scraper",
    "description": "Extracts Mynavi Tenshoku job-detail data equivalent to the Octoparse Mynavi Job Scraper: company name, company info, address, homepage, job description, requirements, location, hours, salary, benefits, update/end dates, page URL, phone, and email. This is a single job-detail page workflow with no pagination. The original Octoparse sample posting is expired, so the Navigate block defaults to a currently linked Mynavi job URL; replace it with any live Mynavi job-detail URL as needed. Expired pages are detected and unrelated footer/recommendation/search content is excluded. Date and phone fields are validated to reduce false positives.",
    "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": 260,
      "config": {
        "url": "https://tenshoku.mynavi.jp/jobinfo-382728-5-7-1/?ty=rank",
        "color": "bg-[#4589ff]",
        "tags": [
          "mynavi",
          "job-detail"
        ]
      }
    },
    {
      "block_id": "wait-for-page-load-1",
      "block_type": "process",
      "title": "Wait for Page Load",
      "description": "Wait for page to finish loading",
      "position_x": 480,
      "position_y": 260,
      "config": {
        "timeout": 30
      }
    },
    {
      "block_id": "sleep-1",
      "block_type": "process",
      "title": "Sleep",
      "description": "Wait for specified time",
      "position_x": 840,
      "position_y": 260,
      "config": {
        "duration": 2
      }
    },
    {
      "block_id": "scroll-1",
      "block_type": "process",
      "title": "Scroll",
      "description": "Scroll the page",
      "position_x": 1200,
      "position_y": 260,
      "config": {
        "direction": "down",
        "amount": 3500
      }
    },
    {
      "block_id": "sleep-2",
      "block_type": "process",
      "title": "Sleep",
      "description": "Wait for specified time",
      "position_x": 1560,
      "position_y": 260,
      "config": {
        "duration": 1
      }
    },
    {
      "block_id": "wait-for-element-1",
      "block_type": "process",
      "title": "Wait for Element",
      "description": "Wait until element appears",
      "position_x": 1920,
      "position_y": 260,
      "config": {
        "selector": "body",
        "timeout": 30,
        "visible": true
      }
    },
    {
      "block_id": "inject-javascript-1",
      "block_type": "process",
      "title": "Inject JavaScript",
      "description": "Run custom JavaScript on the page",
      "position_x": 2280,
      "position_y": 260,
      "config": {
        "jsCode": "(function(){function clean(s){return (s||'').replace(/\\u00a0/g,' ').replace(/[ \\t\\r\\f\\v]+/g,' ').replace(/\\s*\\n\\s*/g,'\\n').replace(/^\\s+|\\s+$/g,'');}function flat(s){return clean(s).replace(/\\n+/g,' ');}function compact(s){return clean(s).replace(/[：:\\s]/g,'');}function txt(el){return clean(el?el.innerText||el.textContent:'');}function all(sel,root){return Array.prototype.slice.call((root||document).querySelectorAll(sel));}var EXCLUDE='.popularMainBox,.showPopularBox,.cassetteRecommend,.variousSearch,.footer,footer,.topHeader,header,.breadcrumb,.menuLink,.otherLink,.js__modal--keep,.js__modal--declined,.modal,.btnFavorite,.iconTooltip,.companyVideoOverlay,.companyVideoPopup,.shortVideoOverlay,.shortVideoPopup,.loading,.error,.none,script,style,noscript,svg';var ALL_LABELS=['仕事内容','業務内容','職務内容','仕事の内容','仕事','募集職種','求める人材','対象となる方','応募資格','応募条件','必要な経験','歓迎条件','必須条件','勤務地','勤務地区分','勤務地詳細','配属先','勤務先','勤務時間','就業時間','勤務体系','給与','月給','年俸','賃金','初年度年収','初年度の年収','モデル年収例','昇給賞与','昇給・賞与','賞与','昇給','諸手当','手当','休日休暇','休日・休暇','休日','休暇','福利厚生','待遇・福利厚生','待遇','情報更新日','更新日','掲載開始日','掲載終了予定日','掲載終了日','応募締切','締切','会社名','社名','企業名','会社情報','会社・仕事の魅力','PR','特徴','企業情報','事業内容','会社所在地','本社所在地','所在地','住所','企業ホームページ','ホームページ','会社HP','URL','Webサイト','問い合わせ','問い合わせ先','電話番号','TEL','Email','E-mail','メール','MAIL','応募方法','選考の特徴','取材後記','募集要項','事業所'];function excluded(el){return !!(el&&el.closest&&el.closest(EXCLUDE));}function expired(){return /求人情報を表示できません|掲載が終了した|URLが間違っている/.test(txt(document.body));}function root(){return document.body;}function firstText(selectors){if(expired())return '';for(var i=0;i<selectors.length;i++){var els=all(selectors[i],root());for(var j=0;j<els.length;j++){if(!excluded(els[j])){var t=flat(txt(els[j]));if(t)return t;}}}return '';}function isSameLabel(line,labels){var c=compact(line);if(!c||c.length>120)return false;for(var i=0;i<labels.length;i++){var l=compact(labels[i]);if(c===l||c.indexOf(l)===0)return true;}return false;}function removeLeadingLabel(line,labels){var out=flat(line);for(var i=0;i<labels.length;i++){var l=labels[i];if(out.indexOf(l)===0)return flat(out.slice(l.length).replace(/^[：:\\s]+/,''));}return out;}function isAnyOtherLabel(line,currentLabels){var c=compact(line);if(!c)return false;for(var i=0;i<ALL_LABELS.length;i++){var l=compact(ALL_LABELS[i]);if(c===l||c.indexOf(l)===0){for(var j=0;j<(currentLabels||[]).length;j++){if(l===compact(currentLabels[j]))return false;}return true;}}return false;}function stopLine(line,currentLabels){if(!line)return true;if(/^(この求人に応募する|応募する|気になる|保存|マイナビ転職|転職TOP|ログイン|簡単1分|会員登録|求人検索|職種から|勤務地から|雇用形態から|人気求人ランキング)/.test(line))return true;return isAnyOtherLabel(line,currentLabels);}function scopedLines(){var clone=document.body.cloneNode(true);all(EXCLUDE,clone).forEach(function(e){try{e.remove();}catch(x){}});all('br',clone).forEach(function(e){try{e.replaceWith(document.createTextNode('\\n'));}catch(x){}});all('th,td,dt,dd,h1,h2,h3,h4,h5,p,li,caption,section,article',clone).forEach(function(e){try{e.appendChild(document.createTextNode('\\n'));}catch(x){}});var raw=clone.innerText||clone.textContent||'';return raw.split(/\\n+/).map(flat).filter(function(x){return !!x;});}function textByLabels(labels,maxLines){if(expired())return '';var lines=scopedLines();for(var i=0;i<lines.length;i++){if(isSameLabel(lines[i],labels)){var vals=[];var first=removeLeadingLabel(lines[i],labels);if(first&&compact(first)!==compact(lines[i]))vals.push(first);for(var j=i+1;j<lines.length&&vals.length<(maxLines||20);j++){if(stopLine(lines[j],labels))break;if(lines[j]&&vals.indexOf(lines[j])<0)vals.push(lines[j]);}var val=flat(vals.join(' '));if(val)return val;}}return '';}function valueNear(labelEl){var tag=(labelEl.tagName||'').toLowerCase();var lab=txt(labelEl);if(tag==='th'){var tr=labelEl.closest('tr');if(tr){var td=tr.querySelector('td');if(td&&!excluded(td)){var t=flat(txt(td));if(t)return t;}}}if(tag==='dt'){var dd=labelEl.nextElementSibling;while(dd&&dd.tagName&&dd.tagName.toLowerCase()!=='dd')dd=dd.nextElementSibling;if(dd&&!excluded(dd)){var d=flat(txt(dd));if(d)return d;}}var tr2=labelEl.closest&&labelEl.closest('tr');if(tr2&&!excluded(tr2)){var cells=all('td',tr2);for(var c=0;c<cells.length;c++){var ct=flat(txt(cells[c]));if(ct)return ct;}}var parent=labelEl.parentElement;if(parent&&!excluded(parent)){var direct=Array.prototype.slice.call(parent.children||[]).filter(function(ch){return ch!==labelEl&&!excluded(ch)&&flat(txt(ch));});if(direct.length)return flat(txt(direct[0]));var pt=flat(txt(parent)).replace(flat(lab),'');pt=flat(pt.replace(/^[：:\\s]+/,''));if(pt&&pt!==flat(lab))return pt;}var sib=labelEl.nextElementSibling;while(sib){if(!excluded(sib)){var st=flat(txt(sib));if(st)return st;if(/^h[1-6]$/i.test(sib.tagName||''))break;}sib=sib.nextElementSibling;}return '';}function domByLabels(labels){if(expired())return '';var nodes=all('th,dt,caption,h1,h2,h3,h4,h5,strong,b,p,span,div',root());for(var i=0;i<nodes.length;i++){var el=nodes[i];if(excluded(el))continue;var t=txt(el);if(isSameLabel(t,labels)){var v=valueNear(el);if(v)return v;}}return '';}function meta(name){var el=document.querySelector('meta[name=\"'+name+'\"],meta[property=\"'+name+'\"]');return el?flat(el.getAttribute('content')||''):'';}function byLabels(labels,maxLines){return domByLabels(labels)||textByLabels(labels,maxLines||20);}function hrefNear(labelEl){var box=(labelEl.closest&&labelEl.closest('tr,dl,section,article,div,table'))||labelEl.parentElement;if(box&&!excluded(box)){var links=all('a[href]',box).filter(function(a){var h=a.getAttribute('href')||'';return !excluded(a)&&!/^javascript:|^#/.test(h);});if(links.length)return links[0].href;}var sib=labelEl.nextElementSibling;while(sib){if(!excluded(sib)){if(sib.matches&&sib.matches('a[href]'))return sib.href;var a=sib.querySelector&&sib.querySelector('a[href]');if(a&&!excluded(a))return a.href;}sib=sib.nextElementSibling;}return '';}function hrefByLabels(labels){if(expired())return '';var nodes=all('th,dt,h2,h3,h4,p,span,div,strong,b,caption',root());for(var i=0;i<nodes.length;i++){var el=nodes[i];if(excluded(el))continue;if(isSameLabel(txt(el),labels)){var h=hrefNear(el);if(h)return h;}}var external=all('a[href]',root()).filter(function(a){var h=a.href||'';return !excluded(a)&&h&&!/tenshoku\\.mynavi\\.jp|mynavi\\.jp|cdn\\.tenshoku/.test(h)&&/^https?:/.test(h);});return external.length?external[0].href:'';}function regex(re){if(expired())return '';var lines=scopedLines().join(' ');var m=lines.match(re);return m?m[0]:'';}function companyFromTitle(){if(expired())return '';var title=document.title||'';title=title.replace(/\\s*\\|\\s*転職・求人情報サイト.*$/,'').replace(/\\s*｜\\s*マイナビ転職.*$/,'').replace(/の求人情報.*$/,'');var parts=title.split(/\\s+|\\s*\\|\\s*/).filter(Boolean);for(var i=parts.length-1;i>=0;i--){if(/(株式会社|有限会社|合同会社|学校法人|公益社団法人|一般社団法人|社会福祉法人|医療法人|協同組合|学院|協会|会社|法人)/.test(parts[i]))return flat(parts[i]);}return flat(parts[0]||title);}function companyName(){return firstText(['.companyName','.company__name','.jobCompanyName','.jobOfferCompany','.jobOfferHeader__company','.jobHeader__company','.headingCompany','.companyProfile__name','.corpName','.cassetteRecruit__name'])||byLabels(['会社名','社名','企業名'],5)||companyFromTitle();}function companyInfo(){if(expired())return '';var v=firstText(['.jobSummary__catchCopy','.catchCopy','.mainCatch','.jobCatch','.cassetteRecruit__copy','.cassetteRecruit__heading','h1']);return v||byLabels(['会社情報','会社・仕事の魅力','PR','特徴','企業情報','事業内容'],18)||meta('description')||flat((document.title||'').replace(/\\s*\\|\\s*転職・求人情報サイト.*$/,''));}function hasAddress(s){return /(北海道|東京都|京都府|大阪府|.{2,3}県|市|区|町|村|番地|丁目)/.test(s||'');}function companyAddress(){return byLabels(['会社所在地','本社所在地','所在地','住所','事業所'],8);}function workLocation(){var v=byLabels(['勤務地','勤務地区分','勤務地詳細','配属先','勤務先'],22);var ci=companyInfo();var cn=companyName();if(!v)return companyAddress();if(v===ci||/マイナビ転職フェア|求人情報|この求人のポイント/.test(v))return companyAddress()||'';if(cn&&v.indexOf(cn)>=0&&!hasAddress(v))return companyAddress()||'';return v;}function dateByLabels(labels){if(expired())return '';var v=byLabels(labels,8);var m=(v||'').match(/\\d{4}[\\/.-]\\d{1,2}[\\/.-]\\d{1,2}/);if(m)return m[0].replace(/[.-]/g,'/');var lines=scopedLines();for(var i=0;i<lines.length;i++){if(isSameLabel(lines[i],labels)||labels.some(function(l){return lines[i].indexOf(l)>=0;})){var chunk=lines.slice(i,i+4).join(' ');var mm=chunk.match(/\\d{4}[\\/.-]\\d{1,2}[\\/.-]\\d{1,2}/);if(mm)return mm[0].replace(/[.-]/g,'/');}}return '';}function phone(){if(expired())return '';var re=/(?:0\\d{1,4}[-ー－]\\d{1,4}[-ー－]\\d{3,4})|(?:0[789]0[-ー－]\\d{4}[-ー－]\\d{4})/;var v=byLabels(['電話番号','TEL','お問い合わせ電話番号','問い合わせ先'],6);var m=(v||'').match(re);if(m)return m[0];return regex(re)||'';}function email(){if(expired())return '';var v=byLabels(['Email','E-mail','メール','MAIL'],6);var m=(v||'').match(/[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}/);if(m)return m[0];return regex(/[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}/)||'';}try{window.scrollTo(0,document.body.scrollHeight);}catch(e){}try{all('[class*=\\'consent\\' i],[id*=\\'consent\\' i],[class*=\\'cookie\\' i],[id*=\\'cookie\\' i]').forEach(function(e){e.style.display='none';});}catch(e){}window.US_MYNAVI={clean:flat,expired:expired,firstText:firstText,byLabels:byLabels,hrefByLabels:hrefByLabels,regex:regex,companyName:companyName,companyInfo:companyInfo,companyAddress:companyAddress,workLocation:workLocation,dateByLabels:dateByLabels,phone:phone,email:email,pageUrl:function(){return location.href;}};})();",
        "waitForCompletion": true,
        "timeout": 10
      }
    },
    {
      "block_id": "structured-export-1",
      "block_type": "process",
      "title": "Structured Export",
      "description": "Export data with custom columns",
      "position_x": 2640,
      "position_y": 260,
      "config": {
        "rowSelector": "body",
        "fileName": "mynavi-job-scraper.csv",
        "saveLocation": "C:\\Users\\theskd\\Documents\\UScraper\\templates",
        "includeHeaders": true,
        "fileMode": "create",
        "columns": [
          {
            "name": "会社名",
            "selector": "window.US_MYNAVI ? window.US_MYNAVI.companyName() : ''",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "会社情報",
            "selector": "window.US_MYNAVI ? window.US_MYNAVI.companyInfo() : ''",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "会社所在地",
            "selector": "window.US_MYNAVI ? window.US_MYNAVI.companyAddress() : ''",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "企業ホームページ",
            "selector": "window.US_MYNAVI ? window.US_MYNAVI.hrefByLabels(['企業ホームページ','ホームページ','会社HP','URL','Webサイト']) : ''",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "仕事内容",
            "selector": "window.US_MYNAVI ? window.US_MYNAVI.byLabels(['仕事内容','業務内容','職務内容','仕事の内容','仕事','募集職種'],30) : ''",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "求める人材",
            "selector": "window.US_MYNAVI ? window.US_MYNAVI.byLabels(['求める人材','対象となる方','応募資格','応募条件','必要な経験','歓迎条件','必須条件'],30) : ''",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "勤務地",
            "selector": "window.US_MYNAVI ? window.US_MYNAVI.workLocation() : ''",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "勤務時間",
            "selector": "window.US_MYNAVI ? window.US_MYNAVI.byLabels(['勤務時間','就業時間','勤務体系'],12) : ''",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "給与",
            "selector": "window.US_MYNAVI ? window.US_MYNAVI.byLabels(['給与','月給','年俸','賃金','初年度年収','初年度の年収'],22) : ''",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "昇給賞与",
            "selector": "window.US_MYNAVI ? window.US_MYNAVI.byLabels(['昇給賞与','昇給・賞与','賞与','昇給'],12) : ''",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "諸手当",
            "selector": "window.US_MYNAVI ? window.US_MYNAVI.byLabels(['諸手当','手当'],12) : ''",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "休日休暇",
            "selector": "window.US_MYNAVI ? window.US_MYNAVI.byLabels(['休日休暇','休日・休暇','休日','休暇'],15) : ''",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "福利厚生",
            "selector": "window.US_MYNAVI ? window.US_MYNAVI.byLabels(['福利厚生','待遇・福利厚生','待遇'],15) : ''",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "情報更新日",
            "selector": "window.US_MYNAVI ? window.US_MYNAVI.dateByLabels(['情報更新日','更新日','掲載開始日']) : ''",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "掲載終了予定日",
            "selector": "window.US_MYNAVI ? window.US_MYNAVI.dateByLabels(['掲載終了予定日','掲載終了日','応募締切','締切']) : ''",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "ページURL",
            "selector": "window.US_MYNAVI ? window.US_MYNAVI.pageUrl() : location.href",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "電話番号",
            "selector": "window.US_MYNAVI ? window.US_MYNAVI.phone() : ''",
            "attribute": "text",
            "isJs": true
          },
          {
            "name": "Email",
            "selector": "window.US_MYNAVI ? window.US_MYNAVI.email() : ''",
            "attribute": "text",
            "isJs": true
          }
        ]
      }
    },
    {
      "block_id": "end-1",
      "block_type": "output",
      "title": "End",
      "description": "Terminate execution flow",
      "position_x": 3000,
      "position_y": 260,
      "config": {}
    }
  ],
  "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": "scroll-1",
      "to_connector_id": "left"
    },
    {
      "from_block_id": "scroll-1",
      "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-1",
      "to_connector_id": "left"
    },
    {
      "from_block_id": "wait-for-element-1",
      "from_connector_id": "right",
      "to_block_id": "inject-javascript-1",
      "to_connector_id": "left"
    },
    {
      "from_block_id": "inject-javascript-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": "end-1",
      "to_connector_id": "left"
    }
  ],
  "canvas_elements": [
    {
      "id": "group-load",
      "element_type": "group",
      "title": "Page Load",
      "color": "#08bdba",
      "position_x": 48,
      "position_y": 156,
      "width": 2120,
      "height": 296,
      "z_index": 20,
      "data": {
        "memberBlockIds": [
          "navigate-1",
          "wait-for-page-load-1",
          "sleep-1",
          "sleep-2",
          "wait-for-element-1"
        ]
      }
    },
    {
      "id": "group-interaction",
      "element_type": "group",
      "title": "Interaction",
      "color": "#a56eff",
      "position_x": 1128,
      "position_y": 156,
      "width": 1400,
      "height": 296,
      "z_index": 20,
      "data": {
        "memberBlockIds": [
          "scroll-1",
          "inject-javascript-1"
        ]
      }
    },
    {
      "id": "group-extract",
      "element_type": "group",
      "title": "Data Extraction",
      "color": "#42be65",
      "position_x": 2568,
      "position_y": 156,
      "width": 380,
      "height": 296,
      "z_index": 20,
      "data": {
        "memberBlockIds": [
          "structured-export-1"
        ]
      }
    },
    {
      "id": "group-control",
      "element_type": "group",
      "title": "Control Flow",
      "color": "#8d8d8d",
      "position_x": 2928,
      "position_y": 156,
      "width": 380,
      "height": 296,
      "z_index": 20,
      "data": {
        "memberBlockIds": [
          "end-1"
        ]
      }
    },
    {
      "id": "note-overview",
      "element_type": "note",
      "title": "Overview",
      "content": "Extracts Mynavi Tenshoku job-detail data equivalent to the Octoparse Mynavi Job Scraper: company name, company info, address, homepage, job description, requirements, location, hours, salary, benefits, update/end dates, page URL, phone, and email. This is a single job-detail page workflow with no pagination. The original Octoparse sample posting is expired, so the Navigate block defaults to a currently linked Mynavi job URL; replace it with any live Mynavi job-detail URL as needed. Expired pages are detected and unrelated footer/recommendation/search content is excluded. Date and phone fields are validated to reduce false positives.",
      "color": "#f1c21b",
      "position_x": 80,
      "position_y": 20,
      "width": 480,
      "height": 160,
      "z_index": 22,
      "data": {}
    },
    {
      "id": "note-block-inject-javascript-1",
      "element_type": "note",
      "title": "Note: Inject JavaScript",
      "content": "Runs custom JavaScript in the page: `(function(){function clean(s){return (s||'').replace(/\\u00a0/g,' ').replace(/[ \\t\\r\\f\\v]+/g,' ').rep...` Verify in browser if results are empty.",
      "color": "#ee5396",
      "position_x": 2480,
      "position_y": 240,
      "width": 340,
      "height": 140,
      "z_index": 22,
      "data": {
        "block_id": "inject-javascript-1"
      }
    },
    {
      "id": "note-block-structured-export-1",
      "element_type": "note",
      "title": "Note: Structured Export",
      "content": "Structured export with JS columns (会社名, 会社情報, 会社所在地, 企業ホームページ, 仕事内容). These selectors are fragile — update if the site layout changes.",
      "color": "#ee5396",
      "position_x": 2840,
      "position_y": 240,
      "width": 340,
      "height": 124,
      "z_index": 22,
      "data": {
        "block_id": "structured-export-1"
      }
    }
  ]
}