driver$open() の前に、プロキシをブラウザセッションのケーパビリティとして渡します。WebDriver サーバーがセッションプロトコルを受け付ける RSelenium 配備での例です:

browser_proxy <- list(
  proxyType = 'manual',
  httpProxy = 'proxy.example:8080',
  sslProxy = 'proxy.example:8080'
)

driver <- RSelenium::remoteDriver(
  remoteServerAddr = 'webdriver.example',
  port = 4444L,
  browserName = 'chrome',
  extraCapabilities = list(proxy = browser_proxy)
)
driver$open()

remoteServerAddr は WebDriver サービスを指定します。ケーパビリティはブラウザが次にどこへ向かうかを表します。R 側の HTTP プロキシ設定だけでは、そのブラウザの経路は構成されません。

host:port は httpProxy と sslProxy に指定します。後者は HTTPS の宛先を選ぶもので、TLS で保護されたプロキシリスナーを意味しません。HTTP プロキシ一覧の公開 HTTP 候補は、ブラウザのホストから到達できる限り、これらの項目にホストとポートを与えます。

先に起きたのはどちらの失敗か

セッションの開始が拒否されたら、プロキシのエンドポイントを変える前にプロトコルの互換性を確認します。RSelenium の remoteDriver のソースは旧式の desiredCapabilities を送ります。任意の現行 WebDriver サーバーは、経路を試すブラウザができる前にその形式を拒否する場合があります。

セッションは開くがナビゲーションが失敗する場合は、実際のブラウザホストからの到達性を確認します。コンテナや Grid ノードでは、localhost はそのノードを指し、R のワークステーションではありません。

関連記事