مكتبة Puppeteer لإتمتة المتصفح (Chrome او Chromium)

ماهو Puppeteer او محرك العرائس

هي مكتبة لـ Nodejs توفر واجهة برمجة تطبيقات ( api ) عالية المستوى للتحكم في Chrome أو Chromium عبر بروتوكول DevTools.
يعمل Puppeteer بدون رأس ( في الخلفية ) افتراضيًا ، ولكن يمكن تهيئته لتشغيل Chrome أو Chromium بالكامل

ماذا يمكنه أن يفعل؟

  • يمكنك إنشاء لقطات شاشة وملفات PDF للصفحات.
  • أتمتة إرسال النماذج واختبار واجهة المستخدم وإدخال لوحة المفاتيح الخ…
  • قم بإنشاء بيئة اختبار مؤتمتة ومحدثة. قم بإجراء اختباراتك مباشرةً في أحدث إصدار من Chrome باستخدام أحدث ميزات JavaScript والمتصفح.
  • مخطط زمني لموقعك للمساعدة في تشخيص مشكلات الأداء.
  • اختبار ملحقات كروم.

تثبيت Puppeteer

لاستخدام محرك العرائس في مشروعك , قم بتشغيل الامر التالي

npm i puppeteer

عند ثبيت محرك العرائس ، فإنه يقوم بتنزيل إصدار حديث من Chromium مضمون للعمل مع واجهة برمجة التطبيقات

لإستدعاء المكتبة في مشروعنا

const puppeteer = require('puppeteer');

او

import puppeteer from 'puppeteer';

مثال index.js | إلتقاط صورة للموقع


import puppeteer from 'puppeteer';




const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://discourse.aosus.org');
await page.screenshot({ path: 'example.png' });

await browser.close();

نقوم بتنفيذ البرنامج النصي index.js

node index.js 

لان في نفس مجلد المشروع راح نحصل صورة الموقع بإسم example.png

.

الان سأقوم بكتابة برنامج نصي لتسجيل الدخول على موقع اسس والتعليق على احد المواضيع

سأقوم بالتعليق على موضوع الأخ @usama_makhzoum

.

مثال لملف index.js
قم بتغير headless الى false لترى المتصفح او ابقيها على true لتعمل في الخلفية


import puppeteer from 'puppeteer';


let browser = await puppeteer.launch({ headless: true , devtools: false }); // بدء تشغيل محرك العرائس
let page = await browser.newPage(); // إنشاء صفحة جديدة في سياق المستعرض الافتراضي
page.setDefaultNavigationTimeout(0); // سيؤدي هذا الإعداد إلى تغيير الحد الأقصى الافتراضي لوقت التنقل
//page.setDefaultTimeout(0);
let url_example = 'https://discourse.aosus.org/t/topic/2516'// عنوان url للصفحة
let message = "شكرا لك سألقى لها نظره قريباً"
let username = 'rn0x' // نضع هنا الإيميل او اليوزر
let password = "***********" // رمز الدخول

let status = await page.goto(url_example, {
    waitUntil: 'load',
    timeout: 0
}); 

status = status.status();

if (status === 200) {

    await page.$$eval('.d-button-label', (e) => {

        e.map(e => {

            if (e.textContent === 'تسجيل دخول') {

                e.click()

            }
        })
    });
    let username_input = await page.waitForSelector('#login-account-name')
    await username_input.type(username, { delay: 100 })
    let password_input = await page.waitForSelector('#login-account-password')
    await password_input.type(password, { delay: 100 })
    await page.click('#login-button');
    await new Promise(r => setTimeout(r, 5000));
    let modal_alert = await page.waitForSelector('#modal-alert')
    let Log_in_error = await modal_alert.evaluate(e => e.innerHTML);

    if (Log_in_error === 'اسم المستخدم أو البريد الإلكتروني أو كلمة المرور غير صحيحة') {

        console.log('Username, email or password incorrect');

    }

    else if (Log_in_error === '') {

        console.log('You are logged in successfully');

        let comm = await page.waitForSelector('.post-menu-area .actions .d-button-label');
        await comm.click()
        let msg = await page.waitForSelector('.d-editor-input')
        await msg.type(message, { delay: 100 });
        let send = await page.waitForSelector('.save-or-cancel .d-button-label');
        await send.click()

    }




}

else {

    console.log(` HTTP response status code ${status}`);
}


await browser.close();


نقوم بتنفيذ البرنامج النصي index.js

node index.js 

صورة من المتصفح

ezgif.com-gif-maker

للمزيد من المعلومات عن محرك العرائس تفضل بزيارة الموقع الرسمي

هذا الموضوع فائز بجائزة أسس للكتابة

هذا الموضوع فائز بجائزة أسس للكتابة وهي اول جائزة عربية مخصصة للكتابة عن البرمجيات الحرة والمفتوحة.

الموضوع متوفر على مدونة gnulinuxsa هنا:

4 إعجابات

عظيم شكرا لك. انا استخدمه لتصوير الشاشة وحاطه بحاوية :+1:t2:

إعجاب واحد (1)