質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

91.02%

  • C#

    5759questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

  • CasperJS

    22questions

    CasperJSはJavaScriptで実装されたPhantomJSのユーティリティで UIテスト向けのJavaScript フレームワークです。

casperjsでスクレイピングする際のページロードができない

受付中

回答 0

投稿

  • 評価
  • クリップ 0
  • VIEW 141

yaira

score 2

前提・実現したいこと

ミラティブという生放送配信サイトのコメントを棒読みちゃんと連携させ読み上げてさらに指定した文字列(予約します)があれば予約リストに予約者の名前が載るというものをC#とcasperjsを使って作っています。(運営からの許可はいただいています)
今回そのプログラムにウィンドウに表示されているボタンを押したときに予約者の一覧を表示する機能を追加しようとしています。

発生している問題・エラーメッセージ

ボタンを押したときにページをスクレイピングしに行くのですがそのスクレイピングがうまくいっていないらしく以下のようになってしまいます失敗したスクレイピング

該当のソースコード

//前略
        public MainWindow()
        {
            InitializeComponent();
            //棒読みちゃんに接続
            BouyomiChan = new BouyomiChanClient();

            _backgroundWorker = new BackgroundWorker();
            _backgroundWorker.DoWork += OnDoWork;
            _backgroundWorker.RunWorkerCompleted += OnRunWorkerCompleted;

            _backgroundWorker2 = new BackgroundWorker();
            _backgroundWorker2.DoWork += OnDoWork2;

            this.DataContext = this;
        }

        void OnRunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            //Thread.Sleep(2000);
            _backgroundWorker.RunWorkerAsync();
        }

        void OnDoWork(object sender, DoWorkEventArgs e)
        {
            // ここは別スレッド。
            var worker = sender as BackgroundWorker;
            if (worker == _backgroundWorker)
            {

                    // System.IO.Directory.SetCurrentDirectory(@"");
                    //Processオブジェクトを作成
                    System.Diagnostics.Process p = new System.Diagnostics.Process();

                    //出力をストリームに書き込むようにする
                    p.StartInfo.UseShellExecute = false;
                    p.StartInfo.RedirectStandardOutput = true;
                    //OutputDataReceivedイベントハンドラを追加
                    p.OutputDataReceived += p_OutputDataReceived;

                    p.StartInfo.FileName =
                       @".\cmd\bin\casperjs.exe";
                    p.StartInfo.RedirectStandardInput = false;
                    p.StartInfo.CreateNoWindow = true;
                    p.StartInfo.Arguments = @"commentreader.js --cookies-file=cookie.txt  --output-encoding=sjis " + sURL;

                    Console.WriteLine(System.IO.Directory.GetCurrentDirectory());
                    string appPath = System.Reflection.Assembly.GetExecutingAssembly().Location;
                    Console.WriteLine(appPath);
                    //起動
                    p.Start();

                    //非同期で出力の読み取りを開始
                    p.BeginOutputReadLine();

                    p.WaitForExit();
                    p.Close();

                    Console.ReadLine();
            }
        }
        /// <summary>
        /// リスト表示用のバックグラウンドワーカー
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void OnDoWork2(object sender, DoWorkEventArgs e)
        {
            // ここは別スレッド。
            var worker2 = sender as BackgroundWorker;
            if (worker2 == _backgroundWorker2)
            {

                // System.IO.Directory.SetCurrentDirectory(@"");
                //Processオブジェクトを作成
                System.Diagnostics.Process p = new System.Diagnostics.Process();

                //出力をストリームに書き込むようにする
                p.StartInfo.UseShellExecute = false;
                p.StartInfo.RedirectStandardOutput = true;
                //OutputDataReceivedイベントハンドラを追加
                p.OutputDataReceived += p_OutputDataReceived;

                p.StartInfo.FileName =
                   @".\cmd\bin\casperjs.exe";
                p.StartInfo.RedirectStandardInput = false;
                p.StartInfo.CreateNoWindow = true;
                p.StartInfo.Arguments = @"namelist.js --cookies-file=cookie.txt  --output-encoding=sjis " + sURL + namelist;

                Console.WriteLine(System.IO.Directory.GetCurrentDirectory());
                string appPath = System.Reflection.Assembly.GetExecutingAssembly().Location;
                Console.WriteLine(appPath);
                //起動
                p.Start();

                //非同期で出力の読み取りを開始
                p.BeginOutputReadLine();

                p.WaitForExit();
                p.Close();

                Console.ReadLine();
            }
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            sURL = URL.Text;
            _backgroundWorker.RunWorkerAsync();
        }

//後略
<Window x:Class="mirrativ_readcomment.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:mirrativ_readcomment"
        mc:Ignorable="d"
        Title="MainWindow"  Width="575" Height="570">
    <Grid>
        <StackPanel>
            <DockPanel Height="30">
                <Button DockPanel.Dock="Right" Width="100" Click="Button_Click"></Button>
                <TextBox x:Name="URL"></TextBox>
            </DockPanel>

            <StackPanel Orientation="Horizontal">
                <StackPanel Margin="30" Orientation="Horizontal">
                    <TextBox Width="160" Text="{Binding Path=name1}"/>
                    <Button Width="50" Name="d_name1" Click="dName_Click"></Button>
                </StackPanel>

                <StackPanel Margin="30" Orientation="Horizontal">
                    <TextBox Width="160" Text="{Binding Path=name2}">

                    </TextBox>
                    <Button Width="50" Name="d_name2" Click="dName_Click"></Button>
                </StackPanel>
            </StackPanel>

            <StackPanel Orientation="Horizontal">
                <StackPanel Margin="30" Orientation="Horizontal">
                    <TextBox Width="160" Text="{Binding Path=name3}">

                    </TextBox>
                    <Button Width="50" Name="d_name3" Click="dName_Click"></Button>
                </StackPanel>

                <StackPanel Margin="30" Orientation="Horizontal">
                    <TextBox Width="160" Text="{Binding Path=name4}">

                    </TextBox>
                    <Button Width="50" Name="d_name4" Click="dName_Click"></Button>
                </StackPanel>
            </StackPanel>

/*同じものが12個続いているだけなので中略*/
         <StackPanel Margin="30" Orientation="Horizontal">
                    <TextBox Width="160" Text="{Binding Path=name12}">

                    </TextBox>
                    <Button Width="50" Name="d_name12" Click="dName_Click"></Button>
                </StackPanel>
            <Button Name="list" Click="list_Click">予約者リスト表示</Button>
        </StackPanel>
    </Grid>
</Window>
"use strict";


var casper = require('casper').create();
casper.options.waitTimeout = 1000000;
casper.userAgent('Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.99 Safari/537.36');



var url = casper.cli.get(0);
var namelist = casper.cli.get(1);

casper.start(url, function() {
    casper.then(function() {
    this.fillSelectors('#app',{
        'input':  namelist,
    },true);
    casper.capture('test.png')//ここでとったスクリーンショットが上の写真になります。
    });
});

casper.run();

以上となります。わかる方ご教示お願いします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 91.02%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • C#

    5759questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

  • CasperJS

    22questions

    CasperJSはJavaScriptで実装されたPhantomJSのユーティリティで UIテスト向けのJavaScript フレームワークです。