51Testing软件测试论坛

标题: selenium3.x 踏坑记 [打印本页]

作者: 测试积点老人    时间: 2018-12-18 15:38
标题: selenium3.x 踏坑记
有好长一段时间没有用selenium了。最近想用来做个web自动化的小工具。根据以往经验,firefox是不需要下载driver的。启动firefox. 立即抛出一个异常。
  1. selenium.common.exceptions.WebDriverException: Message: 'geckodriver' executable needs to be in PATH
复制代码

搜索得知:
1. selenium 3.x开始,webdriver/firefox/webdriver.py的init中,executable_path=”geckodriver”;而2.x是executable_path=”wires”
2. firefox 47以上版本,需要下载第三方driver

有没搞错,firefox也需要装driver了!

windows
下载解压后将getckodriver.exe复制到Firefox的安装目录下,
设置path,或者:
  1. from selenium.webdriver.firefox.firefox_profile import FirefoxProfile
  2. driver = webdriver.Firefox(executable_path="C:\Program Files (x86)\Mozilla Firefox\geckodriver.exe")
复制代码

mac:
可以用: brew install geckodriver
或者下载
把解压缩后的文件放到/usr/local/bin里面
  1. from selenium import webdriverfrom selenium.webdriver.firefox.firefox_binary import FirefoxBinary
  2. binary = FirefoxBinary('/Applications/Firefox.app/Contents/MacOS/firefox-bin')
  3. browser = webdriver.Firefox(firefox_binary=binary)
复制代码

Chrome就不用说了,直接下载一个driver, 一般直接放在python的路径下,找起来方便。

有的时候,加载图片,CSS等很慢,其实我们并不需要都加载完全,可以禁止掉
那么代码可以写成这样。

  1. from selenium import webdriver
  2. import site
  3. from selenium.webdriver.chrome.options import Options
  4. from selenium.webdriver.firefox.firefox_profile import FirefoxProfile
  5. def get_python_location(self):
  6.         return site.getsitepackages()[0]

  7.     def get_driver(self):
  8.         if os.path.exists(os.path.join(self.get_python_location(), 'chromedriver.exe')):
  9.             chrome_options = Options()
  10.             chrome_options.add_experimental_option("prefs", {'profile.manage_default_content_settings.images': 2})
  11.             driver = webdriver.Chrome(os.path.join(self.get_python_location(), 'chromedriver.exe'), chrome_options=chrome_options)
  12.         else:
  13.             firefoxProfile = FirefoxProfile()
  14.             firefoxProfile.set_preference('permissions.default.stylesheet', 2)
  15.             firefoxProfile.set_preference('dom.ipc.plugins.enabled.libflashplayer.so', 'false')
  16.             firefoxProfile.set_preference('permissions.default.image', 2)
  17.             driver = webdriver.Firefox(firefoxProfile,executable_path="C:\Program Files (x86)\Mozilla Firefox\geckodriver.exe")
  18.         return driver
复制代码

用phantomjs也可以,直接这样:

  1. driver = webdriver.PhantomJS(service_args=['--load-images=false'])
复制代码

这样,加载速度就可以快很多了。








欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2