Heart灬欣 发表于 2020-7-1 22:54

请教python使用selenium解决JavaScript的弹出框的解决方法

本帖最后由 Heart灬欣 于 2020-7-3 12:18 编辑

我想使用selenium写一个教务系统自动评教的小工具,但是遇到了一个必须点击的一个对话框。不知道这个怎么解决,请大佬给一个思路,我比较小白,学的不多。。。


我查看了网页源代码:脚本内容如下:
'''

<script language="javascript">
                function saveData(obj, status) {
                        var pj06xhs = document.getElementsByName("pj06xh");
                        //逻辑问题,选择一个时,就可以通过,jun.l modified by 2013-12-19
                        /*
                        var flag = false;
                        for (i = 0; i < pj06xhs.length; i++) {
                              var pj0601s = document.getElementsByName("pj0601id_"+ pj06xhs.value);
                              for (j = 0; j < pj0601s.length; j++) {
                                        if (pj0601s.checked) {
                                                flag = true;
                                                break;
                                        }
                              }
                        }
                        */
                        
                        var flag = true;
                        for (i = 0; i < pj06xhs.length; i++) {
                              if(jQuery("input.value+"']:checked").length == 0) {
                                        flag = false;
                                        break;
                              }
                        }
                        if (!flag) {
                              alert("评价的每项指标都必须选择!");
                              return false;
                        }
                        flag = false;
                        var minZb = 0;//取到最小指标数
                        for (i = 0; i < pj06xhs.length; i++) {
                              var pj0601s = document.getElementsByName("pj0601id_"+ pj06xhs.value);
                              minZb = pj0601s.length;
                              break;
                        }
                        
                        for(j = 0; j < minZb; j++) {
                              var _ind = 0;
                              for (i = 0; i < pj06xhs.length; i++) {
                                        var pj0601s = document.getElementsByName("pj0601id_"+ pj06xhs.value);
                                        if (j < pj0601s.length && pj0601s.checked) {
                                                _ind++;
                                        }
                              }
                        if (_ind == pj06xhs.length) {
                              flag = true;
                              break;
                        }
                }
               
                if(flag){
                        alert("请不要选相同一项!");
                        return false;
                }

                if (status == "1") {
                        document.getElementById("issubmit").value = "1";
                } else {
                        document.getElementById("issubmit").value = "0";
                }
               
                if(status == "1" && !confirm("您是否确认提交当前评价,提交后不能修改!")) {

                } else {
                        obj.disabled = true;
                        obj.style.color = "#dddddd";
                        document.getElementById("Form1").submit();
                }
      }
</script>

'''

处女-大龙猫 发表于 2020-7-1 23:41

感觉和我们学校差不多, 你f12试试能不能调试《确定》这个按钮?貌似是chrome的弹窗, 不能搞。

roc0838 发表于 2020-7-1 23:42

可以使用switch_to.alert()这个方法解决。

应真先生 发表于 2020-7-2 00:52

要不试一下输入enter按键点击?selenium很久不用了

Jack-lee 发表于 2020-7-2 07:29

https://www.bilibili.com/video/BV1Z4411o7TA?p=26

天真Aro 发表于 2020-7-2 07:33

前几天写评教脚本也遇到这个问题,可以试试这个办法,导入 from selenium.webdriver.common.alert import Alert,然后实例    ale = Alert(driver),最后在弹出alert下 接受它:    ale.accept()# 接受弹窗


井右寺 发表于 2020-7-2 09:12

{:1_918:}还有一种方式,你自己注入js代码,把alert拦截了
重写alert,让它使用你自己的逻辑,比如
function alert(msg){
    // pass
}

function confirm(msg){
    return true;
}

无法撤销 发表于 2020-7-2 10:04

井右寺 发表于 2020-7-2 09:12
还有一种方式,你自己注入js代码,把alert拦截了
重写alert,让它使用你自己的逻辑,比如


然后除了你这一段,其他的全删除!
页: [1]
查看完整版本: 请教python使用selenium解决JavaScript的弹出框的解决方法