如何为 Firefox 设置 Selenium Python 环境?
我使用的是 Firefox 50、Selenium 3、Python 3.5。我尝试了很多二进制文件并在环境变量PATH等中复制geckodriver。
[在 GitHub 上查找
最新版本(或从 API )并用其替换 wget 链接。下载并安装过时的版本可能会导致“错误”行为。]
apt-get update
apt-get install firefox
pip3 install selenium==3.0.2
wget https://github.com/mozilla/geckodriver/releases/download/vX.XX.0/geckodriver-vX.XX.0-linuxXX.tar.gz -O /tmp/geckodriver.tar.gz \
&& tar -C /opt -xzf /tmp/geckodriver.tar.gz \
&& chmod 755 /opt/geckodriver \
&& ln -fs /opt/geckodriver /usr/bin/geckodriver \
&& ln -fs /opt/geckodriver /usr/local/bin/geckodriver
从可用的压缩预构建二进制文件中选择适合您的操作系统的版本。这是一个运行示例:
from selenium import webdriver
driver = webdriver.Firefox()
driver.get('http://google.com')
print(driver.title)
driver.quit()
pip install selenium
或一些IDE,如PyCharm建议安装库,只需导入Selenium)
要解决驱动程序无法连接到firefox的问题,您需要使用snap捆绑的驱动程序。
我在这里捆绑了一个准备好的示例:
https://github.com/beliaev-maksim/firefox-selenium
但是,为了快速访问这里的是conftest.py 的内容,用于快速设置驱动程序固定装置
import pytest
from selenium import webdriver
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.firefox.service import Service
@pytest.fixture(scope='session')
def driver(request):
"""Set up webdriver fixture."""
options = Options()
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
service = Service(executable_path="firefox.geckodriver")
driver = webdriver.Firefox(options=options, service=service)
driver.set_window_size(1920, 1080)
driver.maximize_window()
driver.implicitly_wait(10)
yield driver
driver.quit()
Selenium 4.6.0开始,您不需要手动安装Selenium Manager(webdriver-manager),如下所示,因为根据博客它已经包含在Selenium中
pip install webdriver-manager
并且,从Selenium 4.11.0开始,下面的代码就足够了,因为Selenium Manager可以自动发现您机器中安装的浏览器版本,然后可以根据博客自动下载合适的驱动程序版本:
from selenium import webdriver
driver = webdriver.Firefox()
此外,下面的示例可以使用 Chrome、Selenium、pytest-django 和 Django 来测试 Django Admin。 *我的回答解释了如何使用多个Headless浏览器(Chrome、Microsoft Edge和Firefox)、Selenium、pytest-django和Django测试Django Admin:
# "tests/test.py"
import pytest
from selenium import webdriver
from django.test import LiveServerTestCase
@pytest.fixture(scope="class")
def firefox_driver_init(request):
firefox_driver = webdriver.Firefox()
request.cls.driver = firefox_driver
yield
firefox_driver.close()
@pytest.mark.usefixtures("firefox_driver_init")
class Test_URL_Firefox(LiveServerTestCase):
def test_open_url(self):
self.driver.get(("%s%s" % (self.live_server_url, "/admin/")))
assert "Log in | Django site admin" in self.driver.title
或者:
# "tests/conftest.py"
import pytest
from selenium import webdriver
@pytest.fixture(scope="class")
def firefox_driver_init(request):
firefox_driver = webdriver.Firefox()
request.cls.driver = firefox_driver
yield
firefox_driver.close()
# "tests/test.py"
import pytest
from django.test import LiveServerTestCase
@pytest.mark.usefixtures("firefox_driver_init")
class Test_URL_Firefox(LiveServerTestCase):
def test_open_url(self):
self.driver.get(("%s%s" % (self.live_server_url, "/admin/")))
assert "Log in | Django site admin" in self.driver.title