كيفية إرسال المفاتيح مع تأخير في سيلينيوم (دليل سهل)

تعلم كيفية تنفيذ إرسال المفاتيح المتأخر في سيلينيوم لمحاكاة الكتابة البشرية، وتجنب اكتشاف الروبوتات، والتفاعل مع العناصر الديناميكية على الويب. استكشف طرقًا وتقنيات متقدمة لإضافة تأخيرات إلى إدخالك الآلي.

Amir Hassan

Amir Hassan

11 أغسطس 2025

كيفية إرسال المفاتيح مع تأخير في سيلينيوم (دليل سهل)

Apidog للمؤسسات

النشر على الخوادم المحلية

SSO و RBAC

متوافق مع SOC 2

استكشف Apidog للمؤسسات

إذاً، تريد بناء تلقائية الويب الخاصة بك، ومحاكاة الكتابة البشرية، أليس كذلك؟ تهانينا، لقد جئت إلى المكان الصحيح!

بينما تنجز طريقة send_keys() الخاصة بـ Selenium هذا بكفاءة، إلا أنها غالباً ما تفعل ذلك بسرعة بعيدة عن الطبيعية البشرية. يمكن أن يؤدي ذلك أحيانًا إلى تفعيل تدابير مكافحة الروبوتات أو الفشل في التفاعل بشكل صحيح مع عناصر الويب الديناميكية. أدخل مفهوم "إرسال مفاتيح Selenium مع تأخير" - تقنية تضيف إيقاعًا أكثر طبيعية، يشبه الإنسان، إلى إدخال النص الآلي.

💡
وقبل أن نغوص في التفاصيل الدقيقة، اسمح لي أن أقدم لك Apidog. إذا كنت جادًا بشأن تلقائية الويب، فإن وجود واجهات برمجة التطبيقات (APIs) موثقة جيدًا هو أمر حيوي. Apidog هي أداة ممتازة لإنشاء وإدارة ومشاركة توثيق واجهات برمجة التطبيقات بسهولة. بالإضافة إلى ذلك، يمكنك تنزيل Apidog مجانًا وتعزيز مستوى توثيقك.
button

لماذا تحتاج إلى إدخال متأخر في Selenium

قبل الانغماس في التنفيذ، من المهم فهم لماذا قد نحتاج إلى إضافة تأخيرات بين الضغطات:

محاكاة سلوك الإنسان: لا يكتب البشر بسرعة البرق. إن إضافة تأخيرات تجعل الإدخال يبدو أكثر طبيعية.

تجنب اكتشاف مكافحة الروبوتات: العديد من المواقع لديها تدابير لرصد ومنع الإدخالات الآلية. يمكن أن تساعد عملية إبطاء الإدخال في تجاوز هذه التدابير.

السماح بالمحتوى الديناميكي: بعض تطبيقات الويب تحمل المحتوى بشكل ديناميكي أثناء كتابة المستخدم. قد تفوق عملية الإدخال السريعة هذه العمليات التحميل.

التصحيح والتصور: يجعل الإدخال المتأخر من السهل تصحيح نصوص التلقائية المرئية الخاصة بك.

الآن بعد أن فهمنا 'لماذا'، دعنا نستكشف 'كيف'.

كيفية تنفيذ إرسال مفاتيح مؤخرة في Selenium

هناك عدة طرق لتنفيذ إرسال مفاتيح مؤخرة في Selenium. سنغطي أكثر الطرق شيوعًا وفاعلية، بدءًا من الأبسط والتقدم إلى تقنيات أكثر تقدمًا.

الطريقة 1: حلقة أساسية مع Time.sleep()

أبسط طريقة تتضمن استخدام حلقة بسيطة ودالة time.sleep() في Python.

from selenium import webdriver
from selenium.webdriver.common.by import By
import time

driver = webdriver.Chrome()
driver.get("https://example.com")

input_element = driver.find_element(By.ID, "input-field")
text_to_input = "Hello, World!"

for character in text_to_input:
    input_element.send_keys(character)
    time.sleep(0.1)  # 100ms delay between each character

هذه الطريقة بسيطة ولكن لها بعض العيوب:

الطريقة 2: تأخيرات عشوائية

لجعل الكتابة تظهر بشكل يشبه الإنسان، يمكننا إدخال تأخيرات عشوائية بين الضغطات.

import random

# ... (سابقًا كود الإعداد)

min_delay = 0.05
max_delay = 0.3

for character in text_to_input:
    input_element.send_keys(character)
    time.sleep(random.uniform(min_delay, max_delay))

تضيف هذه الطريقة تباينًا في سرعة الكتابة، مما يجعلها تبدو أكثر طبيعية.

الطريقة 3: استخدام ActionChains

توفر فئة ActionChains في Selenium وسيلة أكثر تعقيدًا للتعامل مع تفاعلات المستخدم، بما في ذلك الكتابة مع تأخيرات.

from selenium.webdriver.common.action_chains import ActionChains

# ... (سابقًا كود الإعداد)

actions = ActionChains(driver)

for character in text_to_input:
    actions.send_keys(character)
    actions.pause(random.uniform(min_delay, max_delay))

actions.perform()

تعتبر هذه الطريقة أكثر كفاءة لأنها تنشئ سلسلة من الإجراءات قبل تنفيذها جميعًا دفعة واحدة.

الطريقة 4: دالة JavaScript مخصصة

للحصول على تحكم أكثر دقة، يمكننا حقن وتنفيذ دالة JavaScript مخصصة:

js_code = """
function typeWithDelay(element, text, minDelay, maxDelay) {
    var i = 0;
    var interval = setInterval(function() {
        if (i < text.length) {
            element.value += text.charAt(i);
            i++;
        } else {
            clearInterval(interval);
        }
    }, Math.floor(Math.random() * (maxDelay - minDelay + 1) + minDelay));
}
"""

driver.execute_script(js_code)
driver.execute_script("typeWithDelay(arguments[0], arguments[1], arguments[2], arguments[3])", 
                      input_element, text_to_input, 50, 200)

توفر هذه الطريقة JavaScript تحكمًا دقيقًا فوق سلوك الكتابة ويمكن أن تكون أكثر موثوقية عبر متصفحات مختلفة.

تقنيات متقدمة لتأخير المفاتيح باستخدام Selenium

بينما تغطي الطرق المذكورة أعلاه الأساسيات، هناك العديد من التقنيات المتقدمة والاعتبارات التي يجب أخذها في الاعتبار عند تنفيذ إرسال مفاتيح مؤخرة في Selenium.

معالجة المفاتيح الخاصة والمعدلات

عند محاكاة الكتابة البشرية، من المهم أخذ المفاتيح الخاصة والمعدلات في الاعتبار. على سبيل المثال، قد ترغب في محاكاة استخدام Shift للحروف الكبيرة أو علامات الترقيم.

from selenium.webdriver.common.keys import Keys

# ... (سابقًا كود الإعداد)

text_to_input = "Hello, World!"

for char in text_to_input:
    if char.isupper():
        actions.key_down(Keys.SHIFT)
        actions.send_keys(char.lower())
        actions.key_up(Keys.SHIFT)
    else:
        actions.send_keys(char)
    actions.pause(random.uniform(min_delay, max_delay))

actions.perform()

تقوم هذه الطريقة بمحاكاة الضغط والإفراج عن مفتاح Shift للحروف الكبيرة، مما يضيف طبقة أخرى من الواقعية إلى محاكاة الكتابة.

تنفيذ أخطاء الكتابة والتصحيحات

لجعل الكتابة أكثر شبهًا بالبشر، يمكنك إدخال أخطاء كتابية عرضية تليها تصحيحات:

def simulate_typing_with_mistakes(text, mistake_probability=0.05):
    result = []
    for char in text:
        if random.random() < mistake_probability:
            # محاكاة خطأ مطبعي
            wrong_char = random.choice('abcdefghijklmnopqrstuvwxyz')
            result.append(wrong_char)
            result.append(Keys.BACKSPACE)
        result.append(char)
    return result

text_to_input = "Hello, World!"
characters_to_type = simulate_typing_with_mistakes(text_to_input)

for char in characters_to_type:
    actions.send_keys(char)
    actions.pause(random.uniform(min_delay, max_delay))

actions.perform()

تدخل هذه الدالة أخطاء مطبعياً عشوائية وتصحيحات فورية، مما يعزز بشكل أكبر من الجودة البشرية للإدخال.

التكيف مع عناصر الويب الديناميكية

أحيانًا، قد تتغير عناصر الويب أو تصبح غير صالحة خلال عملية الكتابة. للتعامل مع ذلك، يمكنك تنفيذ آلية إعادة المحاولة:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

def send_keys_with_retry(element, text, max_retries=3):
    for attempt in range(max_retries):
        try:
            for char in text:
                element.send_keys(char)
                time.sleep(random.uniform(min_delay, max_delay))
            return  # نجاح، الخروج من الدالة
        except StaleElementReferenceException:
            if attempt < max_retries - 1:
                # انتظر حتى تصبح العنصر متاحًا مرة أخرى
                element = WebDriverWait(driver, 10).until(
                    EC.presence_of_element_located((By.ID, "input-field"))
                )
            else:
                raise  # إعادة رفع الاستثناء إذا تم الوصول إلى الحد الأقصى من المحاولات

# الاستخدام
try:
    send_keys_with_retry(input_element, text_to_input)
except Exception as e:
    print(f"فشل في إدخال النص بعد عدة محاولات: {e}")

تداوى هذه الدالة محاولات إدخال النص عدة مرات، مما يتعامل مع الحالات التي قد يصبح فيها العنصر غير صالح خلال عملية الكتابة.

كيفية جعل أداء Selenium أسرع مع send_keys()

بينما يمكن أن تجعل إضافة التأخيرات إلى send_keys() تلقائيتك أكثر موثوقية وواقعية، من المهم النظر في تأثيرات الأداء:

زيادة وقت التنفيذ: من الواضح أن إضافة التأخيرات ستزيد من إجمالي وقت تنفيذ اختباراتك أو سكربتات التلقائية.

استخدام الموارد: قد تستهلك السكربتات الطويلة التي تحتوي على العديد من الإدخالات المتأخرة المزيد من موارد النظام مع مرور الوقت.

معالجة المهلات: قد تحتاج إلى ضبط إعدادات المهلات في مكالمات WebDriverWait الخاصة بك لحساب الوقت الإضافي المستغرق بواسطة الإدخالات المتأخرة.

لتقليل هذه المشاكل، قم بالتفكير في الاستراتيجيات التالية:

تقديم Apidog: رفيقك في واجهة برمجة التطبيقات

بينما نحن في موضوع تعزيز التلقائية وتدفق العمل في التطوير، دعنا نأخذ لحظة لتقديم Apidog. إذا كنت تعمل مع واجهات برمجة التطبيقات، فإن وجود توثيق ممتاز أمر ضروري. Apidog هي أداة قوية مصممة لجعل توثيق واجهات برمجة التطبيقات سهلًا وفعالًا.

الميزات الرئيسية لـ Apidog

لماذا تختار Apidog؟

تبرز Apidog لأنها تجمع بين سهولة الاستخدام وميزات قوية. سواء كنت مطورًا منفردًا أو جزءًا من فريق كبير، تقدم Apidog الأدوات التي تحتاجها لإنشاء توثيق واجهات برمجة APIs ممتاز. والقدرة على اختبار واجهات برمجة التطبيقات مباشرة من التوثيق توفر الكثير من الوقت. وأفضل جزء؟ يمكنك تنزيل Apidog مجانًا وبدء تحسين توثيق واجهة برمجة التطبيقات الخاصة بك اليوم.

كيفية إرسال طلب مستقل مع Apidog

حرك الماوس إلى المجلد الأيسر، انقر فوق الزر + بجوار مربع البحث على اليسار، اختر طلب جديد لإنشاء طلب سريع جديد. طلب جديد من القائمة المنسدلة.

اختياريًا حرك الماوس إلى المجلد الأيسر، انقر فوق الزر + على الجانب الأيمن من طلب جديد لإنشاء طلب سريع جديد.

أدخل عنوان واجهة برمجة التطبيقات والمعلمات لطلب واجهة برمجة التطبيقات بسرعة.

بعد التصحيح، يمكن حفظ الطلب كطلب جديد أو توثيق واجهة برمجة التطبيقات.

يمكن إدارة طلب جديد المحفوظ في المجلد الأيسر.

أفضل الممارسات لـ send_keys() مع Selenium

لتحقيق أقصى استفادة من إرسال مفاتيح مؤخرة في Selenium، احتفظ بهذه الممارسات الجيدة في اعتبارك:

التنوع هو المفتاح: تجنب استخدام التأخيرات الثابتة. عشوِم أوقات التأخير ضمن نطاق معقول لجعل الإدخال يبدو أكثر طبيعية.

تأخيرات تتناسب مع السياق: اعتبر سياق ما يتم كتابته. على سبيل المثال، قد تستخدم تأخيرات أقصر للكلمات المألوفة وتأخيرات أطول للمصطلحات المعقدة أو عناوين البريد الإلكتروني.

مراقبة سلوك المستخدم الحقيقي: إذا كان ذلك ممكنًا، ادرس أنماط الكتابة للمستخدمين الحقيقيين على تطبيقك لتوجيه استراتيجيات التأخير الخاصة بك.

اختبار طرق مختلفة: جرب طرقًا مختلفة (حلقات Python، ActionChains، JavaScript) لمعرفة أيها يعمل بشكل أفضل لحالتك الخاصة.

ابقَ على اطلاع: حافظ على تحديث إصدارات Selenium وبرنامج تشغيل المتصفح الخاص بك، حيث قد تؤثر التحسينات في هذه الأدوات على كيفية التعامل مع الإدخالات المتأخرة.

وثق أسلوبك: وثق بوضوح لماذا وكيف تنفذ إدخال مفاتيح مؤخرة في مشروعك، حتى يفهم أعضاء الفريق الآخرون المنطق والتنفيذ.

الخاتمة

يعد تنفيذ إرسال مفاتيح مؤخرة في Selenium تقنية قوية لإنشاء سكربتات تلقائية للويب أكثر واقعية وموثوقية. من خلال محاكاة أنماط الكتابة البشرية، يمكنك تحسين موثوقية اختباراتك، وتجاوز بعض تدابير مكافحة الروبوتات، وخلق تفاعلات أكثر أصالة مع تطبيقات الويب.

سواء اخترت نهجًا بسيطًا قائمًا على Python، أو استغليت ActionChains في Selenium، أو نفذت حلول JavaScript مخصصة، فإنه المفتاح هو العثور على التوازن الصحيح بين الواقعية والكفاءة لحالتك الخاصة. تذكر أن إضافة التأخيرات يمكن أن تحل العديد من المشكلات، لكنها ليست حلاً يناسب الجميع. دائمًا اعتبر المتطلبات المحددة لمشروعك وسلوك تطبيق الويب الذي تتفاعل معه.

مع استمرار تطور تقنيات الويب، ستتطور أيضًا تقنيات أتمتة التفاعلات معها. ابقَ فضولياً، وواصل التجربة، وكن دائمًا في حالة بحث عن طرق جديدة ومحسّنة لجعل سكربتات Selenium الخاصة بك أكثر فاعلية وموثوقية. ولا تنسَ التحقق من Apidog لأخذ توثيق واجهة برمجة التطبيقات الخاصة بك إلى المستوى التالي!

button

ممارسة تصميم API في Apidog

اكتشف طريقة أسهل لبناء واستخدام واجهات برمجة التطبيقات

كيفية إرسال المفاتيح مع تأخير في سيلينيوم (دليل سهل)