如何让Selenium与任意浏览器兼容?
我正在尝试编译一些用Python和Selenium库写的代码。不过,Selenium需要你指定要使用哪个浏览器。
比如:
driver = webdriver.Firefox()
所以,如果我把这个程序编译成.exe文件或者其他可执行的格式,然后在没有Firefox的电脑上运行,它就会不工作。那么有没有办法让我告诉Selenium使用默认浏览器呢?或者有没有办法让我在同一个程序文件夹里放一个便携版的Firefox(就像Tor Bundle那样),这样它就能正常工作?
我想到了一个解决方案,就是创建一堆嵌套的try/except语句,尝试每一个可能的浏览器,但我觉得可能还有更好的办法。
补充:如果有人能告诉我如何在wxPython窗口中显示Selenium,我会很感激。
2 个回答
像 BrowserStack 或 SauceLabs 这样的云解决方案可以帮你解决很多麻烦。你可以从任何连接到互联网的电脑上运行测试,这些测试会在远程的虚拟机上运行不同的浏览器。
一种可能的思路是:
- 首先找出系统默认的浏览器是什么
- 然后在你的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)