2017-11-23 2 views
0

TP-Link Router Mein Code für einen Neustart: -annehmen prompt Alarm auf Router über PhantomJS Neustart - Selen, Python

from selenium import webdriver 
import time 

browser = webdriver.PhantomJS('C:\\Users\\example\\AppData\\Local\\Programs\\Python\\Python36\\phantomjs.exe') 
browser.get("http://admin:[email protected]") 
browser.get("http://192.168.0.1") 

browser.switch_to.frame("bottomLeftFrame") 

system_tools_element = browser.find_element_by_id("a43") 
system_tools_element.click() 

reboot_menu_element = browser.find_element_by_id("a49") 
reboot_menu_element.click() 

browser.switch_to_default_content() 
browser.switch_to.frame("mainFrame") 

reboot_button = browser.find_element_by_id("reboot") 
reboot_button.click() 

#code that I found on one of the stack answers for accepting alert. This code doesn't work and it does not reboot the router. 

browser.execute_script("window.confirm = function(msg) { return true; }") 

browser.close() 

ich erfolgreich den Code mit Chrome-Treiber getestet und ich

alert = browser.switch_to.alert 
alert.accept() 

, um die Warnung zu akzeptieren.

PhantomJS zur Verwendung dieser browser.switch_to.alert.accept() folgenden Fehler geben

selenium.common.exceptions.WebDriverException: Message: Invalid Command Method - {"headers":{"Accept":"application/json","Accept-Encoding":"identity","Connection":"close","Content-Length":"53","Content-Type":"application/json;charset=UTF-8","Host":"127.0.0.1:62839","User-Agent":"Python http auth"},"httpVersion":"1.1","method":"POST","post":"{\"sessionId\": \"d8059740-d022-11e7-9baa-b725394efad6\"}","url":"/accept_alert","urlParsed":{"anchor":"","query":"","file":"accept_alert","directory":"/","path":"/accept_alert","relative":"/accept_alert","port":"","host":"","password":"","user":"","userInfo":"","authority":"","protocol":"","source":"/accept_alert","queryKey":{},"chunks":["accept_alert"]},"urlOriginal":"/session/d8059740-d022-11e7-9baa-b725394efad6/accept_alert"} 

Meine Frage ist: - Gibt es eine Möglichkeit PhantomJS in diesem Fall arbeiten zu machen, das heißt, akzeptieren Benachrichtigungen?

Ich bin neu in der Programmierung selbst so eine wenig detaillierte Antwort mehr hilfreich sein :)

+0

Ich bin nicht sicher, ob ich Ihre Frage richtig verstanden habe, aber was ist falsch mit 'browser.switch_to.alert.accept()' durch 'PhantomJS'? Siehst du irgendeinen Fehler? Was sagt der Fehler? Aktualisieren Sie den vollständigen Fehler im Bereich Frage zusammen mit dem entsprechenden HTML. – DebanjanB

+0

Ich habe die Frage aktualisiert. –

Antwort

0

Phantom JS-Treiber ist ein Remote-WebDriver der PhantomJS als Back-End verwendet. Da PhantomJS reines JS ist, können Sie execute_script Selen Python Bindings verwenden.

browser.execute_script("window.alert = function(){}"); 
browser.execute_script("window.confirm = function(){return true;}"); 

Diese Kontrollen für jeden Alarm in einer Seite und übernimmt sie.

+0

kein Glück. Der Code läuft fehlerfrei, aber der Router startet nicht neu, was bedeutet, dass der Alarmcode nicht funktioniert. –

+0

@TheOne fügen Sie diese Zeilen ein, bevor die Warnung angezeigt werden kann. Sobald diese Zeilen ausgeführt werden, werden standardmäßig Warnungen akzeptiert. –

+0

hat getan, wie Sie gesagt haben. Aber noch einmal funktioniert der Code ohne Fehler, aber Router wird nicht neu gestartet. Wie auch immer, ich habe es mit kopflosem Chrom gefunden. Vielen Dank für Ihre Mühe! –

0

scheint es ein Timing-Problem ist und Sie haben ExplicitWait dh WebDriverWait für die alert erscheinen zu induzieren, wie folgt:

WebDriverWait(driver, 5).until(EC.alert_is_present) 
browser.execute_script("window.confirm = function(){return true;}"); 
Verwandte Themen