我使用 Selenium WebDriver 开发了一个应用程序来打开一些页面。它在本地工作得很好,但我还需要在客户端启动浏览器。
我使用
Apache2
under
Ubuntu 18
部署了应用程序。
driver = webdriver.Chrome(executable_path="chromedriver",chrome_options=chromeOptions)
# Specify the URL.
url = "www.google.com"
driver.get(url)
在客户端使用 Selenium 和 WebDriver 打开浏览器,主要的问题是 WebDriver 需要在客户端系统上安装并配置浏览器驱动程序(例如 ChromeDriver)。
由于你不能依赖每个客户端都正确配置了 WebDriver,所以更好的方法是在服务器端运行 Selenium 和 WebDriver,并将浏览器操作的结果发送到客户端。
这里有一些方法可以实现:
1. 使用虚拟显示器:
-
在服务器端安装
xvfb
等虚拟显示器。 - 配置 Selenium 使用虚拟显示器运行浏览器。
from selenium import webdriver
from pyvirtualdisplay import Display
# 启动虚拟显示器
display = Display(visible=0, size=(800, 600))
display.start()
# 配置 ChromeDriver
options = webdriver.ChromeOptions()
options.add_argument("--no-sandbox")
# 创建 WebDriver 实例
driver = webdriver.Chrome(executable_path="chromedriver", options=options)
# 你的浏览器操作代码...
# 关闭虚拟显示器
display.stop()
2. 使用无头浏览器:
- 使用 Chrome 或 Firefox 的无头模式,它们不需要图形界面。
from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_argument('headless')
driver = webdriver.Chrome(executable_path="chromedriver", options=options)
# 你的浏览器操作代码...
3. 使用远程 WebDriver 协议:
- 在服务器上运行 Selenium Server。
- 客户端连接到 Selenium Server 并发送命令。
from selenium import webdriver
# Selenium Server 地址
driver = webdriver.Remote(
command_executor='http://localhost:4444/wd/hub',
desired_capabilities={'browserName': 'chrome'})
# 你的浏览器操作代码...
将结果发送到客户端:
你可以使用以下方法将浏览器操作的结果发送到客户端:
-
截取屏幕截图:
使用
driver.save_screenshot()
保存屏幕截图,并将其发送到客户端。 -
提取 HTML 内容:
使用
driver.page_source
获取网页的 HTML 内容,并将其发送到客户端。 - 使用 WebSockets 或 Server-Sent Events: 建立实时连接,并将浏览器操作的结果逐步发送到客户端。
请注意:
- 确保服务器上有足够的资源来运行浏览器实例。
- 在生产环境中,建议使用 Selenium Grid 等工具来管理多个浏览器实例。
- 考虑使用 Playwright 或 Puppeteer 等更轻量级的浏览器自动化工具。
选择最适合你的需求和技术栈的方法。
标签:python,selenium,selenium-webdriver From: 53560799