如何使用 selenium firefox geckodriver 自动激活 Flash 插件?

Posted

技术标签:

【中文标题】如何使用 selenium firefox geckodriver 自动激活 Flash 插件?【英文标题】:How to automate the activation of Flash plug-in using selenium firefox geckodriver? 【发布时间】:2020-09-12 17:17:35 【问题描述】:

当我尝试使用带有 Selenium 的自动 python 脚本打开带有 flash 的页面时,我到达下图中的页面。而且我不能通过。

它是运行 Ubuntu 16.04 的远程服务器,无法访问显示器或键盘/鼠标。

Python版本:3.5.2

硒版本:3.14.1

壁虎司机 0.26.0

遵循我的代码:

import pyvirtualdisplay
print ("pyvirtualdisplay Display Version: %s" % (pyvirtualdisplay.__version__))
from selenium import webdriver
print ("Selenium webdriver Version: %s" % (webdriver.__version__))

display = pyvirtualdisplay.Display(visible=0, size=(800, 600))
display.start()

profile = webdriver.FirefoxProfile()
profile.native_events_enabled = False
profile.set_preference("plugin.state.flash", 2)
profile.set_preference("dom.ipc.plugins.enabled.libflashplayer.so","true")
driver = webdriver.Firefox(profile)
driver.set_page_load_timeout(60)
url = 'https://www.ultrasounds.com/US.html'
driver.get(url)

driver.close()
driver.quit()
display.stop()
quit()

这是输出:

Python 3.5.2 (default, Apr 16 2020, 17:47:17)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pyvirtualdisplay
>>> print ("pyvirtualdisplay Display Version: %s" % (pyvirtualdisplay.__version__))
pyvirtualdisplay Display Version: 0.2.4
>>> from selenium import webdriver
>>> print ("Selenium webdriver Version: %s" % (webdriver.__version__))
Selenium webdriver Version: 3.14.1
>>>
>>> display = pyvirtualdisplay.Display(visible=0, size=(800, 600))
>>> display.start()
<Display cmd_param=['Xvfb', '-br', '-nolisten', 'tcp', '-screen', '0', '800x600x24', ':1001'] cmd=['Xvfb', '-br', '-nolisten', 'tcp', '-screen', '0', '800x600x24', ':1001'] oserror=None return_code=None stdout="None" stderr="None" timeout_happened=False>
>>>
>>> profile = webdriver.FirefoxProfile()
>>> profile.native_events_enabled = False
>>> profile.set_preference("plugin.state.flash", 2)
>>> profile.set_preference("dom.ipc.plugins.enabled.libflashplayer.so","true")
>>> driver = webdriver.Firefox(profile)

>>> driver.set_page_load_timeout(60)
>>> url = 'https://www.ultrasounds.com/US.html'
>>> driver.get(url)
>>>
>>>
>>> import pyautogui
>>> im1 = pyautogui.screenshot('flash_activation_page.jpg')
>>> driver.close()
>>> driver.quit()
>>> display.stop()
<Display cmd_param=['Xvfb', '-br', '-nolisten', 'tcp', '-screen', '0', '800x600x24', ':1001'] cmd=['Xvfb', '-br', '-nolisten', 'tcp', '-screen', '0', '800x600x24', ':1001'] oserror=None return_code=0 stdout="" stderr="" timeout_happened=False>
>>>

【问题讨论】:

尝试右键单击 Flash 激活页面上的某些内容。是否有“检查元素”选项?如果是这样,请单击它。我敢打赌浏览器会生成自己的 DOM。 我无法点击,我在此服务器上没有鼠标/键盘/显示器。我只能通过python来检查。 尝试使用 PyMousepyAutoGUI 发送点击。 【参考方案1】:

使用Firefox >= 69,您将无法做到这一点:

始终激活 Adob​​e Flash 插件的设置已在 火狐 69。见this compatibility document 了解详情。


Flash Player 不再总是被激活

发布时间:2019 年 6 月 15 日

分类:Plug-ins

发布:Firefox 69

说明

作为正在进行的Flash plug-in support deprecation 的一部分,Firefox 69 已从页面通知对话框中删除了“始终激活”选项,并从附加组件管理器中删除了“记住此决定”选项。这意味着,从现在开始,Firefox 将在每次浏览器会话期间询问用户是否要在网站上显示 Flash 内容,并且用户将无法更改此行为。

在撰写本文时,根据Firefox Public Data Report,只有一半的 Firefox 用户安装了 Flash Player,并且数量正在稳步下降。鉴于 2020 年 Firefox 和其他浏览器将取消对 Flash 的支持,如果您的网站仍依赖任何 Flash 内容(包括旧版视频播放器),我们强烈建议您尽快制定迁移计划。

【讨论】:

@vc.One 感谢!

以上是关于如何使用 selenium firefox geckodriver 自动激活 Flash 插件?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 Python 使用 GeckoDriver 和 Firefox 使 Selenium 脚本无法检测?

如何使用 Geckodriver 在 Selenium 中禁用 Firefox 登录?

Selenium:如何使用 firefox 和 python 禁用图像加载?

如何在 Python 中使用 Selenium 在 Firefox 中禁用 Flash?

如何在 Firefox 58++ 上使用 PHP Webdriver for Selenium 下载文件

如何解决日志信息在 selenium 项目中使用 `new FirefoxOptions()` 优于 `DesiredCapabilities.firefox()`