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.quebec/private_html/scripts/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/gositeme/domains/lavocat.quebec/private_html/scripts/scrape-adw-lawyer-photos.js
const axios = require('axios');
const cheerio = require('cheerio');
const fs = require('fs');
const path = require('path');

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 writer = fs.createWriteStream(filePath);
  const response = await axios({
    url,
    method: 'GET',
    responseType: 'stream',
    headers: { 'User-Agent': 'Mozilla/5.0' }
  });
  response.data.pipe(writer);
  return new Promise((resolve, reject) => {
    writer.on('finish', resolve);
    writer.on('error', reject);
  });
}

function getWebpFromSrcset(srcset) {
  if (!srcset) return null;
  // srcset: '.../name.webp 1x, .../name.jpg 2x'
  const parts = srcset.split(',').map(s => s.trim());
  for (const part of parts) {
    if (part.includes('.webp')) {
      return part.split(' ')[0];
    }
  }
  return null;
}

async function main() {
  if (!fs.existsSync(OUTPUT_DIR)) {
    fs.mkdirSync(OUTPUT_DIR, { recursive: true });
  }
  const { data: html } = await axios.get(TEAM_URL);
  const $ = cheerio.load(html);
  let found = 0;
  $('img').each(async (i, el) => {
    const alt = $(el).attr('alt') || '';
    let src = $(el).attr('src') || '';
    let srcset = $(el).attr('srcset') || '';
    let dataSrc = $(el).attr('data-src') || '';
    let imageUrl = null;
    // Prefer .webp from srcset
    const webpFromSrcset = getWebpFromSrcset(srcset);
    if (webpFromSrcset) {
      imageUrl = webpFromSrcset.startsWith('http') ? webpFromSrcset : BASE_URL + webpFromSrcset;
    } else if (src.endsWith('.webp')) {
      imageUrl = src.startsWith('http') ? src : BASE_URL + src;
    } else if (dataSrc.endsWith('.webp')) {
      imageUrl = dataSrc.startsWith('http') ? dataSrc : BASE_URL + dataSrc;
    }
    if (imageUrl && alt.match(/(Me |Avocat|Avocate|Me\.|Mme\.|M\.|\b[A-Z][a-z]+ [A-Z][a-z]+)/)) {
      let name = alt.replace(/(Me |Avocat|Avocate|Me\.|Mme\.|M\.|\(.*\))/gi, '').trim();
      if (!name) return;
      const filename = slugify(name) + '.webp';
      try {
        await downloadImage(imageUrl, filename);
        console.log(`Downloaded: ${filename}`);
        found++;
      } catch (e) {
        console.error(`Failed to download ${filename}:`, e.message);
      }
    }
  });
  setTimeout(() => {
    if (found === 0) {
      console.log('No lawyer images found. The site structure may have changed.');
    }
  }, 3000);
}

main(); 

CasperSecurity Mini