让Selenium适用于任何浏览器?

Ang*_*gio 5 python selenium wxpython selenium-webdriver

我正在尝试编译一些我用Python和库Selenium编写的代码.但是,Selenium会指定要使用的浏览器

例如

driver = webdriver.Firefox()
Run Code Online (Sandbox Code Playgroud)

因此,如果我将程序编译成.exe或其他形式的可执行文件,然后将其运行到没有Firefox的计算机中,它将无法正常工作.那么有没有办法告诉Selenium只使用默认浏览器?或者有一种方法让我在同一个程序文件夹上有一个可移植版本的Firefox(有点像Tor Bundle那样)所以它有效吗?

我想到了创建一堆嵌套的try/excepts并以这种方式尝试每个可能的浏览器的解决方案,但我认为可能有更好的方法.

编辑:如果有人指出我在wxPython窗口中显示selenium的一般方向,我也将不胜感激.

Yi *_*eng 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
Run Code Online (Sandbox Code Playgroud)

第一步可能很棘手,Windows 上的 C# 可以通过注册表进行。不确定如何用 Python 编码或如何处理 Linux/Mac 等其他系统。

但是,您的想法最终不会按预期工作,因为 Selenium 版本需要与浏览器版本匹配。

例如,如果你的程序中有 Selenium 2.40.0,但有些用户使用 Firefox Nightly(即 FF30),那么它就不起作用,因为 Selenium 目前不支持 FF30。

Chrome 也是如此,不同版本的 ChromeDriver 支持不同版本的 Chrome。您如何知道需要包含哪个 ChromeDriver?ChromeDriver 2 支持 Chrome 27 及以上版本,每个版本都有更具体的版本要求,请参阅此处的发行说明。如果有人使用 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)
Run Code Online (Sandbox Code Playgroud)