我无法解析页面并获取链接 Nokogiri

I can't parse the page and get links Nokogiri

我无法通过 Nokogiri 解析获得链接列表,https://chromedriver.storage.googleapis.com/index.html?path=79.0.3945.36/

我做错了什么?

links = Nokoiri::HTML('https://chromedriver.storage.googleapis.com/index.html?path=79.0.3945.36/')

links = Nokoiri::XML('https://chromedriver.storage.googleapis.com/index.html?path=79.0.3945.36/')

--->

#(Document:0x3fcdda1b988c {
  name = "document",
  children = [
    #(DTD:0x3fcdda1b5b24 { name = "html" }),
    #(Element:0x3fcdda1b46fc {
      name = "html",
      children = [
        #(Element:0x3fcdda1b0804 {
          name = "body",
          children = [
            #(Element:0x3fcdda1ac920 {
              name = "p",
              children = [ #(Text "https://chromedriver.storage.googleapis.com/index.html?path=79.0.3945.36/")]
              })]
          })]
      })]
  })
puts links.to_html
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body><p>https://chromedriver.storage.googleapis.com/index.html?path=79.0.3945.36/</p></body></html>
=> nil

这是行不通的,因为整个页面都是用 JavaScript 创建的。文档的正文只包含一个脚本标签。打开页面源代码或查看原始响应,而不仅仅是查看网络 inspector/developer 工具中呈现的 DOM。

view-source:https://chromedriver.storage.googleapis.com/index.html?path=79.0.3945.36/

Nokogiri 只是一个 HTML 解析器而不是浏览器,因此不是 运行 JavaScript。虽然您可以使用像 phantom.js 这样的无头浏览器,但您可能只想寻找一个 API 来提供您想要的数据。网络抓取工具通常是任何问题的错误答案。

我找到了一个更有趣的解决方案 )) 例如: link_driver = Nokogiri::HTML(page.source).at('a:contains("mac")').values.join('') chromedriver_storage_page = 'https://chromedriver.storage.googleapis.com/' File.new('filename.zip', 'w') << URI.parse(chromedriver_storage+link).read

contains("mac")可以改成contains("linux")或者contains("win"),没关系,选择任意版本的操作系统

和 2 解决方案 - 解析页面 chromedriver.chromium.org 并获取有关所有版本的信息。如果网站上的版本比我的更新,那么我用新行中的版本号代替下载
chromedriver_storage = 'https://chromedriver.storage.googleapis.com/'
chromedriver = '79.0.3945.36/' - 开始使用 Capybara 并仅削减版本
zip = 'chromedriver_mac64.zip'
link = chromedriver_storage+chromedriver+zip File.new('filename.zip', 'w') << URI.parse(link).read

原来解析器,在headless模式下,可以插入crontab任务来更新当前浏览器的版本