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

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

ただいまの
回答率

91.35%

  • C#

    4765questions

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

  • CasperJS

    22questions

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

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

受付中

回答 0

投稿 2017/11/29 12:41

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

yaira

score 1

前提・実現したいこと

ミラティブという生放送配信サイトのコメントを棒読みちゃんと連携させ読み上げてさらに指定した文字列(予約します)があれば予約リストに予約者の名前が載るというものを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.35%

関連した質問

  • 受付中

    wpf xaml frame

    ボタンが複数個あって、押したボタンに応じて遷移先が異なる挙動を実装したいです。 <Grid Grid.Row="1" Grid.Column="0"> <Frame Sourc

  • 受付中

    JSONのデータをtextboxと相互にBindしたいです。

    こんにちは。  Windows10でWPFのアプリケーションを開発しています。  Visual Studio 2015 Communityを使っています。  前提・実現し

  • 解決済

    ContextMenuのハイライト非表示

    前提・実現したいこと こんにちは WPFでボタン押すとContextMenuの中にカレンダーが表示され、 年月を選択できる物を作っています。 カレンダー選択まではう

  • 解決済

    WPF(MVVM)、Prism+ReactivePropertyの環境でDataGird上のセルの値...

    環境 Visual Studio 2017 WPF(C#) .Net Framework 4.6.2 Prism.Core 6.3.0 (NuGetよりインストール) Re

  • 受付中

    WPFでawait Task.RunにしたらSTAエラーになっています

    こんにちは。  Windows10でWPFのアプリケーションを開発しています。  Visual Studio 2015 Communityを使っています。  前提・実現したいこ

  • 解決済

    WPF ボタンを判断するビヘイビアに関して

    お世話になっております。 現在、ListBox内のアイテムをUp, Downボタン操作で並べ替える実装を行っております。 How to move item in listBox u

  • 受付中

    VB.NET 一覧表示 検索機能

    今VB.netでBMIの計算機を作る課題がありましてその中で分からない部分があります ①そのプログラムで名前などの情報を入れてその入れた情報の一覧の確認ができる ② ①で入力した情

  • 解決済

    ListBox(WPF)で各アイテムに連番を与える方法

    お世話になっております。 行いたいこと ListBoxのitemに連番を振りたいと思っています。 ListBoxの並び替え(過去の質問)機能を実装しているので、順番が変われば値

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

  • C#

    4765questions

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

  • CasperJS

    22questions

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