如何使用selenium python单击弹出窗口阻止的元素?

如何使用selenium python单击弹出窗口阻止的元素?,python,selenium,selenium-webdriver,modal-dialog,webdriverwait,Python,Selenium,Selenium Webdriver,Modal Dialog,Webdriverwait,我想单击左侧菜单中的打开选项,但它们被弹出窗口阻止。我该怎么做? 以下是我尝试过的: 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.Chr

我想单击左侧菜单中的打开选项,但它们被弹出窗口阻止。我该怎么做? 以下是我尝试过的:

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()
此代码关闭第一个弹出窗口,但不关闭第二个弹出窗口。在code first中,我登录到网站
https://student.amizone.net
我没有显示我的用户名和密码(显然)。在这之后,
driver.find_元素(By.ID,“ModalPopAmityHostel”)。click()
应该在关闭弹出窗口的弹出窗口外单击。类似地,
driver.find_元素(By.ID,“StudentSatisfactionPop”)。单击()将关闭第二个弹出窗口

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


×
学生满意度调查

亲爱的MANIK RAINA先生:

请告诉我们你的情况!研究,规划及发展局,;北方邦友好大学统计服务部正在对其学生进行调查。这项调查询问了你对许多与考察大学教育影响相关的项目的意见。它询问你进入大学的情况,你的学习习惯和经验,你与同龄人和教师的互动,你参与校园活动和项目的情况,以及你如何度过时间。

本次调查的结果将用于我们了解和改进您的体验。从您的回复中收到的数据将仅按批次进行分析和解释,任何时候回复都不会与个人相关联。这些数据将用于修订和改进资源规划,以使未来批次的学生获得更好的学习体验。请确保您的回复将保持机密

我们非常感谢您花点时间填写调查问卷

要开始调查,请执行以下操作: .

关 $(文档).ready(函数(){ $('StudentSatisfactionPop').modal('show'); }); $(文档).ready(函数(){ $('ModalPopAmityHostel')。模态('show'); }); × 爱迪酒店

一些宿舍座位(A/C和非A/C)可供分配。希望使用这些座位的学生可以向Amizone申请,也可以联系宿舍办公室。座位分配将以“先到先得”的方式进行


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

由于文本为“关闭”的
标记带有“以便定位和单击所需元素”的
标记,因此您必须引导WebDriverWait使
元素可单击()
,并且您可以使用以下任一项:

  • 使用
    CSS\u选择器

    from selenium import webdriver
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
    options = webdriver.ChromeOptions() 
    options.add_argument("start-maximized")
    options.add_experimental_option("excludeSwitches", ["enable-automation"])
    options.add_experimental_option('useAutomationExtension', False)
    driver = webdriver.Chrome(options=options, executable_path=r'C:\WebDrivers\chromedriver.exe')
    driver.get('https://student.amizone.net')
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "form#loginform input[name='_UserName']"))).send_keys("7071804")
    driver.find_element_by_css_selector("form#loginform input[name='_Password']").send_keys("62ae6f")
    driver.find_element_by_css_selector("form#loginform button[type='submit']").click()
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div#ModalPopAmityHostel div.modal-footer button.btn.btn-primary[data-dismiss='modal']"))).click()
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div#StudentSatisfactionPop div.modal-footer button.btn.btn-default[data-dismiss='modal']"))).click()
    
  • 使用
    XPATH

    from selenium import webdriver
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
    options = webdriver.ChromeOptions() 
    options.add_argument("start-maximized")
    options.add_experimental_option("excludeSwitches", ["enable-automation"])
    options.add_experimental_option('useAutomationExtension', False)
    driver = webdriver.Chrome(options=options, executable_path=r'C:\WebDrivers\chromedriver.exe')
    driver.get('https://student.amizone.net')
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//form[@id='loginform']//input[@name='_UserName']"))).send_keys("7071804")
    driver.find_element_by_xpath("//form[@id='loginform']//input[name='_Password']").send_keys("62ae6f")
    driver.find_element_by_xpath("//form[@id='loginform']//button[type='submit']").click()
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@id='ModalPopAmityHostel']//div[@class='modal-footer']//button[@class='btn btn-primary' and @data-dismiss='modal']"))).click()
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@id='StudentSatisfactionPop']//div[@class='modal-footer']//button[@class='btn btn-default' and @data-dismiss='modal']"))).click()
    

您是否尝试切换到警报和接受。您可以使用Javascript单击重叠的元素,但我建议您先接受警报,然后再与元素交互。当我登录到站点时,我通过单击阻止区域关闭弹出窗口,然后关闭它们。我使用selenium IDE录制了命令,但只有一个弹出窗口关闭。我不知道为什么硒不起作用。我从不需要单击关闭按钮,因为在弹出窗口之外的任何地方单击都比较容易。我尝试了您的解决方案,但第二个弹出窗口仍然没有关闭。使用JS click使用
execute\u script
进行尝试。请参阅答案更新。它成功了!但是你知道为什么CSS_选择器没有点击第二个弹出窗口吗?
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

options = webdriver.ChromeOptions() 
options.add_argument("start-maximized")
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)
driver = webdriver.Chrome(options=options, executable_path=r'C:\WebDrivers\chromedriver.exe')
driver.get('https://student.amizone.net')
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//form[@id='loginform']//input[@name='_UserName']"))).send_keys("7071804")
driver.find_element_by_xpath("//form[@id='loginform']//input[name='_Password']").send_keys("62ae6f")
driver.find_element_by_xpath("//form[@id='loginform']//button[type='submit']").click()
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@id='ModalPopAmityHostel']//div[@class='modal-footer']//button[@class='btn btn-primary' and @data-dismiss='modal']"))).click()
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@id='StudentSatisfactionPop']//div[@class='modal-footer']//button[@class='btn btn-default' and @data-dismiss='modal']"))).click()