Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Selenium Python:单击JSON应用程序生成的链接_Python_Json_Selenium - Fatal编程技术网

Selenium Python:单击JSON应用程序生成的链接

Selenium Python:单击JSON应用程序生成的链接,python,json,selenium,Python,Json,Selenium,[艾德:也许我只是问这个?不确定--] 我正在尝试使用Selenium(Python)通过超链接导航到web数据库中的页面。一个页面返回一个表,其中包含我希望Selenium遵循的超链接。但是链接不会出现在页面的源代码中。与感兴趣的表相对应的唯一html是一个标记,指示站点正在从facet搜索中提取结果。div中有一个标记和一些搜索选项。没有别的了 同样,我可以在Firefox中查看超链接,但不能使用“查看页面源代码”或Selenium的Selenium.webdriver.Firefox().

[艾德:也许我只是问这个?不确定--]

我正在尝试使用Selenium(Python)通过超链接导航到web数据库中的页面。一个页面返回一个表,其中包含我希望Selenium遵循的超链接。但是链接不会出现在页面的源代码中。与感兴趣的表相对应的唯一html是一个标记,指示站点正在从facet搜索中提取结果。div中有一个
标记和一些搜索选项。没有别的了

同样,我可以在Firefox中查看超链接,但不能使用“查看页面源代码”或Selenium的
Selenium.webdriver.Firefox().Page\u Source
调用。相反,该调用输出的不是
标记,而是一系列定义结果格式的
标记

Selenium是否无法导航JSON应用程序的输出?或者是否有其他方法可以捕获此类应用程序的输出?谢谢,并为代码/再现性的不足表示歉意。

尝试使用JavaScript并通过运行JavaScript获得链接,例如:

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

注意:如果div是由脚本动态生成的,您可能需要在执行脚本之前隐式等待几秒钟。

我在一个使用JavaScript的网站上遇到过类似的情况(具体来说)。仅仅使用Selenium的
get\u 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等