غالبًا ما يتطلب كشط الويب والأتمتة التعامل مع مواقع الويب الغنية بلغة جافا سكريبت. وبينما كان PhantomJS، وهو متصفح WebKit بدون واجهة رسومية، أداةً شائعة لهذا الغرض، إلا أنه تم إيقاف تشغيله رسميًا الآن. تستعرض هذه المقالة مثالًا أساسيًا لاستخدام PhantomJS مع بايثون، مع التأكيد على أهمية اختيار البدائل الحديثة للمشاريع الجديدة. ضع في اعتبارك أن استخدام برامج قديمة مثل PhantomJS يُدخِل مخاطر أمنية كبيرة.
محتويات
- فهم PhantomJS وقيوده
- الإعداد والتكوين (إذا كان لديك PhantomJS بالفعل)
- مثال أساسي: عرض صفحة ويب
- بدائل حديثة: Playwright وSelenium
فهم PhantomJS وقيوده
وفر PhantomJS بيئة WebKit قابلة للكتابة بدون واجهة رسومية، مما يسمح لك بالتفاعل مع صفحات الويب بدون نافذة متصفح مرئية. كان هذا مفيدًا بشكل خاص لمهام مثل كشط الويب حيث كنت بحاجة إلى عرض محتوى جافا سكريبت قبل استخراج البيانات. ومع ذلك، نظرًا لحالته المتوقفة، فإنه يفتقر إلى تحديثات الأمان وهو عرضة للاختراقات. لذلك، يُنصح بشدة بعدم استخدامه في المشاريع الجديدة.
الإعداد والتكوين (إذا كان لديك PhantomJS بالفعل)
نظرًا لعدم دعم PhantomJS بعد الآن، لا يمكنك تثبيته باستخدام مديري الحزم القياسيين. إذا كان لديك تثبيت موجود مسبقًا، فأنت بحاجة إلى التأكد من إمكانية الوصول إلى الملف القابل للتنفيذ phantomjs
في متغير بيئة PATH الخاص بنظامك. يسمح لك هذا بتشغيل الأمر phantomjs
من محطتك الطرفية. راجع وثائق نظام التشغيل الخاص بك إذا كنت بحاجة إلى مساعدة في إعداد PATH.
مثال أساسي: عرض صفحة ويب
يُوضح هذا المثال عرض صفحة ويب باستخدام subprocess
في بايثون ونسخة نصية بسيطة من جافا سكريبت للتفاعل مع PhantomJS. تذكر استبدال `”http://example.com”` بعنوان URL الهدف.
import subprocess
def render_page(url, output_file):
try:
command = ["phantomjs", "render.js", url, output_file]
subprocess.run(command, check=True, capture_output=True, text=True)
print(f"Page rendered and saved to {output_file}")
except subprocess.CalledProcessError as e:
print(f"Error rendering page: {e.stderr}")
except FileNotFoundError:
print("Error: phantomjs executable not found. Make sure it's in your PATH.")
url = "http://example.com"
output_file = "output.html"
render_page(url, output_file)
ملف جافا سكريبت المقابل (render.js
) هو:
var page = require('webpage').create();
var system = require('system');
var address = system.args[1];
var outputFile = system.args[2];
page.open(address, function (status) {
if (status !== 'success') {
console.log('Unable to load the address!');
phantom.exit(1);
} else {
setTimeout(function() {
var html = page.content;
var fs = require('fs');
fs.write(outputFile, html, 'w');
phantom.exit();
}, 5000);
}
});
يفتح هذا البرنامج النصي عنوان URL، وينتظر 5 ثوانٍ (اضبط حسب الحاجة) لتنفيذ جافا سكريبت، ويحفظ HTML المعروض في output.html
. يعتبر وقت الانتظار أمرًا بالغ الأهمية؛ فقد يؤدي عدم كفاية الوقت إلى عرض غير مكتمل.
بدائل حديثة: Playwright وSelenium
بالنسبة للمشاريع الجديدة، ضع في اعتبارك بشدة استخدام بدائل حديثة مثل Playwright أو Selenium. توفر هذه الإطارات أمانًا وأداءً أفضل ودعمًا أوسع للمتصفحات. يتم صيانتها بنشاط وتتلقى تحديثات منتظمة، مما يقلل من المخاطر الأمنية المرتبطة ببرامج قديمة مثل PhantomJS. كما أنها توفر واجهات برمجة تطبيقات أكثر قوة للتفاعلات المعقدة على الويب ومهام الكشط.