我正在尝试使用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.即,只有一个窗口句柄,引文窗口的句柄不可用。为什么会出现这种情况,如何进入该窗口及其页面源?
答案 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
来查找具有这些类名的元素。