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

Мне нужно загрузить 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 ]

3 голосов
/ 31 октября 2011

Я уже проголосовал за другие ответы, но в итоге я получил прямой 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
3 голосов
/ 28 октября 2011

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

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

pjs.addSuite({
    urls: [...], // your very long list here
    scraper: function() {
        window.resubmit();
    }
});
2 голосов
/ 28 октября 2011

Я бы использовал 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
1 голос
/ 29 октября 2011

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

...