none
public sub にすればブラウザをいちいち立ち上げなくて済む? RRS feed

  • 質問

  • QAサイトに時間指定で自動投稿するしくみをVBAで作って、順調に動いてくれています。

    ただ、時間が来るたびにログインをいちいちしないといけないのです。End Sub ごとにログインがリセットされてしまうようです。

    そこでOnTime(時刻設定)は標準モジュールに書き込んで、テキストの投稿プロシージャはクラスモジュールに組んで、Public Sub 設定にすれば End Sub ごとにログインがリセットされてしまう事態を避けられるでしょうか?

    2021年1月5日 22:26

すべての返信

  • その「QAサイト」の管理者に許可をもらってますか?

    クローラを作ってどこかの図書館のサイトにアクセスしたら業務妨害とかで逮捕された事例もあります。

    2021年1月6日 0:14
  • どうして許可が要るのかわかりません。図書館のあの事件はぜんぜん違う事例です。法的なことは心得ていますので、どうかこちらの質問に絞っての技術的回答をお願いしたいのですが。

    2021年1月6日 7:19
  • > どうして許可が要るのかわかりません。

    あなたのサイトならあなたの勝手ですが、赤の他人のサイトであれば話は別ということが理解できませんか? 許可を得てないという時点であなたに協力してくれる人は多くはないと思いますよ。人に迷惑を及ぼすかもしれないことに協力する気は少なくとも私はないです。

    2021年1月6日 7:33
  • 犯罪者を支援したとしてほう助罪に問われたくない、という保身です。私もSurferOnWwwさんに同意見です。
    2021年1月6日 9:46
  • 完全合法の行為について犯罪者呼ばわりですか。個人情報をここで晒すつもりはありません。

    2021年1月6日 15:48
  • > 完全合法の行為について犯罪者呼ばわりですか。

    「完全合法」だそうですが、あなたは弁護士か何かで十分な法的知識をもとにそう言ってるのですか? 絶対違いますよね。あなたの勝手な判断では?

    合法か否かはちょっと置いとくとしても、あなたがクローラを作って他人のサイトにアクセスしたら、そのサイトの保有者・管理者・利用者に迷惑を及ぼす可能性はあるはず。そこのところは理解できませんか? 理解できるなら許可を得る必要があることも理解できるはず。

    そこ理解できないとすると、自分さえよければ良いと思っている自分本位な人なんだろうと、少なくとも私の尺度ではそう思わざるを得ません。
    2021年1月7日 1:15
  • 他の投稿を見る限りでは外部公開されているサイトに対しての自動投稿と思われますが、
    極端な例ですが1分間に100回、200回あるいはそれ以上の投稿となったら十分に迷惑行為になりますよね?
    何回以下であればよいということでもないのでそのサイトの管理者に許可を得てからするべきなのは当然でしょう。

    自身が管理しているサイトに自動投稿で継続してアクセスされ、負荷があがったら妨害行為とみなすでしょう。
    アメリカのサイトに投稿しているようですが、該当サイトを管轄している州法に熟知しているのですか?
    こういった行為の場合、被害を受ける可能性があるサイトの管理者からの視点で考えるべきであり、そういったことを考えると「完全に合法」と言い切ること自体に危険性を感じます。

    2021年1月7日 8:50
  • 貴殿のいうところの VBA とは、Excel の VBA のことだと思って良いのですね? その前提で回答します。

    ただ、時間が来るたびにログインをいちいちしないといけないのです。End Sub ごとにログインがリセットされてしまうようです。

    一連の質問を見ていると、理論をすっ飛ばして試行錯誤で作業しているかのように見えるのですが、「現在の方法でうまくいかない理由」を調査したうえで、作業を進めていますか?

    それを明らかにしないまま新しい方法を闇雲に試しても、それが目的に合うものなのかも分かりませんし、仮に目的を達成できたとしても、それが「本来は望ましくない方法で実装されている」という可能性もあるわけです。

    …ということで、先に確認しておきたいのですが、ログイン情報が何故リセットされしまうのかは、調査されているのでしょうか?

    たとえば、一定時間が経過して「サーバー側でセッション タイムアウトとして破棄された」パターンもあれば、「ユーザー操作ではなく自動操作であると判定されて切断された」パターンもあれば、「モジュールレベル変数とローカル変数を取り違えていた」といった変数の寿命や有効範囲の勘違いによるパターンや、「同じブラウザーセッションを使いまわすつもりだったが、WebDriver の管理ミスにより、毎回新たなセッションを作るコードになっている」といったパターンも考えられます。

    それぞれの理由によって、必要な対策も変わってくることでしょう。

    そこでOnTime(時刻設定)は標準モジュールに書き込んで、テキストの投稿プロシージャはクラスモジュールに組んで、Public Sub 設定にすれば End Sub ごとにログインがリセットされてしまう事態を避けられるでしょうか?

    そもそも、標準モジュールとクラスモジュールの違いや用途を理解したうえでの施策なのでしょうか。

    『ログインがリセットされてしまう理由』も不明ですが、それ以前に、現在の実装がどのようになっているのかも示されていていないため、クラスモジュールを使うことが解決策になるのかも判断できません。(見当違いの方向に向かっているような気がします…)

    回り道に感じるかもしれませんが、まずは「投稿プロシージャー」や「クラスモジュール」の件の前に、現在の理解度を確認させてください。

    呼び出すたびに、 +1 された数字が MsgBox に表示されるような「Public Sub Example()」プロシージャーを実装することはできますか? (いろいろなやり方があります)

    この Example プロシージャーを下記のように登録した場合には、5 秒後に「1」、10秒後に「2」と表示されるような実装にするということです。

    Application.OnTime Now + TimeValue("00:00:10"), "Example"
    Application.OnTime Now + TimeValue("00:00:05"), "Example"

    ※Example1 と Example2 と別々に用意するわけではなく、1 つのプロシージャーを複数回登録するということです。

    単純なカウント数の管理のコードを組めない状態だとすれば、ログイン情報の維持も当然できないでしょうから、念のための確認です。(クラスモジュールの使い方を教えるにしても、現状の理解度が分からないと、どこから伝えれば良いのか判断できませんので)

    QAサイトに時間指定で自動投稿するしくみ

    他の方も心配されていますが、自作プログラムから自動投稿するのであれば、サイト運営者に許可は取りましょうね…?

    特に、知識や経験が不足している場合には、プログラムのミスや仕様の誤解によって、相手側に迷惑をかけてしまう恐れもあるわけですから。

    プログラムからのアクセスを許容しているシステムの場合、接続用の Web API が用意されていることがあります。たとえば、Twitter、StackOverflow、駅すぱあと、Google Map、Redmine、GitHub などには API が用意されています。

    API が用意されている場合はそちらを利用するようにすべきですので、まずは開発者向けの機能として提供されていないか確認してみてください。

    API が無い場合には、ブラウザー制御などで自動アクセスすることになるわけですが、それを許容してもらえるかは管理者・運営者側次第です。全然気にしないので OK だと言われることもあるでしょうし、悪いけどお断りさせてくださいと言われることもあるでしょう。あるいは、投稿頻度などに制限を課した上での条件付きでの許可がおりるかもしれません。

    拒否される理由は様々ですが……たとえば「広告」を貼ってあるサイトの場合、自作アプリから自動投稿されてしまうと、広告内容が利用者の目に留まることがないため、サイトの運営側としては望ましくない利用方法と言えますよね(同様の理由で、ブラウザーからの手動アクセスであっても、広告ブロッカーは使わないでほしいと明示されているサイトがあったりします)。

    そのほか、HTML ページ中に <meta name="robots" content="noindex"> があるサイトや、HTTP Response Header にて X-Robots-Tag が付与されているページなども無人アクセスしないようにしましょう。




    2021年1月7日 10:30