首页 > 解决方案 > 如何单击使用 selenium python 弹出窗口阻止的元素?

问题描述

网站在登录后显示弹出窗口 我想单击打开左侧菜单中的选项,但它们被弹出窗口阻止。我怎样才能做到这一点?这是我尝试过的:

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
chromedriver = "/usr/share/chromedriver/chromedriver"
driver = webdriver.Chrome(chromedriver)
driver.get("https://student.amizone.net")
driver.find_element(By.NAME, "_UserName").send_keys("username")
driver.find_element(By.NAME, "_Password").send_keys("password")
driver.find_element(By.CSS_SELECTOR, "#loginform .login100-form-btn").click()
driver.implicitly_wait(10)
#11 | click | id=ModalPopAmityHostel |  
driver.find_element(By.ID, "ModalPopAmityHostel").click()
# 11 | click | id=StudentSatisfactionPop |  | 
driver.find_element(By.ID, "StudentSatisfactionPop").click()

此代码关闭第一个弹出窗口,但不关闭第二个弹出窗口。在代码中,我首先登录到https://student.amizone.net我没有显示我的用户名和密码的网站(显然)。之后driver.find_element(By.ID, "ModalPopAmityHostel").click()应该在关闭弹出窗口的弹出窗口之外单击。同样driver.find_element(By.ID, "StudentSatisfactionPop").click()应该关闭第二个弹出窗口。

这是弹出元素的 html 代码片段:

<form action="/PopUp/Home/SANGATHANQuizpopupSave" data-ajax="true" data-ajax-loading="#lodingDiv" data-ajax-method="POST" data-ajax-mode="replace" data-ajax-success=" $('#SANGATHANQuizpop').modal('hide');$('.modal-backdrop').remove();$(document.body).removeClass('modal-open');alertify.alert('Successfully Saved.'); " data-ajax-update="#Div_Partial" id="form0" method="post"></form>

<div id="StudentSatisfactionPop" class="modal fade in" role="dialog" aria-hidden="false" style="display: block; padding-right: 15px;">
    <div class="modal-dialog">

        <!-- Modal content-->
        <div class="modal-content">
            <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal">×</button>
                <h4 class="modal-title">STUDENT SATISFACTION SURVEY </h4>
            </div>


            <div class="modal-body">
                <div>

                    <p>
                        <b>Dear Mr MANIK RAINA  </b> 
                    </p>
                    <p>
                        Please tell us about you!  Office of Research, Planning &amp; Statistical Services, Amity University Uttar Pradesh is conducting a survey of its students. This survey asks your opinion on many items relevant to examining the impact of college.  It asks about your transition to university, your academic habits and experiences, your interaction with peers and faculty, your involvement in campus activities and programs, and how you spend your time.

                    </p>
                    <p>Results from this survey will be used by us to understand and improve your experiences. Data received from your responses will be analyzed and interpreted batch wise only, and at no time the responses be linked with an individual. Data will be used for revision and improvement of resource planning for better learning experiences of students of future batches. Be assured that your responses will remain confidential.</p>
                    <p>We would very much appreciate you taking a few moments to fill out the Survey Questionnaire.</p>
                <p><b>
    To Start the survey :
    <a data-ajax="true" data-ajax-begin="$('#sidebar').removeClass('display');" data-ajax-loading="#lodingDiv" data-ajax-mode="replace" data-ajax-success=" $('#StudentSatisfactionPop').modal('hide');$('.modal-backdrop').remove();$(document.body).removeClass('modal-open');" data-ajax-update="#Div_Partial" href="/Survey/StudentSatisfaction" id="12" rel="0">Click Here</a>. 
</b></p>
                </div>


            </div>
            <div class="modal-footer">
                <button type="button" id="btnClosevoter" class="btn btn-default" data-dismiss="modal">Close</button>
            </div>


        </div>

    </div>
</div>        <script>

            $(document).ready(function () {

                $('#StudentSatisfactionPop').modal('show');

            });
        </script>

    <script>

        $(document).ready(function () {

            $('#ModalPopAmityHostel').modal('show');

        });
    </script>
    <div id="ModalPopAmityHostel" class="modal fade in" role="dialog" aria-hidden="false" style="display: block;">
        <div class="modal-dialog " style="z-index:104546464; ">

            <div class="modal-content">
                <div class="modal-header">
                    <button type="button" class="close" data-dismiss="modal">×</button>
                    <h4 class="modal-title">Amity Hostel</h4>
                </div>

                <div class="modal-body">
                    <p class="text-center">

                        “A few hostel seats (A/C and Non A/C) are available for allocation. Students desirous of availing the seats may apply on Amizone and also contact hostel office. Allocation of seats will be done on ‘first come, first served’ basis.”
                    </p>


                </div>
                <div class="modal-footer">
                    <button type="button" class="btn btn-primary" data-dismiss="modal">Close</button>
                    <h4 class="modal-title"></h4>
                </div>

            </div>

        </div>
    </div>

标签: pythonseleniumselenium-webdrivermodal-dialogwebdriverwait

解决方案


您可以通过单击关闭按钮来关闭弹出窗口。在您的代码中,您单击div而不是关闭按钮,这就是弹出窗口不关闭的原因(请参阅关闭按钮的正确定位器)。

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

chromedriver = "/usr/share/chromedriver/chromedriver"
driver = webdriver.Chrome(chromedriver)
wait = WebDriverWait(driver, 10)

driver.get("https://student.amizone.net")

driver.find_element(By.NAME, "_UserName").send_keys("username")
driver.find_element(By.NAME, "_Password").send_keys("password")
driver.find_element(By.CSS_SELECTOR, "#loginform .login100-form-btn").click()

wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "#ModalPopAmityHostel button.btn"))).click()
driver.execute_script("arguments[0].click()", driver.find_element_by_css_selector("#StudentSatisfactionPop button.btn"))
# wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "#StudentSatisfactionPop button.btn"))).click()

推荐阅读