كيفية فتح رابط في بيثون. العمل مع WebBrowser وحل مشكلة في برنامج Internet Explorer

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

WebBrowser هي وحدة مدمجة في Python توفر واجهة عالية المستوى لعرض مستندات الويب.

للبدء ، قم باستيراد الوحدة النمطية باستخدام الأمر:

import webbrowser 

الآن هناك خيار كيفية فتح الرابط. هناك كرسيان:

1. اكتب في سطر واحد:

 webbrowser.open(url, new=0, autoraise=True) 

على سبيل المثال:

 webbrowser.open('https://vk.com', new=2) 

إذا كان new = 0 ، يتم فتح عنوان URL ، إن أمكن ، في نافذة المتصفح نفسها. إذا كان المتغير new = 1 ، يتم فتح نافذة متصفح جديدة ، إن أمكن. إذا كان new = 2 ، يتم فتح صفحة متصفح جديدة ("علامة تبويب") ، إذا كان ذلك ممكنًا.

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

2. لا تعاني من تذكر المعلمات الجديدة والكتابة بشريًا:

 webbrowser.open_new(url) 

يفتح هذا التصميم عنوان URL في نافذة متصفح افتراضي جديدة ، إن أمكن ، وإلا فإنه يفتح عنوان URL في نافذة متصفح واحدة.

 webbrowser.open_new_tab(url) 

في هذه الحالة ، سيتم فتح عنوان URL على صفحة متصفح جديدة ("علامة تبويب") افتراضيًا ، إن أمكن ، وإلا فإنه مكافئ لـ open_new ().

افترض أنك لا تحتاج إلى متصفح افتراضي. هناك أمر .get () رائع لتحديد المستعرض

 webbrowser.get(using=None) 

تحدث تقريبًا ، فأنت تشير ببساطة إلى المتصفح الذي تستخدمه.

على سبيل المثال ، افتح علامة تبويب جديدة في Google Chrome:

 webbrowser.get(using='google-chrome').open_new_tab('https://vk.com') 

جدول اسم المتصفح:
اكتب الاسماسم الصف
"موزيلا"موزيلا ("موزيلا")
"فايرفوكس"موزيلا ("موزيلا")
"نتسكيب"موزيلا (نتسكيب)
"جاليون"جاليون ("جاليون")
"عيد الغطاس"جاليون (عيد الغطاس)
"Skipstone"BackgroundBrowser ('skipstone')
"Kfmclient"كونكيرور ()
"كونكورور"كونكيرور ()
"KFM"كونكيرور ()
"الفسيفساء"BackgroundBrowser ('الفسيفساء')
"أوبرا"أوبرا ()
"الكأس"غريل ()
"روابط"GenericBrowser ('links')
"إي لنكس"Elinks ('elinks')
"لينكس"GenericBrowser ('الوشق')
"W3m"GenericBrowser ('w3m')
'ويندوز الافتراضي "WindowsDefault
"ماكوسكس"MacOSX ("افتراضي")
"سفاري"MacOSX ("رحلات السفاري")
"جوجل كروم"Chrome ('google-chrome')
"كروم"Chrome ("الكروم")
"الكروم"الكروم ("الكروم")
"الكروم متصفح"Chromium ("متصفح chromium")

ولكن ليس من الممكن دائمًا الدخول مع .get () بمفرده ، وفي هذه الحالة تأتي وظيفة .register () في عملية الإنقاذ ، على سبيل المثال:

 import webbrowser webbrowser.register('Chrome', None, webbrowser.BackgroundBrowser('C:\Program Files (x86)\Google\Chrome\Application\chrome.exe')) webbrowser.get('Chrome').open_new_tab('vk.com') 

لقد أشرنا إلى المسار إلى Google Chrome ، وقمنا بتسميته ، والآن جميع الروابط مفتوحة فقط فيه. آمل أن نكون قد صنفنا وحدة WebBrowser قليلاً والآن دعنا ننتقل إلى مشكلتي الصغيرة.

المشكلة


كما ذكرنا سابقًا ، فيما يتعلق بمشروع الدورة التدريبية ، اخترت إنشاء مساعد صوتي. أردت أن أعلمه اتباع الروابط والبحث عن المعلومات في محرك البحث. بالطبع ، سيكون من الممكن "تحزيم" الكثير من المكتبات لهذا الغرض ، لكنني أردت في الأساس تنفيذ ذلك من خلال وحدة WebBrowser القياسية.

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

على سبيل المثال:

 import webbrowser webbrowser.open_new_tab('https://vk.com') webbrowser.open_new_tab('') 

وفقًا لمنطق هذا الرمز ، يجب فتح علامتي تبويب:

  1. موقع vk.com
  2. محرك البحث الاستعلام - التفاح

ولكن في الواقع ، اثنين من المتصفحات المختلفة مفتوحة. يتم فتح الرابط عن طريق متصفحنا الافتراضي ، ويتم تقديم الطلب بواسطة Internet Explorer (على الرغم من أنه يكلف نظام التشغيل Windows 10 ، إلا أن IE لا يزال مفتوحًا بدلاً من Edge). كيفية التعامل مع هذا؟ يمكن للمعلمين الحقيقيين الدخول إلى وحدة WebBrowser نفسها وإصلاحها هناك ، لكننا سنقيِّم فرصنا بوقاحة ونستمر في التدفق.

نظرًا لأنه يُسمح لنا بفتح الروابط فقط في المتصفح الافتراضي ، سنقوم بفتح الروابط فقط.

خطوات الحل


  1. نقوم بإجراء استعلام بحث في محرك البحث الخاص بنا (Yandex ، Google ، إلخ ، إلخ.)
  2. نحصل على الرابط

  3. وكما خمّن الكثيرون بالفعل ، ما عليك سوى إدراج رابطنا بدون ما يأتي بعد "text ="

     import webbrowser webbrowser.open_new_tab('https://vk.com') webbrowser.open_new_tab('https://yandex.ru/search/?lr=10735&text=') 
  4. أنت الآن بحاجة إلى إضافة نص الاستعلام نفسه إما من خلال "+" أو من خلال "٪ s"

    • من خلال "+"

       webbrowser.open_new_tab('https://yandex.ru/search/?lr=10735&text='+'') 
    • من خلال "٪"

       webbrowser.open_new_tab('https://yandex.ru/search/?lr=10735&text=%s'%'') 
    • ولكن من الأفضل أن تنفذ من خلال الشكل

       webbrowser.open_new_tab('https://yandex.ru/search/?lr=10735&text={}'.format('')) 


الآن ، دعونا نجعل المستخدم يدخل رابطًا أو طلبًا ، ويتفهم البرنامج نفسه طريقة الاستخدام (اتصل بالرابط أو أدخله في رابط الطلب).

بادئ ذي بدء ، نحن نفهم أن الرابط يحمل نطاقًا (.ru ، .com ، إلخ) ، في الطلب ، وكقاعدة عامة ، لا يضعون حدًا (شراء سيارة أو فيلم عبر الإنترنت ، إلخ) ، ولكن في الرابط شريط الفضاء

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

 import webbrowser import re call = input('   : ') if re.search(r'\.', call): webbrowser.open_new_tab('https://' + call) elif re.search(r'\ ', call): webbrowser.open_new_tab('https://yandex.ru/search/?text='+call) else: webbrowser.open_new_tab('https://yandex.ru/search/?text=' + call) 

سأشرح الكود قليلاً.

يقوم المستخدم بإدخال رابط أو نص طلب في متغير الاتصال.

 if re.search(r'\.', call): webbrowser.open_new_tab('https://' + call) 

يتحقق الشرط الأول من متغير الاتصال لنقطة داخله. الحرف '\' مطلوب ، وإلا فإن الوحدة لا تفهم أن الحرف هو نقطة قبله.

 elif re.search(r'\ ', call): 

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

 else: webbrowser.open_new_tab('https://yandex.ru/search/?text=' + call) 

وخلاف ذلك ، يقوم بدوره بتعيين كل ما كتبه المستخدم بدون مسافات وفترات في استعلام البحث.

مطلوب التحقق من وجود مساحة ؛ وإلا ، يفتح WebBrowser برنامج Internet Explorer.

شكرا لكم جميعا على اهتمامكم! آمل أن يكون هذا المقال مفيدًا لشخص ما.

Source: https://habr.com/ru/post/ar470938/


All Articles