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

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

新規登録して質問してみよう
ただいま回答率
85.49%
C#

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

CasperJS

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

Q&A

0回答

317閲覧

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

yaira

総合スコア8

C#

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

CasperJS

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

0グッド

0クリップ

投稿2017/11/29 03:41

###前提・実現したいこと
ミラティブという生放送配信サイトのコメントを棒読みちゃんと連携させ読み上げてさらに指定した文字列(予約します)があれば予約リストに予約者の名前が載るというものをC#とcasperjsを使って作っています。(運営からの許可はいただいています)
今回そのプログラムにウィンドウに表示されているボタンを押したときに予約者の一覧を表示する機能を追加しようとしています。
###発生している問題・エラーメッセージ
ボタンを押したときにページをスクレイピングしに行くのですがそのスクレイピングがうまくいっていないらしく以下のようになってしまいます失敗したスクレイピング

###該当のソースコード

MainWindow.xaml.cs

1 2 3//前略 4 public MainWindow() 5 { 6 InitializeComponent(); 7 //棒読みちゃんに接続 8 BouyomiChan = new BouyomiChanClient(); 9 10 _backgroundWorker = new BackgroundWorker(); 11 _backgroundWorker.DoWork += OnDoWork; 12 _backgroundWorker.RunWorkerCompleted += OnRunWorkerCompleted; 13 14 _backgroundWorker2 = new BackgroundWorker(); 15 _backgroundWorker2.DoWork += OnDoWork2; 16 17 this.DataContext = this; 18 } 19 20 void OnRunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) 21 { 22 //Thread.Sleep(2000); 23 _backgroundWorker.RunWorkerAsync(); 24 } 25 26 void OnDoWork(object sender, DoWorkEventArgs e) 27 { 28 // ここは別スレッド。 29 var worker = sender as BackgroundWorker; 30 if (worker == _backgroundWorker) 31 { 32 33 // System.IO.Directory.SetCurrentDirectory(@""); 34 //Processオブジェクトを作成 35 System.Diagnostics.Process p = new System.Diagnostics.Process(); 36 37 //出力をストリームに書き込むようにする 38 p.StartInfo.UseShellExecute = false; 39 p.StartInfo.RedirectStandardOutput = true; 40 //OutputDataReceivedイベントハンドラを追加 41 p.OutputDataReceived += p_OutputDataReceived; 42 43 p.StartInfo.FileName = 44 @".\cmd\bin\casperjs.exe"; 45 p.StartInfo.RedirectStandardInput = false; 46 p.StartInfo.CreateNoWindow = true; 47 p.StartInfo.Arguments = @"commentreader.js --cookies-file=cookie.txt --output-encoding=sjis " + sURL; 48 49 Console.WriteLine(System.IO.Directory.GetCurrentDirectory()); 50 string appPath = System.Reflection.Assembly.GetExecutingAssembly().Location; 51 Console.WriteLine(appPath); 52 //起動 53 p.Start(); 54 55 //非同期で出力の読み取りを開始 56 p.BeginOutputReadLine(); 57 58 p.WaitForExit(); 59 p.Close(); 60 61 Console.ReadLine(); 62 } 63 } 64 /// <summary> 65 /// リスト表示用のバックグラウンドワーカー 66 /// </summary> 67 /// <param name="sender"></param> 68 /// <param name="e"></param> 69 void OnDoWork2(object sender, DoWorkEventArgs e) 70 { 71 // ここは別スレッド。 72 var worker2 = sender as BackgroundWorker; 73 if (worker2 == _backgroundWorker2) 74 { 75 76 // System.IO.Directory.SetCurrentDirectory(@""); 77 //Processオブジェクトを作成 78 System.Diagnostics.Process p = new System.Diagnostics.Process(); 79 80 //出力をストリームに書き込むようにする 81 p.StartInfo.UseShellExecute = false; 82 p.StartInfo.RedirectStandardOutput = true; 83 //OutputDataReceivedイベントハンドラを追加 84 p.OutputDataReceived += p_OutputDataReceived; 85 86 p.StartInfo.FileName = 87 @".\cmd\bin\casperjs.exe"; 88 p.StartInfo.RedirectStandardInput = false; 89 p.StartInfo.CreateNoWindow = true; 90 p.StartInfo.Arguments = @"namelist.js --cookies-file=cookie.txt --output-encoding=sjis " + sURL + namelist; 91 92 Console.WriteLine(System.IO.Directory.GetCurrentDirectory()); 93 string appPath = System.Reflection.Assembly.GetExecutingAssembly().Location; 94 Console.WriteLine(appPath); 95 //起動 96 p.Start(); 97 98 //非同期で出力の読み取りを開始 99 p.BeginOutputReadLine(); 100 101 p.WaitForExit(); 102 p.Close(); 103 104 Console.ReadLine(); 105 } 106 } 107 108 private void Button_Click(object sender, RoutedEventArgs e) 109 { 110 sURL = URL.Text; 111 _backgroundWorker.RunWorkerAsync(); 112 } 113 114//後略 115

MainWindow.xaml

1<Window x:Class="mirrativ_readcomment.MainWindow" 2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 4 xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 5 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 6 xmlns:local="clr-namespace:mirrativ_readcomment" 7 mc:Ignorable="d" 8 Title="MainWindow" Width="575" Height="570"> 9 <Grid> 10 <StackPanel> 11 <DockPanel Height="30"> 12 <Button DockPanel.Dock="Right" Width="100" Click="Button_Click"></Button> 13 <TextBox x:Name="URL"></TextBox> 14 </DockPanel> 15 16 <StackPanel Orientation="Horizontal"> 17 <StackPanel Margin="30" Orientation="Horizontal"> 18 <TextBox Width="160" Text="{Binding Path=name1}"/> 19 <Button Width="50" Name="d_name1" Click="dName_Click"></Button> 20 </StackPanel> 21 22 <StackPanel Margin="30" Orientation="Horizontal"> 23 <TextBox Width="160" Text="{Binding Path=name2}"> 24 25 </TextBox> 26 <Button Width="50" Name="d_name2" Click="dName_Click"></Button> 27 </StackPanel> 28 </StackPanel> 29 30 <StackPanel Orientation="Horizontal"> 31 <StackPanel Margin="30" Orientation="Horizontal"> 32 <TextBox Width="160" Text="{Binding Path=name3}"> 33 34 </TextBox> 35 <Button Width="50" Name="d_name3" Click="dName_Click"></Button> 36 </StackPanel> 37 38 <StackPanel Margin="30" Orientation="Horizontal"> 39 <TextBox Width="160" Text="{Binding Path=name4}"> 40 41 </TextBox> 42 <Button Width="50" Name="d_name4" Click="dName_Click"></Button> 43 </StackPanel> 44 </StackPanel> 45 46/*同じものが12個続いているだけなので中略*/ 47         <StackPanel Margin="30" Orientation="Horizontal"> 48 <TextBox Width="160" Text="{Binding Path=name12}"> 49 50 </TextBox> 51 <Button Width="50" Name="d_name12" Click="dName_Click"></Button> 52 </StackPanel> 53 <Button Name="list" Click="list_Click">予約者リスト表示</Button> 54 </StackPanel> 55 </Grid> 56</Window> 57

namelist.js

1"use strict"; 2 3 4var casper = require('casper').create(); 5casper.options.waitTimeout = 1000000; 6casper.userAgent('Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.99 Safari/537.36'); 7 8 9 10var url = casper.cli.get(0); 11var namelist = casper.cli.get(1); 12 13casper.start(url, function() { 14 casper.then(function() { 15 this.fillSelectors('#app',{ 16 'input': namelist, 17 },true); 18 casper.capture('test.png')//ここでとったスクリーンショットが上の写真になります。 19 }); 20}); 21 22casper.run();

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問