单击动态加载的菜单与python phantomjs

时间:2017-06-20 15:55:39

标签: python html selenium phantomjs

我想从下面的youtube视频中获取成绩单(我知道有一种方法可以获得cc字幕,如果有的话,但通常不会这样。)

我使用phantomjs在python中执行此操作。

url = 'https://www.youtube.com/watch?v=wOn8xawC-HQ'

phantom_driver = webdriver.PhantomJS(executable_path="./phantomjs-2.1.1- macosx/bin/phantomjs")

phantom_driver.get(url)

只有在点击"更多..."我可以访问的按钮:

phantom_driver.find_element_by_id('action-panel-overflow-button').click()

...这会创建一个div复合类"yt-uix-menu-content yt-ui-menu-content yt-uix-kbd-nav yt-uix-menu-content-hidden",其中包含一个由<ul>组成的菜单,其中包含4个元素。

我需要点击这四个元素中的一个来打开成绩单框(具体来说,我需要点击带有复合类"yt-ui-menu-item has-icon yt-uix-menu-close-on-select action-panel-trigger action-panel-trigger-transcript"的按钮)。

然而,正在运行

phantom_driver.find_element_by_class_name('action-panel-trigger-transcript').click()

不起作用,因为该元素似乎仍然隐藏(Element is not currently visible and may not be manipulated)。

我相信我需要的是点击&#34;更多......&#34;按钮,然后直接单击打开的菜单。

我在选择的菜单上查看this post,在点击后使用html查看了this one。也没有解决我的问题。

我的脚本中缺少什么?我是否需要&#34;刷新&#34;点击后检索到的html?

1 个答案:

答案 0 :(得分:0)

“action-panel-overflow-button”是按钮ID而不是名称。 您可以通过它的xpath

单击此元素

这很好用:

phantom_driver.find_element_by_xpath('//*[@id="action-panel-overflow-button"]').click()
phantom_driver.find_element_by_xpath('//*[@class="yt-ui-menu-item has-icon yt-uix-menu-close-on-select action-panel-trigger action-panel-trigger-transcript"]').click()