T.ME/BIBIL_0DAY
CasperSecurity


Server : Apache/2
System : Linux server-15-235-50-60 5.15.0-164-generic #174-Ubuntu SMP Fri Nov 14 20:25:16 UTC 2025 x86_64
User : gositeme ( 1004)
PHP Version : 8.2.29
Disable Function : exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname
Directory :  /home/gositeme/domains/lavocat.ca/public_html/scripts/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/gositeme/domains/lavocat.ca/public_html/scripts/scrape-adw-lawyer-photos-puppeteer.js
const puppeteer = require('puppeteer');
const fs = require('fs');
const path = require('path');
const https = require('https');

const BASE_URL = 'https://www.adwavocats.com';
const TEAM_URL = BASE_URL + '/a-propos/';
const OUTPUT_DIR = path.join(__dirname, '../public/images/lawyers');

function slugify(str) {
  return str
    .toLowerCase()
    .replace(/é/g, 'e')
    .replace(/è/g, 'e')
    .replace(/ê/g, 'e')
    .replace(/à/g, 'a')
    .replace(/ç/g, 'c')
    .replace(/ô/g, 'o')
    .replace(/î/g, 'i')
    .replace(/ï/g, 'i')
    .replace(/'/g, '')
    .replace(/[^a-z0-9]+/g, '-')
    .replace(/^-+|-+$/g, '');
}

async function downloadImage(url, filename) {
  const filePath = path.join(OUTPUT_DIR, filename);
  const file = fs.createWriteStream(filePath);
  return new Promise((resolve, reject) => {
    https.get(url, (response) => {
      response.pipe(file);
      file.on('finish', () => {
        file.close(resolve);
      });
    }).on('error', (err) => {
      fs.unlink(filePath, () => {});
      reject(err.message);
    });
  });
}

(async () => {
  if (!fs.existsSync(OUTPUT_DIR)) {
    fs.mkdirSync(OUTPUT_DIR, { recursive: true });
  }
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto(TEAM_URL, { waitUntil: 'networkidle2' });
  await page.waitForTimeout(3000); // Wait for images to load

  const images = await page.evaluate(() => {
    function slugify(str) {
      return str
        .toLowerCase()
        .replace(/é/g, 'e')
        .replace(/è/g, 'e')
        .replace(/ê/g, 'e')
        .replace(/à/g, 'a')
        .replace(/ç/g, 'c')
        .replace(/ô/g, 'o')
        .replace(/î/g, 'i')
        .replace(/ï/g, 'i')
        .replace(/'/g, '')
        .replace(/[^a-z0-9]+/g, '-')
        .replace(/^-+|-+$/g, '');
    }
    const imgs = Array.from(document.querySelectorAll('img'));
    return imgs.map(img => {
      const alt = img.alt || '';
      let src = img.src || '';
      let srcset = img.srcset || '';
      let name = alt.replace(/(Me |Avocat|Avocate|Me\.|Mme\.|M\.|\(.*\))/gi, '').trim();
      const slug = slugify(name);
      let url = '';
      if (srcset && srcset.includes('.webp')) {
        url = srcset.split(',').find(s => s.includes('.webp')).split(' ')[0];
      } else if (src.endsWith('.webp')) {
        url = src;
      } else if (src) {
        url = src;
      }
      if (slug && url && url.match(/wp-content.*\.(webp|jpg|jpeg|png)$/i)) {
        return { slug, url };
      }
      return null;
    }).filter(Boolean);
  });

  for (const { slug, url } of images) {
    const ext = path.extname(url.split('?')[0]);
    const filename = slug + ext;
    try {
      await downloadImage(url, filename);
      console.log(`Downloaded: ${filename}`);
    } catch (e) {
      console.error(`Failed to download ${filename}:`, e);
    }
  }
  await browser.close();
})(); 

CasperSecurity Mini