【问题标题】:Is it possible to download an YAML contained in a webpage using Page Objects / Capybara / Selenium Webdriver?是否可以使用 Page Objects / Capybara / Selenium Webdriver 下载网页中包含的 YAML?
【发布时间】:2015-05-06 16:23:17
【问题描述】:

我有一个只显示 YAML 文件的网页。 无论如何我可以得到那个 YAML 文件,这样我就可以使用黄瓜项目(使用 Page Object、Capybara 和 Selenium Webdriver 并且它在 Ruby 中)保存它。

谢谢

【问题讨论】:

  • 看起来有点矫枉过正。假设这是可能的,您是否不必解析 HTML 后下载?有没有办法直接从应用程序而不是通过网站获取这些数据?
  • 不,我获得此信息的唯一方法是访问此网页。我想知道的是,是否有一种方法可以提取 YAML,而不仅仅是带有空格的 html 文本,这样我就不需要将它解析回 YAML。
  • 我没有看到 HTML 代码。所以很难回答你的问题。但是您可以获取具有 YAML 的元素的 innerText,然后对其进行解析。您可以使用 Selenium 执行 Javascript 以获取 HTML 页面上元素的 innextText
  • 好的,我刚刚解决了,我会发布解决方案:)
  • 该网页是包含恰好是 YAML 格式的文本的 HTML 页面,还是浏览器正在转换为 HTML 页面的 YAML 文件?如果是后者,您可以使用类似open-uri 的方式直接下载 YAML 文件。

标签: ruby selenium-webdriver cucumber capybara


【解决方案1】:

所以,我只需要获取正文并将其内容保存到 YAML 文件中。

body = @browser.find_element(:tag_name => 'body')
f = File.new "#{path}/info.yml"
f.write body.text

【讨论】:

    【解决方案2】:

    您可以直接下载 YAML 文件,而不是在浏览器中查看 YAML 文件,然后必须从 HTML 中解析出 YAML:

    1. 确定 YAML 文件的位置
    2. 使用 Open-URI 下载文件

    假设页面有一个指向 YAML 文件的链接,例如:

    <a href="invoice.yaml" id="invoice">Invoice Number</a>
    

    然后您可以下载文件并将其保存到磁盘:

    require 'capybara'
    require 'open-uri'
    
    # Specify where to save the file
    save_location = 'C:\some\file\path\name.yaml'
    
    # Go to the page that has the link to the YAML file
    page = Capybara::Session.new(:selenium)
    page.visit('http://www.your_page.com')
    
    # Determine the location of the YAML file
    yaml_link = page.find('#invoice')
    yaml_location = yaml_link['href']
    
    # Save the file to disk
    File.open(save_location, "w") do |file|
      file.puts open(yaml_location).read
    end
    

    【讨论】:

      猜你喜欢
      • 2019-12-17
      • 1970-01-01
      • 2013-04-28
      • 1970-01-01
      • 2011-12-30
      • 2013-09-12
      • 2012-06-19
      • 2012-06-28
      • 2014-01-10
      相关资源
      最近更新 更多