不能使用带有硒的镀铬按钮

Posted

技术标签:

【中文标题】不能使用带有硒的镀铬按钮【英文标题】:Cannot use chrome cast button with selenium 【发布时间】:2017-07-23 20:23:18 【问题描述】:

我正在尝试使用 Selenium 将 youtube 视频投射到我的 chromecast。当我通常在 chrome 中打开 youtube 时,我会看到投射按钮,它工作正常。当我用 Selenium 打开它时,缺少投射按钮,当我从菜单中选择投射时,它给我一个错误“找不到投射目的地。需要帮助吗?”

我正在使用 python,并尝试了许多标志与 webdriver 的组合。这是我所拥有的

options = webdriver.ChromeOptions()

options.add_argument('--user-data-dir=./ChromeProfile')
options.add_argument('--disable-session-crashed-bubble')
options.add_argument('--disable-save-password-bubble')
options.add_argument('--disable-permissions-bubbles')
options.add_argument('--bwsi')
options.add_argument('--load-media-router-component-extension')
options.add_argument('--enable-video-player-chromecast-support');

excludeList = ['disable-component-update',
  'ignore-certificate-errors',
]
options.add_experimental_option('excludeSwitches', excludeList)

chromedriverPath = '/my/path/to/chromedriver'
driver = webdriver.Chrome(chromedriverPath, chrome_options=options)

path = 'https://www.youtube.com/watch?v=Bz9Lza059NU'
driver.get(path);
time.sleep(60) # Let the user actually see something!
driver.quit()

【问题讨论】:

您能给我们提供cast button 的快照以了解它的确切位置吗?谢谢 投射按钮是指用于投射到 chromecast 的图标,它位于 youtube 视频底部的全屏图标旁边,看起来像这样images.anandtech.com/doci/7186/… 【参考方案1】:

我想出了如何让它工作。这似乎需要两个步骤。将我的默认配置文件复制到 selenium 的某个地方可以使用它,并找出打开 chrome 时要使用的正确标志。关键是 selenium 自动添加了一堆我不想要的标志,所以我不得不排除一个。

首先要找出我的个人资料存储在哪里,我打开了 chrome 到这个 url chrome://version/

这给了我很多信息,但重要的是

命令行: /usr/lib/chromium-browser/chromium-browser --enable-pinch --flag-switches-begin --flag-switches-end

配置文件路径: /home/mdorrell/.config/chromium/Default

首先我将我的个人资料复制到 Selenium 可以使用的某个目录

cp -R /home/mdorrell/.config/chromium/Default/* /home/mdorrell/ChromeProfile

然后我在 selenium 打开的浏览器中打开了同一页面,并从 Command Line 行中获取了 selenium 添加的标志列表。最终给我带来问题的是--disable-default-apps

最后我需要添加的代码看起来像这样

options = webdriver.ChromeOptions()

# Set the user data directory
options.add_argument('--user-data-dir=/home/mdorrell/ChromeProfile')

# get list of flags selenium adds that we want to exclude
excludeList = [
  'disable-default-apps',
]
options.add_experimental_option('excludeSwitches', excludeList)

chromedriverPath = '/my/path/to/chromedriver'
driver = webdriver.Chrome(chromedriverPath, chrome_options=options)

path = 'https://www.youtube.com/watch?v=Bz9Lza059NU'
driver.get(path);
time.sleep(60) # Let the user actually see something!
driver.quit()

【讨论】:

是否需要添加用户数据目录?【参考方案2】:

感谢@MikeD 分享您的答案。

当我想通过 selenium 浏览器(使用 RSelenium)对 R Shiny Dashboard 进行 chrome 投射时,我遇到了同样的问题。如果我点击 Cast,它会显示“找不到 Cast 目的地。需要帮助?”,而在普通浏览器中它可以正常工作。

在我的情况下,它在排除两个开关(包括 ChromeProfile 不是必需的)后工作,在 R 中可以这样做:

library(RSelenium)

options <- list()
options$chromeOptions$excludeSwitches <- list('disable-background-networking',
                                              'disable-default-apps')

rD <- rsDriver(verbose = FALSE, port = 4570L, extraCapabilities = options)

【讨论】:

以上是关于不能使用带有硒的镀铬按钮的主要内容,如果未能解决你的问题,请参考以下文章

带有硒的 Firefox 空白网页浏览器

Django我不能在模式中为每个带有ajax的字段添加按钮

使用角形和镀铬禁用自动填充/自动完成

硒的数据安全性

带有三个按钮的 iOS 推送通知警报

带有 ViewFlipper 的 onTouchListener 不能立即工作