[艾德:也许我只是问这个?不确定 - Capture JSON response through Selenium]
我正在尝试使用Selenium(Python)通过超链接导航到Web数据库中的页面。一个页面返回一个表格,其中包含我希望Selenium遵循的超链接。但链接不会出现在页面的源代码中。唯一对应于感兴趣的表的html是一个标记,表示该网站正在从方面搜索中提取结果。 div中有一个<script type="application/json">
标记和一些搜索选项。没别了。
同样,我可以在Firefox中查看超链接,但不能使用“查看页面源”或Selenium的selenium.webdriver.Firefox().page_source
调用。相反,该调用不会输出<script>
标记,而是输出一系列似乎定义结果格式的<div>
标记。
Selenium无法导航JSON应用程序的输出吗?或者是否有其他方法来捕获此类应用程序的输出?谢谢,并为缺乏代码/再现性而道歉。
答案 0 :(得分:2)
尝试使用Unity's API并通过运行JavaScript来获取链接,例如:
driver.execute_script("document.querySelector('div#your-link-to-follow').click();")
注意:如果 div 是由脚本动态生成的,您可能需要在执行脚本之前隐式等待几秒钟。
答案 1 :(得分:1)
我在使用JavaScript的网站上遇到类似情况(http://ledextract.ces.census.gov具体)。我使用Selenium的get_element()
方法运气好。关键是,即使不是关于超链接的所有内容都出现在页面的源代码中,Selenium通常也能够通过导航到网站来找到它,因为这样做会引发产生附加链接的JavaScript。
因此,例如,您可以尝试将鼠标悬停在链接上,查找其标题,然后使用:
driver.find_element_by_xpath("//*[@title='Link Title']").click()
基于鼠标悬停在链接上显示的标题。
或者,您可以根据其上显示的文字找到链接:
driver.find_element_by_partial_link_text('Link Text').click()
或者,如果您对链接的ID有所了解,可以使用:
driver.find_element_by_id('Link_ID').click()
如果您对所需链接的文本,标题,ID等感到茫然,那么有点生硬的回答是尝试从网站上提取每个元素的ID,文本和标题然后将其保存到您可以查找的文件中,以识别您想要的链接的可能候选者。这应该会显示出更多(在某些方面),而不仅仅是网站的源代码:
AllElements = driver.find_elements_by_xpath('//*')
for Element in AllElements:
print 'ID = %s TEXT = %s Title =%s' %(Element.get_attribute("id"), Element.get_attribute("text"), Element.get_attribute("title"))
注意:如果您有或怀疑您有多个链接具有相同标题/文本等的情况,那么您可能希望使用find_elements(复数)方法获取所有这些的列表满足您的标准,更明确地指定xpath等。