以前作ったスクレイピングアプリなのだが、ChromeからURLをコピペして…実行し、ということを延々と行っていた。
s51517765.hatenadiary.jp
この本を読んでいたら、クリップボードのテキストを取得する方法が載っているのを見つけました。
退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング
- 作者: Al Sweigart,相川愛三
- 出版社/メーカー: オライリージャパン
- 発売日: 2017/06/03
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (5件) を見る
もしかしたら、C#でもできるんじゃないか?と思い調べたら、もちろんできたので紹介します。
これを組み込めば、
①Chromeで必要なPageを探す。
②①のURLをコピー
③スクレイピングアプリをアクティブに
④クリップボードの中身をペースト
⑤ボタンクリックで必要な情報ゲット!
という工程が、
①Chromeで必要なPageを探す。
②①のURLをコピー
③ボタンクリックで必要な情報ゲット!
とすることができます。
ボタンクリックも省略することも可能ですが、必要なURLを取得しているかどうか確認する必要があるので、やりすぎは逆効果になることもあると思い今回は組み込みません。
ボタンクリックの時にクリップボードの中身を取得し、web取得を走らせることもできるが、ここでは、クリップボードにURLが取り込まれたらアプリにURLを入力するようにしました。
このためには定期的にクリップボードを確認し、URLが取り込まれたら、URL boxに取り込み、アプリをアクティブにする、というようにします。
(省略しますが、URLであるかどうかをクリップボードのテキストが"http"で始まるかどうかを確認することでURL以外では動作させないということもできます。)
これにはタイマーイベントを利用します。
Visual StudioのForm1.cs[デザイン]のツールボックスから、Timerコンポーネントを追加すします。
デザイン画面のフォーム外にタイマーコンポーネントが追加されるので、タイマーコンポーネントをダブルクリックします。
すると、タイマーイベント private void timer1_Tick() が作成されます。
Form1_Loadでtimer1を起動し、Intervalをセットします。これが、クリップボードのチェック間隔になります。
Form1起動時に、クリップボードの中身を取得し、初期化。これを変数”clp_text0”としました。
timer1_Tick()がInterval毎に実行され、クリップボードの中身が変化していれば、textBoxURLに中身をテキストで入力されます。
bool check_clp というbool型変数を設定し、一度しか実行されないようにします。これをつけないと何度も起動されてしまいます。
異なるURLを連続して取得したいので、テキストの取得が完了したら、この変数は初期化します。
private void Form1_Load(object sender, EventArgs e) { InitializeComponent(); string clp_text0; bool check_clp=false; timer1.Interval = 1000; //タイマーインターバル timer1.Start(); clp_text0 = Clipboard.GetText(); //クリップボードの中身を取得、初期化 } private void timer1_Tick(object sender, EventArgs e) { if (clp_text0 != Clipboard.GetText()&&check_clp==false) { textBoxURL.Text(Clipboard.GetText()); check_clp = true; this.TopMost = !this.TopMost; //フォームを最前面に } }