2015-04-29 25 views
2

[编辑:也许我只是问这个?不知道 - Capture JSON response through Selenium]硒蟒:点击JSON应用产生的链接

我想使用Selenium(Python)通过超链接导航到Web数据库中的页面。一页返回一个带有超链接的表格,我希望Selenium遵循。但链接不会出现在页面的源代码中。与感兴趣的表格对应的唯一html是一个标签,指示该网站正在从小平面搜索中拉取结果。在div内有一个<script type="application/json">标签和一些搜索选项。没有其他的。

同样,我可以在Firefox中查看超链接,但不能使用“查看页面源”或Selenium的selenium.webdriver.Firefox().page_source调用。相反,该调用不会输出<script>标记,而会输出一系列<div>标记,这些标记似乎可以定义结果的格式。

Selenium无法导航JSON应用程序的输出?还是有另一种方法来捕获这些应用程序的输出?谢谢,并且对缺少代码/可重复性表示歉意。

回答

2

尝试使用execute_script()和运行JavaScript,像得到链接:

driver.execute_script("document.querySelector('div#your-link-to-follow').click();") 

:如果DIV由脚本动态生成的,你可能需要之前隐含等待几秒钟执行脚本。

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等内容感到不知所措,有点直率的反应是试图将每个元素的标识,文本和标题关闭该网站,然后将其保存到一个文件,您可以查找以确定您想要的链接的可能候选人。这应该告诉你一个不只是该网站的源代码,很多(在某些方面)将:

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等。