如何在Python中打开链接。 使用WebBrowser并解决Internet Explorer的问题

在uni curser的工作过程中,我遇到了一个标准的Python模块-WebBrowser 。 通过这个模块,我想用默认的浏览器实现语音助手的工作,但是一切都没有按预期的顺利进行。 让我们先告诉您这个模块是什么以及它通常如何工作。

WebBrowser是嵌入在Python中的模块,提供用于查看Web文档的高级界面。

首先,使用以下命令导入模块:

import webbrowser 

现在可以选择如何打开链接。 有两把椅子:

1.一行编写:

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

例如:

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

如果new = 0,则URL将在同一浏览器窗口中打开(如果可能)。 如果变量new = 1,则如有可能,将打开一个新的浏览器窗口。 如果new = 2,则如有可能,将打开一个新的浏览器页面(“选项卡”)。

您可以放心地跳过autoraise值,因为它会在所有窗口的顶部打开浏览器,并且大多数现代浏览器都会吐出此变量,即使该变量为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') 

浏览器名称表:
类型名称类名
'mozilla'Mozilla('mozilla')
“ Firefox”Mozilla('mozilla')
“网景”Mozilla('netscape')
'galeon'Galeon('galeon')
突然显现Galeon(“主显节”)
“跳石”BackgroundBrowser(“跳过”)
'kfmclient'Konqueror()
'konqueror''Konqueror()
'kfm'Konqueror()
“马赛克”BackgroundBrowser('mosaic')
'歌剧'歌剧()
'圣杯'圣杯()
“链接”GenericBrowser(“链接”)
“链接”Elinks(“ elinks”)
'山猫'GenericBrowser('lynx')
'w3m'GenericBrowser('w3m')
'windows-default'Windows默认
'macosx'MacOSX(“默认”)
野生动物园MacOSX('safari')
“谷歌浏览器”Chrome('google-chrome')
'chrome''铬('chrome')
'铬'铬(“铬”)
“铬浏览器”铬(“铬浏览器”)

但是,并非总是可以单独使用.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而不是IE)。 该如何处理? 真正的专家可以进入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模块实现此目的,re模块也是Python内置的。 Python提供了两种不同的基于正则表达式的原始操作: match在字符串的开头搜索模式,而search搜索整个字符串。 我们将使用搜索操作。

 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) 

我会解释一下代码。

用户将链接或请求文本输入到call变量中。

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

第一个条件检查call变量中是否有一个点。 字符'\'是必需的,否则模块将无法理解该字符之前是一个点。

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

在这种情况下,一切都与第一个条件相同,但是已经在验证空间。 空格表示我们有一个搜索查询。

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

然后, else依次分配用户在搜索查询中编写的所有内容(不带空格和句点)。

需要检查空间;否则,WebBrowser会打开Internet Explorer。

谢谢大家的关注! 我希望本文对某人有用。

Source: https://habr.com/ru/post/zh-CN470938/


All Articles