Help us understand the problem. What is going on with this article?

Ruby + selenium + stone + 認証プロキシ

stoneを使ったseleniumの認証プロキシへの接続

seleniumでluminatiの認証プロキシに接続するのが大変だったので共有します。

環境
・AWS Centos7
・言語:Ruby
・認証プロキシ:luminati

stoneというTCP/UDP転送モジュールを使って、
selenium->ブラウザ->stone(localhost:3200)->認証プロキシという順で接続に成功しました。
今回はRubyを使用していますが、「localhost:3200」にアクセスするだけなので応用が利く方法だと思います。また、stoneはwindowsでも使用できるようです。

ちなみに以下の方法を試しましたが失敗しました。
・chromeのオプションコマンドでoptions.add_argument("--proxy-auth=#{user}:#{pass}")みたいにするやつ
・Selenium::WebDriver::Proxy.newで、引数に「user:pass@host:port」みたいにするやつ

AWSにstoneをダウンロードして解凍

$ cd /usr/local/src
$ sudo wget http://www.gcd.org/sengoku/stone/stone-2.3e.tar.gz
$ sudo tar zxvf stone-2.3e.tar.gz

Makefileを書き換える

$ cd stone-2.3d-2.3.2.7/
$ sudo vi Makefile

下のほうに行くとlinux:っていうのが見えてくるので、「-D_GNU_SOURCE」を追記します。
・変更前
linux:
\$(MAKE) FLAGS="-O -Wall -DCPP='\"/usr/bin/cpp -traditional\"' -DPTHREAD -DUNIX_DAEMON -DPRCTL -DSO_ORIGINAL_DST=80 -DUSE_EPOLL \$(FLAGS)" LIBS="-lpthread \$(LIBS)" stone

・変更後
linux:
\$(MAKE) FLAGS="-O -Wall -DCPP='\"/usr/bin/cpp -traditional\"' -DPTHREAD -DUNIX_DAEMON -DPRCTL -DSO_ORIGINAL_DST=80 -DUSE_EPOLL -D_GNU_SOURCE \$(FLAGS)" LIBS="-lpthread \$(LIBS)" stone

linuxコマンドだと「a」で追記、「w!」で上書き「q!」で終了できます。

stoneファイルの作成

$ sudo make linux-ssl

これでstoneというファイルができれば成功

インストール(Pathを通す)

$ sudo cp stone /usr/local/bin/

認証情報のBase64エンコード

たとえば認証プロキシが以下の時は
・host: luminati
・port: 8080
・user: takeda
・pass: 12345678
「takeda:12345678」をBase64エンコードして「dGFrZWRhOjEyMzQ1Njc4」となります。
Base64エンコードはここからできます。
http://www.convertstring.com/ja/EncodeDecode/Base64Encode
ネットに流すのがこわい人はフリーソフトもあります。

stoneをバックグラウンドで実行

$ stone luminati:8080/proxy 3200 "Proxy-Authorization: Basic dGFrZWRhOjEyMzQ1Njc4" &

ex) $ stone host:port/proxy 3200 "Proxy-Authorization: Basic user:passをBase64エンコードしたもの" &

あとはseleniumでプロキシとして「localhost:3200」にアクセスすると、luminatiへ転送してくれるようになります。

Selenium headlessChromeの場合(例)

options = Selenium::WebDriver::Chrome::Options.new
options.add_argument('--headless')
options.add_argument("--proxy-server=localhost:3200") #stoneに接続

driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)

#何か処理#

driver.quit

参考サイト

stoneのインストール
https://doruby.jp/users/taka/entries/CentOS_stone_
https://ameblo.jp/u-kun-win/entry-11941013718.html
http://noaboutsnote.hatenablog.com/entry/centos6x_stone
stoneの使い方
http://www.gcd.org/sengoku/stone/Welcome.ja.html
http://blog.nocorica.jp/2013/11/stone-proxy-auto-auth/

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away