2010-06-04 3 views
2

J'essaie de router watir via un proxy de manière pragmatique - cela signifie que dans le script, je voudrais changer mon proxy dynamiquement avant de lancer le navigateur.Comment acheminer watir via un proxy de manière pragmatique?

Voici ce que j'ai essayé jusqu'à présent (et jusqu'à présent j'échoue): Je cours chrome et lucide lynx ubuntu. J'ai choisi TREX parce que je pensais que Watir pourrait utiliser PROXY ou quelque chose comme ça.

Je réécrit/usr/bin/google chrome comme:

#!/bin/bash 
/opt/google/chrome/chrome --proxy-server="$TREX" [email protected] 

La raison pour laquelle je passe dans la variable d'environnement serveur proxy plutôt que http_proxy est parce que je ne pouvais obtenir http_proxy pour travailler comme est de toute façon

je fait un simple:

require 'rubygems' 
require 'watir-webdriver' 

ENV['TREX'] = "XX.XX.XX.XX:YY" 
browser = Watir::Browser.new(:chrome) 
browser.goto("http://mysite.com") 

quoi qu'il en soit, ce qui se passe ici est qu'il me transmet à la page de connexion du proxy plutôt que forw la demande.

Qu'est-ce qui me manque ici? Je me sens comme si je suis proche.

Répondre

0
require 'win32/registry' 

PROXY_SERVER_IP = "192.168.1.20" 
PROXY_SERVER_PORT = "3128" 

def set_browser_to_use_proxy 

    log "Enabling Proxy at #{PROXY_SERVER_IP}:#{PROXY_SERVER_PORT}" 
    Win32::Registry::HKEY_CURRENT_USER.open('SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings' , Win32::Registry::KEY_WRITE) do |reg| 
    reg.write('ProxyEnable', Win32::Registry::REG_BINARY, '1') 
    reg.write('ProxyServer' , Win32::Registry::REG_SZ, "#{PROXY_SERVER_IP}:#{PROXY_SERVER_PORT}") 
    reg.write('ProxyOverride' , Win32::Registry::REG_SZ, '') 
    end 
end 

def set_browser_to_use_proxy_off 

    log "Disabling Proxy at #{PROXY_SERVER_IP}:#{PROXY_SERVER_PORT}" 
    Win32::Registry::HKEY_CURRENT_USER.open('SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings' , Win32::Registry::KEY_WRITE) do |reg| 
    reg.write('ProxyEnable', Win32::Registry::REG_DWORD, '0') 
    reg.write('ProxyServer' , Win32::Registry::REG_SZ, "#{PROXY_SERVER_IP}:#{PROXY_SERVER_PORT}") 
    reg.write('ProxyOverride' , Win32::Registry::REG_SZ, '') 
    end 
end 
+0

Le code n'est pas formaté, il est presque illisible. Si vous sélectionnez le code et cliquez sur le bouton '101010' dans la barre d'outils, il sera formaté en code. –

+0

En outre, on dirait que vous avez fourni une solution pour Windows, et feydr est sur Linux. –

+0

yeh .. J'ai vu cet échantillon beaucoup mais def. Je ne veux pas me fier à Windows – eyberg

3

Le problème ici est que vous ne pouvez pas auto authentifier auprès d'un serveur proxy à l'aide de chrome --proxy-server = bla: 3128

Chrome vous demandera toujours un nom d'utilisateur et mot de passe sur un proxy d'authentification quand il démarre (via webdriver ou manuellement)

Une manière compliquée de contourner ceci est d'installer une instance locale d'apache avec squid en tant que proxy transparent qui s'authentifie auprès du serveur proxy distant. Ensuite, il vous suffit de démarrer le chrome avec l'indicateur de proxy pointé vers le proxy squid local. En d'autres termes, enchaîner un proxy non authentifié devant le proxy authentifié ...

J'ai aussi cherché une solution à ce problème. Je pensais peut-être quelque chose comme webrick comme un proxy, ou un bouchon ... mais ne peut pas obtenir la réponse pour l'instant ...

+0

yeh .. J'essaie d'éviter de virer de bord encore un autre proxy ici mais vous avez raison c'est une façon de le faire - aussi, juste au cas où quelqu'un veut suggérer tor - je Je ne veux pas l'utiliser non plus - il y a des échantillons proxy webrick partout et je pensais à utiliser Curb pour faire la demande et l'amener à travers cela ... – eyberg

+0

Dans le cas où vous êtes intéressé, j'ai ajouté un proxy chaîné solution ici: http://altentee.com/2010/authenticating-proxy-with-webdriver-and-watir/ Malheureusement, impossible de réaliser la même chose avec quelque chose de moins compliqué. –

0

Pas que quelqu'un regarde ce sujet, mais je me suis dit comment le faire sur Mac Os X 10,6 pour Safariwatir. networksetup -setwebproxy Ethernet proxyHost proxyPort On proxyUser proxyPassword networksetup -setwebproxystate Ethernet On

et ces commandes peuvent être modifiées pour l'éteindre par la suite.