phantomjs因为是无界面的,无法处理动态js渲染的alert弹窗,因此无法使用常规的 switch_to_alert() 来处理弹窗,否则将会报错。查阅资料发现其实phantomjs自带了处理弹窗的API,这里只需要在selenium中的调用phantomjs自带的API就行。
browser = webdriver.PhantomJS(executable_path = os.path.join(mypath,"browser\\phantomjs.exe"))
#selenium调用phantomjs的API来解决alert弹窗问题
def shutdown_alert(self):
alert_script = """
var page = this ;
page.onAlert = function(msg){
console.log(msg);};"""
browser.command_executor._commands['executePhantomScript'] = ('POST', '/session/$sessionId/phantom/execute')
browser.execute('executePhantomScript', {'script': alert_script, 'args': []})
#该函数需要在触发alert弹窗前执行,否则会因为alert的阻塞效应而失效
#同理,对confirm弹窗的处理方式如下:
def shutdown_confirm(self):
confirm_script = """
var page = this ;
page.onConfirm = function(msg) {
console.log(msg);
return true;
};"""
browser.command_executor._commands['executePhantomScript'] = ('POST', '/session/$sessionId/phantom/execute')
browser.execute('executePhantomScript', {'script': confirm_script, 'args': []})
在selenium中调用Phantomjs的API的方法参考:
Phantomjs官方API查询入口