AppleScript 从网页特定部分的 URL 保存文档
AppleScript saving documents from urls from particular part of webpage
我正在尝试编写一个AppleScript,该脚本从网页的特定部分(表格)保存和下载所有网址,并将它们保存到文件夹中。所有链接都是链接到Youtube的pdf或视频。我想从中获取链接的表格是按周、日期和材料组织的。我想要一个包含所有周的文件夹,然后在里面是每个日期的文件夹,以及包含该日期材料的另一个文件夹。(我的资料/周/日期/材料)例如
<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
问题是你是想学习如何做,还是只是想让别人给你一个完整的脚本?我可以帮助前者而不是后者。
要学习如何编写脚本,您需要了解您要实现的目标以及用于完成工作的工具。
您必须学习或理解的三件事才能解决您正在处理的问题:Applescript,Javascript和文档对象模型。
JS和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。
我很想向您展示一个工作示例,但"表格"包含的内容不足以给出一个工作示例。链接到底在哪里?
那么,让我们做一个工作示例
<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 文档的第一个元素的链接,其类名是示例(0 是 Javascript 中的第一个)。我们通过转到 1 来移动到下一个 a:
document.getElementsByClassName('example')[0].getElementsByTagName('a')[1].href;
这不是用于解决您的问题的方法,但这是您需要前进的一个很好的例子。
你可以在这里阅读更多关于用Javascript导航DOM的信息,或者很多地方,只需谷歌一下。
苹果脚本
您使用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 列表中,或者在制作文件夹时可能重复抓取数据,等等......这真的取决于你作为编码员。
最后,您需要保存文件,并且很可能希望通过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)
这显然不是一个完整的解决方案,但会让你朝着正确的方向前进。
- Java脚本将URL转换为已保存的URL时出错
- GWT:在浏览器中保存URL'的书签部分
- 将从 URL 输出的 JSON 保存到文件 javascript
- 从图像URL javascript html保存图像文件
- Javascript-将谷歌趋势url中的数据保存到PHP数组中
- Angular ui路由器,通过url/url变量保存状态
- 正在将数据URL(base64)保存到PhoneGap(android)上的文件中
- 如何使用javascript从url下载图像并将其保存到本地目录
- 如何将JPEG从URL保存到angularjs(ionic)文件中
- 保存表单数据并使用所述表单数据重定向到适当的URL
- AppleScript 从网页特定部分的 URL 保存文档
- 使用 document.links 将当前页面上的 URL 保存在插件 sdk 中
- Backbone.js将当前URL保存到历史记录中
- 将图像url保存到Mysql数据库
- 使用CloudCode从Parse.com中的URL保存图像
- 在提交IFRAME表单之前,请将父url保存到隐藏字段
- 试图用HTML5文件系统将画布PNG数据url保存到磁盘,但当我作为url检索时,它's无效
- 如何使用Javascript从Parse.com中的URL保存文件
- 如何使用Phonegap fileTransfer从URL保存文件
- BackboneJS使用不同的URL保存模型(创建/更新)