AppleScript从网页的特定部分保存网址中的文档

时间:2014-12-31 04:42:37

标签: javascript html applescript

我正在尝试编写一个AppleScript,用于保存和下载网页特定部分(表格)中的所有网址并将其保存到文件夹中。所有链接都是pdf或链接到Youtube的视频。我希望从中获取链接的表格按周,日期和材料进行组织。我想要一个包含所有周的文件夹,然后里面将是每个日期的文件夹,另一个文件夹包含该日期的材料。 (的MyStuff /周/日/材料) e.g。

<div class="table">
<div class="row"> 
  <div class="topcell">Week </div>
  <div class="topcell">Date</div>
  <div class="topcell">Material</div>
</div>
</div>  <!-- end table-->

从某些研究中我发现有些人在实现中使用JavaScript来打开文档? http://macscripter.net/viewtopic.php?id=20287我尝试使用类似的东西,但无法编译。

我对此非常陌生,所以任何帮助都将不胜感激! :)

到目前为止我所拥有的:

tell application "Finder"
    set p1 to path to user/Desktop
    make new folder at p with properties {name:"AllMaterial"}
    --Make AllMaterial Folder--

    set p2 to path to user/Desktop/AllMaterial 
    repeat with i from 1 to 18
        make new folder at p2 with properties {name:"Week" + i}
        --Make all the weeks--

        --in each week, make 3 days--
        set p3 to path3 to user/Desktop/AllMaterial/"Week" + i 
        repeat with j from 1 to 3
            make new folder at p2 with properties {name:"Day" + j}
        end repeat
    end repeat
        --Make all the days--
end

set siteURL to "XXX"

tell application " Safari"
    activate
    open location siteURL
    --wait until page loaded
    if my page_loaded(20) is false then error numner - 128
        set numLinks to (do JavaScript "document.links.length" in document1)
        --(do JavaScript "document.body.table.links.length" in document1)--
        --get num of links --(doesn't account for the "table" that I want ^^. There are multiple     different links on the page )

    set count to numLinks - 1,
    set thisLink to "",
    set f to false
    repeat with i from 0 to count
        set thisLink to do JavaScript
end tell

1 个答案:

答案 0 :(得分:2)

问题是你想学习如何做,或者你只是想让某人为你提供完整的脚本?我可以帮助前者而不是后者。

要了解如何编写脚本,您需要了解您要实现的目标以及您用于完成工作的工具。

要解决您正在处理的问题,您必须学习或理解的三件事:Applescript,Javascript和文档对象模型。


JS&amp; DOM

首先,让我们处理内容,以及为什么你不能用Javascript抓住它:

    <div class="table">
     <div class="row"> 
      <div class="topcell">Week </div>
      <div class="topcell">Date</div>
      <div class="topcell">Material</div>
    </div>
   </div>  <!-- end table-->

这不是一张桌子!

这些是带有类的div,这些类以这种方式布局,使用CSS看起来像一个表。这就是您在浏览页面DOM时遇到问题的原因。

(do JavaScript "document.body.table.links.length" in document1)--
        --get num of links --(doesn't account for the "table" that I want ^^. There are multiple     different links on the page )

这不起作用,因为没有表格!

您需要从正确的位置检索链接。那里没有真正的桌子,每个都是div。

我很乐意向您展示一个有效的例子,但是&#39;表格&#39;不足以提供一个有效的例子。链接究竟在哪里?

所以,让我们做一个有效的例子

    <div class="table">
     <div class="row"> 
      <div class="topcell">Week</div>
      <div class="example">
       <a href="test">TEST</a>
      </div>
      <div class="topcell">Date</div>
      <div class="topcell">Material</div>
    </div>
   </div>  <!-- end table-->

现在我们知道链接在哪里,但你需要了解DOM ... 以下内容:

document.getElementsByClassName('example')[0].getElementsByTagName('a')[0].href;

将得到第一个文档的第一个元素的链接的href,其类名是example(0在Javascript中是第一个)。我们通过转到1:

向上移动到下一个
document.getElementsByClassName('example')[0].getElementsByTagName('a')[1].href;

这不是您的问题所使用的方法,但它是您需要前往的一个很好的例子。

您可以阅读有关使用Javascript here或大量地方浏览DOM的更多信息,只需谷歌即可。


<强> AppleScript的

你使用AppleScript的唯一原因是因为你在Mac上...你不 需要 来学习使用AppleScript来完成这项任务,但是它不会受伤。

你确实需要学会正确地做到这一点......零是正确的,你的Applescript在很多层面都是错的......

小步骤,但这里有一个类似应该

的例子
tell application "Finder"
    set p1 to (path to desktop folder) as string
    --Make AllMaterial Folder--
    try
        make new folder at p1 with properties {name:"AllMaterial"}
    on error
        --it exists! IT WILL ERROR IF THERE IS A FOLDER ALREADY
    end try

    set p2 to p1 & "AllMaterial" as string
    repeat with i from 1 to 18
        set thisfolder to make new folder at p2 with properties {name:"Week" & i as string}
        --Make all the weeks--
        --in each week, make 3 days--
        repeat with j from 1 to 3
            set thisdaysfolder to make new folder at thisfolder with properties {name:"Day" & j as string}
            ---WHILE IN THIS LOOP thisdaysfolder IS THE REFERENCE TO THE FOLDER TO SAVE IN… SO HERE IS WHERE YOU SAVE TO OR SOME ORDER OR LOGIC...
        end repeat
    end repeat
end tell

一起打字

将所有内容整合在一起制作完整的脚本取决于网站上的实际数据。

从网站获取数据的部分需要将数据存储到AppleScript列表中,或者在制作文件夹等时可能会抓取重复数据......这真的是由编码员决定的。 / p>

最后您需要保存文件,并且您很可能希望通过shell脚本和一些引用的表单使用cURL

do shell script "curl -f " & quoted form of thisURL & " -o " & quoted form of (POSIX path of savelocation) & filesname ---(this is a variable with the file name) 

这显然不是一个完整的解决方案,但会让你朝着正确的方向前进。