2015-04-14 19 views
5

Ich habe mich schon ziemlich lange umgesehen, um eine Lösung für mein Problem zu finden, hoffe, dass jemand hier über etwas nachdenken kann, das helfen könnte.Firefox sieht Element, wo PhantomJS nicht funktioniert, wenn Selenium-Webdriver

Ich habe ein funktionierendes Selenium-Skript (in Python), das mit dem Firefox-Treiber funktioniert, um auf einer Website zu verbinden. Wenn Sie PhantomJS als Treiber verwenden, funktioniert es nicht mehr.

Das Formular wird von Javascript generiert und befindet sich auf einer https-Website. Hier ist der Code der Benutzereingabe:

<script language="JavaScript1.2"> 
document.writeln("<input class=\"textform\" type=\"text\" id=\"user\" name=\"user\" size=\"" + size + "\" tabindex=1 onFocus=\"hadFocus(true)\">"); 
</script> 

Hier wird der Teil des Skripts für sie suchen: (Arbeit an Firefox aber nicht PhantomJS)

from selenium import webdriver 
from selenium.webdriver.common.keys import Keys 
from selenium.webdriver.common.by import By 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 
import time 

driver = webdriver.Firefox() 

driver.get([MY URL]) 

print driver.page_source 

driver.find_element_by_id("user").clear() 
driver.find_element_by_id("user").send_keys([MY USER ID]) 
driver.find_element_by_id("pass").clear() 
driver.find_element_by_id("pass").send_keys([MY PASS]) 
driver.find_element_by_name("login_btn").click() 

html_source = driver.page_source 

print html_source 

driver.close() 

Und hier ist der Fehler, den ich erhalten:

selenium.common.exceptions.NoSuchElementException 

Wenn ich die page_source nur nach Erreichen der Seite zu drucken, zeigt Firefox die richtige Quellcode, wo PhantomJS nur hat: <html><head></head><body></body></html>

Denken Sie an etwas, was die Ursache dafür sein könnte?

+1

Können Sie uns das Codebeispiel zeigen, nicht nur das Element? Ist es Python oder Java, die Sie verwenden? Ich glaube nicht, dass es Javascript-Bindungen für Selen gibt. –

+0

Der Fehler bedeutet, dass kein Tag/s extrahiert werden muss. Sie können die 'page_source' schreiben und sie manuell überprüfen, wenn das Tag dort ist. – nickanor

+0

habe ich für das Codebeispiel bearbeitet. Ich habe auch versucht, Element nach Name und XPath zu finden. Beide arbeiteten mit Firefox, aber nicht mit PhantomJS. (Auf Python) – zigoingoin

Antwort

5

Ich habe mein Problem dank Artjom B. Antwort gelöst:

Gerade im Code ändern:

driver = webdriver.PhantomJS(service_args=['--ignore-ssl-errors=true']) 

Es war aufgrund des SSL-Zertifikat, denke ich.

+1

Sie können einen Verweis angeben, wo Sie diese Antwort erhalten haben. –

+0

Wo ist der Link? – Max

+0

Etwas tangential: Wenn Sie einen kopflosen PhantomJS-Webdriver ausführen, werfen Sie diesen Befehl beim Starten des Servers: d. '' 'phantomjs --webdriver = 8643 --ignore-ssl-errors = true''' Für mich löste dies Mink ElementNotFoundException Fehler, die ich beim Ausführen von Behat Tests gegen eine https Basis-URL mit selbstsigniertem Zertifikat bekam. – aaronbauman

Verwandte Themen