javascript - Selenium:弹出窗口未显示在窗口句柄中

标签 javascript python selenium popup window

我正在尝试使用 Selenium 获取 Google Scholar 上一篇研究论文的 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。也就是说,只有一个窗口句柄,并且引文窗口的句柄不可用。为什么会出现这种情况?我如何才能访问该窗口及其页面源?

最佳答案

这不是一个窗口,只是一个 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

关于javascript - Selenium:弹出窗口未显示在窗口句柄中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46918625/

相关文章:

javascript - 在 Angular2 中的路由之间传递数据

javascript - 不要在循环中创建函数 no-loop-func -React JS

python - GUI 在单独的进程中触发操作

ruby-on-rails - 为什么 capybara 说节点已过时以及如何解决?

css - 如何从CSS中的webelement中找到后代Child

javascript - 查找对象中的值翻倍需要多少天

javascript - 将 Javascript 示例中的暴力 Voronoi 图转换为 Python

python - "Expected type ' Union[str, bytearray] ' got ' int ' instead"write 方法警告

python - 在 Python 2.7.3 中将字段名称分配给 numpy 数组

selenium - SELENIUM IDE 命令的完整列表