如何让Selenium与任意浏览器兼容?

6 投票
2 回答
3115 浏览
提问于 2025-04-17 22:04

我正在尝试编译一些用Python和Selenium库写的代码。不过,Selenium需要你指定要使用哪个浏览器。

比如:

driver = webdriver.Firefox()

所以,如果我把这个程序编译成.exe文件或者其他可执行的格式,然后在没有Firefox的电脑上运行,它就会不工作。那么有没有办法让我告诉Selenium使用默认浏览器呢?或者有没有办法让我在同一个程序文件夹里放一个便携版的Firefox(就像Tor Bundle那样),这样它就能正常工作?

我想到了一个解决方案,就是创建一堆嵌套的try/except语句,尝试每一个可能的浏览器,但我觉得可能还有更好的办法。

补充:如果有人能告诉我如何在wxPython窗口中显示Selenium,我会很感激。

2 个回答

0

BrowserStackSauceLabs 这样的云解决方案可以帮你解决很多麻烦。你可以从任何连接到互联网的电脑上运行测试,这些测试会在远程的虚拟机上运行不同的浏览器。

2

一种可能的思路是:

  1. 首先找出系统默认的浏览器是什么
  2. 然后在你的Selenium代码中,使用一个切换语句,比如:

browser = get_default_browser_name()

if browser = firefox
    then launch firefox
if browser = chrome
    then launch chrome
if browser = ie
    then launch ie

第一步可能有点棘手,因为在Windows上用C#可以通过注册表来获取。不太确定在Python中怎么写,或者在其他系统如Linux/Mac上怎么处理。

不过,你的想法最终可能无法如你所愿,因为Selenium的版本需要和浏览器的版本匹配。

举个例子,如果你的程序中使用的是Selenium 2.40.0,但有些用户用的是Firefox Nightly(也就是FF30),那么就会出问题,因为Selenium目前不支持FF30。

Chrome也是一样,不同版本的ChromeDriver支持不同版本的Chrome。你怎么知道需要包含哪个ChromeDriver呢?ChromeDriver 2支持27及以上版本的Chrome,每个版本都有更具体的要求,详细信息可以查看这里的发布说明。如果有人用的是Chrome 26或更低版本,那就麻烦了。

我建议你包含自己的便携版Firefox,然后在启动浏览器时指定它的路径。

from selenium import webdriver
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary

binary = FirefoxBinary('path/to/binary')
driver = webdriver.Firefox(firefox_binary=binary)

撰写回答