一,div弹窗
div弹窗是浏览器中比较好定位的弹窗,定位的方法与普通的元素一样。不过这里会有一个坑,明明可以找到这个按钮,但是就是定位不到。这个就是因为当前有div弹窗弹出的时候,需要设置一下等待时间,等页面元素加载完毕,再去做其他操作。
这里用百度登陆为例子:
rom 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'xxx@qq.com' 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(1): # 在两个窗口之间做切换动作 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方法切换到新标签页后就可以做其他操作了。