2013-12-20 2 views
13

Ich versuche PhantomJS mit Selenium Webdriver zu verwenden und bekam Erfolg, aber für eine bestimmte Website sehe ich, dass es nicht zur URL navigiert. Ich habe es mit Python und C# versucht.
Python-Code:Selenium Webdriver + PhantomJS bleibt auf etwa: leer für eine bestimmte Website

dcap = dict(webdriver.DesiredCapabilities.PHANTOMJS) 
dcap["phantomjs.page.settings.userAgent"] = ("Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36") 
service_args = ['--load-images=false', '--proxy-type=None'] 
driver = webdriver.PhantomJS(executable_path="C:\\phantomjs.exe", service_args=service_args, desired_capabilities=dcap) 
driver.get("https://satoshimines.com") 
print driver.current_url 

Die Ausgabe dieses Codeausschnitt ist: about: blank
Während es für jede andere Website gut funktioniert.

gleiche Code mit C#:

IWebDriver driver = new PhantomJSDriver(); 
driver.Navigate().GoToUrl("https://satoshimines.com"); 
Console.WriteLine(driver.Url); 

Der Ausgang des C# Programm ist auch gleich.

Ich bin hier stecken und Hilfe brauchen.

+0

Welche Version des Treibers verwenden Sie? Was ist mit anderen Fahrern? Können Sie beispielsweise mit ChromeDriver erfolgreich zu Seiten navigieren? Ist das auf einer anderen Maschine reproduzierbar? – Arran

+0

Hallo @Arran, ich benutze Selenium Webdriver 2.39 und PhantomJS 1.9. Ja, ich habe bereits ein Arbeitsprogramm für die gleiche URL mit dem Firefox-Treiber. –

+0

Ich denke, ich habe die Lösung gefunden. Es war ein SSL-Handshake-Problem. Durch die Übergabe von '--ignore-ssl-errors = true' in service_args an phantomjs wird das Problem behoben. –

Antwort

7

Es scheint, dass ich eine Lösung für dieses gefunden haben. Das Problem war ein SSL-Handshake-Problem. Durch die Übergabe
'--ignore-ssl-errors = true' als service_args zu phantomjs löst das Problem.

Dank

+0

Wo genau fügen Sie das zu den service_args hinzu? weil ich mit dem gleichen Problem jetzt stecken bin –

+0

@HenkJansen, Sag mir welche Programmiersprache benutzt du? Ich werde den Code entsprechend posten. –

+0

C# tut mir leid. Ich dachte, ich hätte es hinzugefügt. –

21

Nach einer vollständigen Code Lösung für C# ist -

PhantomJSDriverService service = PhantomJSDriverService.CreateDefaultService(); 
service.IgnoreSslErrors = true; 
service.LoadImages = false; 
service.ProxyType = "none"; 

driver = new PhantomJSDriver(service); 
+0

SIE SIND ERSTAUNLICH! Vielen Dank! –

9

Für mich wurde die Lösung wie folgt:

var service = PhantomJSDriverService.CreateDefaultService(); 
service.SslProtocol = "tlsv1"; //"any" also works 

driver = new PhantomJSDriver(service); 

Ich habe keine Ahnung, warum die SSLv3 Standard wird nicht arbeiten. Wenn Sie sicher sind, dass die SSL-Zertifikate gültig sind, wird empfohlen, Fehler nicht zu ignorieren, um sie vor bösartigen Zertifikaten zu schützen.

aktualisieren: Für eine sehr gute Erklärung, warum sslProtocol jetzt eingestellt werden sollte anstelle des Standard-SSLv3, werfen Sie bitte einen Blick auf die excellent cross link versehen unten durch @Artjom B.

+1

Wegen einiger POODLE: http://Stackoverflow.com/a/26417660/1816580 –

+0

Sehr guter Kommentar, danke! Dieses Problem sollte daher automatisch gelöst werden, wenn PhantomJS 1.9.8 auf NuGet veröffentlicht wird. –

+0

Sie haben gerade das Problem gelöst, das mich seit 2 Tagen stört. Danke vielmals. –

3

das für mich TLSv1 gearbeitet:

DesiredCapabilities capabilities = DesiredCapabilities.phantomjs(); 
capabilities.setJavascriptEnabled(true); 
capabilities.setCapability(PhantomJSDriverService.PHANTOMJS_CLI_ARGS, new String[] {"--web-security=no", "--ignore-ssl-errors=yes", "--ssl-protocol=tlsv1"}); 
driver = new PhantomJSDriver(capabilities); 
1

lief in dieser Frage auf eine Anwendung ganz abrupt nach PhantomJS 1.9.7 für Monate ohne Zwischenfälle ausgeführt wird. Die Lösung? Aktualisieren Sie phantomjs auf 2.0.0.