5

私はphantomjs、Javaスクリプト、およびWebScraping全般に不慣れです。私がやりたいことは、基本的な http 認証であり、別の URL にアクセスして情報を取得します。これが私が今まで持っているものです。私が間違っていることを教えてください。

var page = require('webpage').create();
var system = require('system');

page.onConsoleMessage = function(msg) {
   console.log(msg);
};

page.onAlert = function(msg) {
   console.log('alert!!>' + msg);
};

page.settings.userName = "foo";
page.settings.password = "bar";

page.open("http://localhost/login", function(status) {
    console.log(status);
    var retval = page.evaluate(function() {
       return "test";
    });
    console.log(retval);

    page.open("http://localhost/ticket/" + system.args[1], function(status) {
        if ( status === "success" ) {
            page.injectJs("jquery.min.js");
            var k = page.evaluate(function () {
                var a = $("div.description > h3 + p");

                if (a.length == 2) {
                    console.log(a.slice(-1).text())
                } 
                else {
                    console.log(a.slice(-2).text())
                }
            //return document.getElementById('addfiles');
            });

        }
    });
    phantom.exit();
});

このファイルに引数を渡します: 2 番目の URL に追加されるチケット番号です。

4

1 に答える 1

8

これにはCasperJSを強くお勧めします。

CasperJS は、Javascript で記述され、スクリプト可能なヘッドレス WebKit エンジンである PhantomJS に基づいた、オープン ソースのナビゲーション スクリプトおよびテスト ユーティリティです。完全なナビゲーション シナリオを定義するプロセスを容易にし、次のような一般的なタスクを実行するための便利な高レベル関数、メソッド、構文シュガーを提供します。

  • ブラウジング ナビゲーション ステップの定義と順序付け
  • フォームの入力と送信
  • リンクをクリックしてたどる
  • ページ (またはその一部) のスクリーンショットをキャプチャする
  • リモート DOM のテスト
  • イベントのロギング
  • バイナリを含むリソースのダウンロード
  • 機能テスト スイートを作成し、結果を JUnit XML として保存する
  • Web コンテンツのスクレイピング

(CasperJS の Web サイトより)

私は最近、PhantomJS だけでログイン フォームへの入力や次のページへの移動などを実行できるように 1 日を費やしました。

CasperJS には、フォーム用に構築された優れた API もあります。

http://docs.casperjs.org/en/latest/modules/casper.html#fill

var casper = require('casper').create();

casper.start('http://some.tld/contact.form', function() {
    this.fill('form#contact-form', {
        'subject':    'I am watching you',
        'content':    'So be careful.',
        'civility':   'Mr',
        'name':       'Chuck Norris',
        'email':      'chuck@norris.com',
        'cc':         true,
        'attachment': '/Users/chuck/roundhousekick.doc'
    }, true);
});

casper.then(function() {
    this.evaluateOrDie(function() {
        return /message sent/.test(document.body.innerText);
    }, 'sending message failed');
});

casper.run(function() {
    this.echo('message sent').exit();
});
于 2013-02-07T17:24:10.367 に答える