关于Python+selenium 定位浏览器弹窗元素

我也是刚学自动化,在自学过程中发现浏览器中有一些弹窗元素,无法定位。经过自己的摸索,有一些心得,写下来供日后自己回顾。
首先要确定弹窗的类型:
(1)div弹窗
(2)新标签页弹窗
(3)alert弹窗

一,div弹窗
div弹窗是浏览器中比较好定位的弹窗,定位的方法与普通的元素一样。不过这里会有一个坑,明明可以找到这个按钮,但是就是定位不到。这个就是因为当前有div弹窗弹出的时候,需要设置一下等待时间,等页面元素加载完毕,再去做其他操作。
这里用百度登陆为例子:

from selenium import webdriver
import time

def login_baidu(url,username,password):
    driver.get(url)
    driver.find_element_by_xpath('//*[@id="u1"]/a[7]').click()
    time.sleep(2)
    driver.find_element_by_xpath('//*[@id="TANGRAM__PSP_10__footerULoginBtn"]').click()
    time.sleep(2) # 弹窗出现后,使页面等待2S

    login_username = driver.find_element_by_xpath('//*[@id="TANGRAM__PSP_10__userName"]')
    login_username.click()
    login_username.send_keys(username)

    login_passwork = driver.find_element_by_xpath('//*[@id="TANGRAM__PSP_10__password"]')
    login_passwork.click()
    login_passwork.send_keys(password)

    driver.find_element_by_xpath('//*[@id="TANGRAM__PSP_10__submit"]').click() # 登陆按钮

if __name__ == "__main__":
    driver = webdriver.Firefox()
    username = r'[email protected]'
    password = r'xxxx'
    url = r'https://www.baidu.com'
    login_baidu(url,username,password)

二,新标签页弹窗
新标签页弹窗,则需要进行窗口的切换。此处第一个窗口打开百度首页,在打开一个新窗口打开京东首页,在两个窗口之间进行切换。切换到不同的窗口之后,就可以用常规的方法进行元素的定位。

from selenium import webdriver
import time

def open_window1():
   driver.get("https://www.baidu.com")
   time.sleep(2)

def open_window2(): # 用JS的方法打开新窗口,模拟新标签页弹窗
    js = "window.open('https://www.jd.com')"
    driver.execute_script(js)
    time.sleep(2)

def Switch_Window():
    handles = driver.window_handles
    print("打印当前已打开的窗口:"+str(handles))
    while(5): # 在两个窗口之间做五次切换动作
        driver.switch_to.window(handles[0])
        time.sleep(5)
        driver.switch_to.window(handles[1])
        time.sleep(5)

if __name__ == "__main__" :
    driver = webdriver.Firefox()
    open_window1()
    open_window2()
    Switch_Window()
handles = driver.window_handles # 获取当前打开的所有窗口的句柄
driver.switch_to.window(handles[N]) # 切换到其中一个窗口
其中,获取的句柄下标从0开始,即第一个窗口为[0]、第二个窗口为[1],如此类推。使用switch_to.window方法切换到新标签页后就可以做其他操作了。

三、alert弹窗
该类型的弹窗暂没有合适的项目进行练习,待后续完善

猜你喜欢

转载自blog.csdn.net/qq_35519464/article/details/82505541