قم بإعداد السيلينيوم باستخدام برنامج تشغيل chrome على نظام التشغيل ubuntu/debian
- إعداد وتشغيل Chrome وSelenium على نظام التشغيل ubuntu أو debian
- يعتمد الدليل على أوبونتو 22.04
- تاريخ آخر تعديل: 4 يونيو 2024
# cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=22.04
DISTRIB_CODENAME=jammy
DISTRIB_DESCRIPTION="Ubuntu 22.04.3 LTS"
جدول المحتويات
- الخطوة 1: قم بتحديث كافة الحزم، إذا لزم الأمر
- الخطوة 2: تنزيل الحزمة المستقرة لـ google-chrome
- الخطوة 3: تثبيت جوجل كروم
- (اختياري) إذا كانت لديك مشكلة في التبعية بعد الخطوة 3، فقم بتشغيل الأمر التالي ثم حاول مرة أخرى في الخطوة 3
- الخطوة 4: التحقق من إصدار google-chrome المثبت
- الخطوة 5: تثبيت السيلينيوم، مدير برنامج تشغيل الويب
- الخطوة 6: إنشاء hello_world
- الخطوة 7: قم بتشغيل test.py وتحقق من توفر google-chrome
- الخطوة 8: هذا كل شيء. استمتع بها.:)
- التعليمات :)
- 1. جهاز VM الخاص بي يعمل في بيئة سحابية. في هذه الحالة، كيف يمكنني استخدام Chrome؟
- 2. لقد كتبت نصًا برمجيًا لـ Python باستخدام Chrome وSelenium، وجدولته باستخدام crontab، لكن cron لا يعمل بشكل صحيح. ماذا علي أن أفعل؟
- 3. سبب اختلاف طرق تحميل ChromeDriver هو كما يلي، على سبيل المثال، ما هي الاختلافات بين (1) و (2)؟
- 4. تم تحديث جوجل كروم. أين يمكنني تنزيل ChromeDriver وكيف أقوم بتثبيته؟
- 4.1. انتقل إلى صفحة تنزيل برنامج تشغيل Chrome.
- 4.2. قم بتنزيل ChromeDriver.
- 4.3. قم بتثبيت برنامج ChromeDriver.
- 4.4. مثال للاستخدام في بايثون:
- 5. كيف يمكنني منع حزمة google-chrome من التحديث التلقائي على Ubuntu؟
الخطوة 1: قم بتحديث كافة الحزم، إذا لزم الأمر
# apt update
# apt upgrade
الخطوة 2: قم بتنزيل الحزمة الثابتة "google-chrome".
# wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
الخطوة 3: تثبيت "جوجل كروم"
# apt-get install -y ./google-chrome-stable_current_amd64.deb
الخطوة 4: التحقق من إصدار "google-chrome" المثبت
# google-chrome --version
Google Chrome 123.0.6312.86
الخطوة 5: تثبيت السيلينيوم، مدير برنامج تشغيل الويب
- https://pypi.org/project/webdriver-manager/
# pip3 install selenium
# pip3 install webdriver-manager
الخطوة 6: إنشاء hello_world
- قم بالتشغيل باستخدام Chrome بدون رأس
# vim test.py
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
options = Options ()
options.add_argument( ' --headless ' )
options.add_argument( ' --no-sandbox ' )
options.add_argument( ' --disable-dev-shm-usage ' )
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options)
driver.get( " https://python.org " )
print(driver.title)
driver.close ()
- التشغيل باستخدام واجهة المستخدم الرسومية لـ Chrome
# vim test.py
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
options = Options ()
# options.add_argument('--headless')
# options.add_argument('--no-sandbox')
options.add_argument( ' --disable-dev-shm-usage ' )
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options)
driver.get( " https://python.org " )
print(driver.title)
driver.close ()
الخطوة 7: قم بتشغيل test.py وتحقق من توفر "google-chrome".
# python3 test.py
Welcome to Python.org
الخطوة 8: هذا كل شيء. استمتع بها:)
التعليمات :)
1. جهاز VM الخاص بي يعمل في بيئة سحابية. في هذه الحالة، كيف يمكنني استخدام Chrome؟
- في البيئة السحابية، عادةً ما يستخدم الأشخاص Chrome في وضع مقطوعة الرأس.
- بمعنى آخر، في البيئة السحابية، قد لا تدعم الأجهزة الافتراضية وضع العرض، وخاصة الأجهزة الافتراضية المجانية (الطبقات المجانية).
- ومع ذلك، إذا كانت الأجهزة الافتراضية الخاصة بك تدعم نظام التشغيل X-windows أو العرض، فيمكنك أيضًا استخدام وضع واجهة المستخدم الرسومية (GUI).
2. لقد كتبت نصًا برمجيًا لـ Python باستخدام Chrome وSelenium، وجدولته باستخدام crontab، لكن cron لا يعمل بشكل صحيح. ماذا علي أن أفعل؟
- يبدو أن العديد من نتائج البحث تحتاج إلى تحديد وضع العرض على أنه 0 في البرنامج النصي الخاص بك عند تشغيله من خلال cron.
- مثله:)
*/1 * * * * export DISPLAY=:0; python ~/selenium_script.py
- ومع ذلك، يتم تنفيذ الأجهزة الافتراضية النموذجية التي تقوم بتشغيل Chrome في وضع مقطوعة الرأس، حيث لا تكون إعدادات العرض ذات صلة.
- قد تكون المشكلة أنه عند تنفيذ cronjob cron، لا يوجد مسار chromedriver في مسار cron.
- لذلك يتعين عليك تحديد مسار chromedriver في cron أو المشغل (البرنامج النصي).
- إذا كنت لا تعرف المسار إلى chromedriver، فيمكنك العثور عليه باستخدام الأمر التالي (أو عن طريق ضبط وضع WDM_LOG):
# find / -name "chromedriver"
/root/.cache/selenium/chromedriver
/root/.cache/selenium/chromedriver/linux64/117.0.5938.92/chromedriver
/root/.wdm/drivers/chromedriver
/root/.wdm/drivers/chromedriver/linux64/117.0.5938.92/chromedriver-linux64/chromedriver
- بعد ذلك، يمكنك تعيين المسار في crontab وتنفيذه، مثل هذا :)
*/05 * * * * export PATH=$PATH:/root/.wdm/drivers/chromedriver/linux64/117.0.5938.92/chromedriver-linux64/chromedriver; root /data/test.py
أو يمكنك إنشاء برنامج نصي Bash يقوم بتحميل برنامج Python النصي ويحدد المسار:
# vim test_loader.sh
#!/bin/bash
export PATH=$PATH:/root/.wdm/drivers/chromedriver/linux64/117.0.5938.92/chromedriver-linux64/chromedriver
...
...
python3 test.py
3. سبب اختلاف طرق تحميل ChromeDriver هو كما يلي، على سبيل المثال، ما هي الاختلافات بين (1) و (2)؟
(1)
from selenium import webdriver
driver = webdriver.Chrome('/home/user/drivers/chromedriver')
(2)
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager
driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()))
- (1) يقوم بتحميل برنامج chromedriver باستخدام برنامج تشغيل الويب الخاص بالسيلينيوم. في هذه الحالة، تحتاج إلى تنزيل برنامج chromedriver الثنائي، وفك ضغطه في مكان ما على جهاز الكمبيوتر الخاص بك وتعيين المسار إلى برنامج التشغيل هذا. (متوافق مع السيلينيوم 4.x والإصدارات الأقدم.)
- (2) يقوم بتشغيل Chrome باستخدام webdriver-manager. عند استخدام حزمة webdriver-manager، ليست هناك حاجة لتنزيل برنامج chromedriver الثنائي بشكل منفصل.
مدير التثبيت:
pip install webdriver-manager
استخدم مع كروم
السيلينيوم 3
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
driver = webdriver.Chrome(ChromeDriverManager().install())
السيلينيوم 4
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager
driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()))
- لمزيد من التفاصيل، راجع https://pypi.org/project/webdriver-manager/.
4. تم تحديث جوجل كروم. أين يمكنني تنزيل ChromeDriver وكيف أقوم بتثبيته؟
- 4 يونيو 2024، أحدث إصدار من Chrome هو " 125.0.6422.142 "
4.1. انتقل إلى صفحة تنزيل ChromeDriver.
- قم بتنزيل برنامج تشغيل Chrome بنفس إصدار Chrome المحدث.
- انقر على الرابط الموجود في لوحة تحكم Chrome لاختبار التوفر: https://chromedriver.chromium.org/downloads
- https://googlechromelabs.github.io/chrome-for-testing/ للعثور على برنامج تشغيل Chrome المطابق لإصدار Chrome المحدث.
4.2. قم بتنزيل ChromeDriver.
- قم بتنزيل إصدار برنامج تشغيل Chrome الذي يتوافق مع متصفح Chrome الخاص بك.
- https://googlechromelabs.github.io/chrome-for-testing/
For Mac M1, download mac-arm64.
- For Chrome version: https://storage.googleapis.com/chrome-for-testing-public/125.0.6422.141/mac-arm64/chromedriver-mac-arm64.zip
For General Linux distributions, download linux64.
- For Chrome version: https://storage.googleapis.com/chrome-for-testing-public/125.0.6422.141/linux64/chromedriver-linux64.zip
4.3. قم بتثبيت برنامج ChromeDriver.
- نظرًا لأن Chrome Driver عبارة عن ملف ثنائي، فلا توجد عملية تثبيت منفصلة.
- قم باستخراج الأرشيف المضغوط وانسخ ملف chromedriver إلى الدليل الذي يجب أن يوجد به Chrome Driver.
بالنسبة لنظام التشغيل Mac، الموقع الافتراضي لبرنامج chromedriver هو /usr/local/bin.
% sw_vers
ProductName: macOS
ProductVersion: 13.0
BuildVersion: 22A380
% ls -al /usr/local/bin/chromedriver
-rwxr-xr-x 1 root wheel 17314928 Mar 25 13:23 /usr/local/bin/chromedriver
إذا كنت تريد وضعه في دليل مخصص:
- ضع ملف "chromedriver" في المكان الذي تريده. على سبيل المثال: "/Users/mymac/data/chromedrv/chromedriver".
4.4. مثال للاستخدام في بايثون:
from selenium import webdriver
from selenium . webdriver . chrome . service import Service
def chrome_webdriver ():
chromedriver_path = '/Users/mymac/data/chromedrv/chromedriver'
user_agent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/123.0.0.0 Safari/537.36'
options = webdriver . ChromeOptions ()
options . add_argument ( "--start-maximized" )
options . add_argument ( '--headless' )
options . add_argument ( f'user-agent= { user_agent } ' )
service = Service ( executable_path = chromedriver_path )
driver = webdriver . Chrome ( service = service , options = options )
return driver
url = 'http://www.google.com'
driver = chrome_webdriver ()
driver . get ( url )
driver . implicitly_wait ( 10 )
print ( driver . page_source )
5. كيف يمكنني منع حزمة "google-chrome" من التحديث التلقائي على Ubuntu؟
- لمنع Google Chrome من التحديث التلقائي على Ubuntu، يمكنك استخدام تثبيت الحزمة أو علامة apt-mark للاحتفاظ بحزمة Chrome. ومع ذلك، لا ينصح بهذا بشكل عام
- ضع في اعتبارك أن تعطيل التحديثات التلقائية لمتصفح Chrome قد يؤدي إلى تعريض الأمان للخطر. يوصى عمومًا بإدارة التحديثات بشكل صحيح لتحقيق فوائد الأمان والوظائف.
باستخدام علامة ملائمة:
- اضغط على الحزمة لمنع التحديثات:
# apt-mark hold google-chrome-stable
google-chrome-stable set on hold.
- للسماح بالتحديثات مرة أخرى، قم بتحرير التعليق:
# apt-mark unhold google-chrome-stable
Canceled hold on google-chrome-stable.