Как я могу автоматизировать браузер для посещения 1000 страниц и запуска простой функции javascript на каждой странице?

Мне нужно загрузить 1000 URL-адресов в приложение отслеживания / отчетности (после проверки подлинности с помощью HTML-формы) и вызвать функцию повторной отправки javascript. К сожалению, нет большого количества действий, чтобы обработать все сразу, поэтому я остался с автоматизацией. Какие у меня варианты?

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

Каждая из вышеперечисленных страниц имеет функцию javascript resubmit(), запускаемую href. Как я могу автоматизировать запуск этих?

Пример:

<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 ответа

Решение

Я уже проголосовал за другие ответы, но в итоге я использовал прямой 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

Вы должны проверить PhantomJS, "безголовый WebKit с JavaScript API". Это позволяет вам запускать экземпляр браузера WebKit из командной строки и выполнять Javascript.

Возможно, вам удастся сэкономить некоторое время, используя Pjscrape, инструмент, созданный поверх PhantomJS, который может создавать паутину на нескольких страницах или брать длинный список URL-адресов (отказ от ответственности: это мой проект). Я не пробовал это с более чем 1000 URL, но я думаю, что вы могли бы сделать то, что вы описали, с помощью следующих 6 строк:

pjs.addSuite({
    urls: [...], // your very long list here
    scraper: function() {
        window.resubmit();
    }
});

Я бы использовал 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

Я не знаю, поможет ли это тебе, но ты можешь попробовать Фейк. Я думаю, что это позволит вам автоматизировать отправку формы и сделать цикл.

Другие вопросы по тегам