LoginSignup
2
2

More than 3 years have passed since last update.

【Ruby】Seleniumで露骨な人間アピール

Last updated at Posted at 2020-01-14

はじめに

seleniumを使用してサイト調査をしておりまして、
昨今のスクレイピング禁や例の図書館事件も含めビビり倒しながらの調査の私です。
問題が発生したわけではないのですが、
露骨に人間アピールをしようと思って下記のようなメソッドを作ってみました。
多分みんなやっていると思いますが。

該当ソースコード

def rndSleep
rnd = rand(5) + 1
sleep rnd.to_i
end

rand(5) + 1で1~5のランダムな数字をrudに代入して、
動作を〇秒間停止するsleepメソッド、〇秒部分に当てています。

人間アピールしたい箇所にrndSleepを入れると1~5秒おいて実行してくれます。
私は繰り返し処理の、処理開始前に一息ついてもらう感じにしてます。

while true do
    index = index + 1
    rndSleep # <= ここで一息
    begin
        news = driver.find_element(:xpath, "/html/body/div[3]/div[1]/div[2]/div[2]/div/table/tbody/tr[#{index}]/td[2]/a")
        href = news.attribute('href')
        newsUrl << href
    rescue Selenium::WebDriver::Error::NoSuchElementError
        break
    end
end

おわりに

実際にBANされたりとか、ブロックされたりはないのですが、
されたら怖いのでちょっとでも抗いたい。
中身の調査をして抜け漏れ予防したいので、負荷かけたいわけではない。
つまり共存したいのです。
なので、プログラム実行側でうまいこと負荷を分散させて、
「人間ですよ~いいコンテンツですね~たくさん回遊しちゃうな~」
的なアピールをして乗り切る必要があるのではないかと感じました。

ちなみに、要素が表示されるまで待つことにsleepメソッドを使用するのは効率が悪いので、
下記の記事を参考にしていただいた方が良いかと思います。

参考記事

seleniumで要素を待つ時にsleepを使うのはオススメしない

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2