我正在尝试使用 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
来查找具有这些类名称的元素。
关于javascript - Selenium:弹出窗口未显示在窗口句柄中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46918625/