【问题标题】:Selenium Python: clicking links produced by JSON applicationSelenium Python:单击 JSON 应用程序生成的链接
【发布时间】:2015-04-29 01:35:21
【问题描述】:

[ Ed:也许我只是在问这个?不确定——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 应用程序的输出?还是有其他方法可以捕获此类应用程序的输出?谢谢,并为缺乏代码/再现性道歉。

【问题讨论】:

    标签: python json selenium


    【解决方案1】:

    尝试使用execute_script() 并通过运行 JavaScript 获取链接,例如:

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

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

    【讨论】:

      【解决方案2】:

      我在一个使用 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,等等。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-31
        • 1970-01-01
        • 2021-01-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多