2

我需要在跟踪/报告应用程序上加载 1000 个 url(在通过 HTML 表单进行身份验证后)并触发“重新提交”javascript 函数。不幸的是,没有批量操作可以一次处理,所以我只剩下自动化了。我有哪些选择?

http://domain.com/0001.php
http://domain.com/0002.php
http://domain.com/0003.php
...
http://domain.com/1000.php

上述每个页面都有一个由 href 触发的 resubmit() javascript 函数。我怎样才能自动触发这些?

例子:

<form action="/resubmit" method="POST">
  <input type="hidden" name="security_token" value="SUPER-LONG-HASH">
  <input type="hidden" name="url" value="http://mysite.com/0001.html">
  <input type="hidden" name="redirect" value="long-string">
  <script type="text/javascript">
    window["resubmit"] = function () {
      document["resubmit"].submit();
      return false;
    }
  </script>
  <a href="javascript:resubmit()" class="resubmit-class">resubmit</a>
</form>

我在 Mac 上。Unix、Perl、Bash、PHP、Automator、FireFox iMarcos 都可用。

4

4 回答 4

3

我已经对其他答案投了赞成票,但最后我还是直接使用了 AppleScript。这很有帮助,因为它使用了现有会话,因此我不必处理任何身份验证问题。谢谢大家的帮助。我期待熟悉您共享的工具。

set thePath to (path to desktop as Unicode text) & "list_of_urls.txt"
set theFile to (open for access file thePath)
set theContent to (read theFile)
close access theFile

set theURLs to every paragraph of theContent

tell application "Safari"
    repeat with theURL in theURLs
        make new document
        set URL of front document to theURL
        delay 5
        set theScript to "document.getElementsByClassName('resubmit-class')[0].click();"
        do JavaScript theScript in current tab of first window
        do JavaScript "window.resubmit()" in front document
        delay 5
        close front document
    end repeat
end tell
于 2011-10-31T16:20:11.710 回答
3

您应该查看PhantomJS,“带有 JavaScript API 的无头 WebKit”。它允许您从命令行运行 WebKit 浏览器实例并执行 Javascript。

您可能可以使用Pjscrape来节省一些时间,这是一个构建在 PhantomJS 之上的工具,可以抓取多个页面或获取一长串 URL(免责声明:这是我的项目)。我还没有尝试过 1,000 多个 URL,但我认为您可以使用以下 6 行来执行您所描述的操作:

pjs.addSuite({
    urls: [...], // your very long list here
    scraper: function() {
        window.resubmit();
    }
});
于 2011-10-28T00:33:21.553 回答
2

我会为此使用 Ruby+ Watir。示例代码(未测试):

require "watir-webdriver"
browser = Watir::Browser.new :firefox

urls = ["http://domain.com/0001.php", "http://domain.com/0002.php"] # add more URLs here
urls.each do |url|
  browser.goto url
  browser.a(:text => "resubmit").click
end
于 2011-10-28T09:50:58.513 回答
1

我不知道这是否会对您有所帮助,但您可以尝试Fake。我认为它可以让您自动提交表单并进行循环。

于 2011-10-29T06:08:28.477 回答