Selenium:一个不显示在窗口句柄中的弹出窗口

时间:2017-10-24 19:31:29

标签: javascript python selenium popup window

我正在尝试使用Selenium获取关于Google学术搜索的研究论文的BibTeX条目。例如,当一个人进入this页面时,顶部纸张下面有可点击的引号图像。单击图像时,弹出引文窗口。我想使用Selenium获取该引文窗口的页面源代码。但是,我无法进入弹出窗口。

相关(至少看起来如此)上页的HTML元素如下所示:

<a href="javascript:void(0)" class="gs_or_cit gs_nph" title="Cite" role="button" aria-controls="gs_cit" aria-haspopup="true"><svg viewBox="0 0 17 16" class="gs_or_svg"><path d="M1.5 3.5v5h2v.375L1.75 12.5h3L6.5 8.875V3.5zM9.5 3.5v5h2v.375L9.75 12.5h3L14.5 8.875V3.5z"/></svg></a>

以下是我的尝试:

#!/usr/bin/python
from selenium import webdriver
import time
driver = webdriver.PhantomJS(service_args=['--ignore-ssl-errors=true', '--ssl-protocol=any'])
link = u'https://scholar.google.co.il/scholar?hl=en&as_sdt=0%2C5&q=Enhanced+Partial+Expansion+%7BA%7D&btnG=&oq=enhanced+'
driver.set_window_size(1124, 850) # Avoid the error of the element not being displayed, see https://github.com/ariya/phantomjs/issues/11637
driver.get(link)
element = driver.find_element_by_class_name('gs_or_cit') # 'gs_or_cit gs_nph' contains space and is not accepted. However, 'gs_or_cit' seems to work.
element.click()
time.sleep(5) # Enough time for sure for the citation window to appear
print len(driver.window_handles)

此代码打印出1.即,只有一个窗口句柄,引文窗口的句柄不可用。为什么会出现这种情况,如何进入该窗口及其页面源?

1 个答案:

答案 0 :(得分:1)

那不是一个窗口,它只是一个HTML对话框。您可以像对待页面上的任何其他HTML一样对待它并获取其内容。

该对话框的父元素是

<div id="gs_cit" class="gs_md_d gs_ttzi gs_vis" role="dialog" tabindex="-1" aria-labelledby="gs_cit-t" data-wfc="gs_cit-x" style="top: 253.5px;">

您可以使用ID获取它。您应该等待它可见,然后从对话框中获取您想要的内容。

关于您的代码评论,

'gs_or_cit gs_nph' contains space and is not accepted. However, 'gs_or_cit' seems to work.

这是一个复合类名...意味着它包含多个类。您可以轻松使用CSS选择器.gs_or_cit.gs_nph来查找具有这些类名的元素。

CSS Selector guide