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

首先要肯定弹窗的类型:前端

(1)div弹窗web

(2)新标签页弹窗浏览器

(3)alert弹窗工具

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

 1 from selenium import webdriver  2 import time  3 
 4 def login_baidu(url,username,password):  5  driver.get(url)  6     driver.find_element_by_xpath('//*[@id="u1"]/a[7]').click()  7     time.sleep(2)  8     driver.find_element_by_xpath('//*[@id="TANGRAM__PSP_10__footerULoginBtn"]').click()  9     time.sleep(2) # 弹窗出现后,使页面等待2S
10 
11     login_username = driver.find_element_by_xpath('//*[@id="TANGRAM__PSP_10__userName"]') 12  login_username.click() 13  login_username.send_keys(username) 14 
15     login_passwork = driver.find_element_by_xpath('//*[@id="TANGRAM__PSP_10__password"]') 16  login_passwork.click() 17  login_passwork.send_keys(password) 18 
19     driver.find_element_by_xpath('//*[@id="TANGRAM__PSP_10__submit"]').click() # 登录按钮
20 
21 if __name__ == "__main__": 22     driver = webdriver.Firefox() 23     username = r'xxx@qq.com'
24     password = r'xxxx'
25     url = r'https://www.baidu.com'
26     login_baidu(url,username,password)

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

 1 from selenium import webdriver  2 import time  3 
 4 def open_window1():  5    driver.get("https://www.baidu.com")  6    time.sleep(2)  7 
 8 def open_window2(): # 用JS的方法打开新窗口,模拟新标签页弹窗
 9     js = "window.open('https://www.jd.com')"
10  driver.execute_script(js) 11     time.sleep(2) 12 
13 def Switch_Window(): 14     handles = driver.window_handles 15     print("打印当前已打开的窗口:"+str(handles)) 16     while(1): # 在两个窗口之间作切换动做
17  driver.switch_to.window(handles[0]) 18         time.sleep(5) 19         driver.switch_to.window(handles[1]) 20         time.sleep(5) 21 
22 if __name__ == "__main__" : 23     driver = webdriver.Firefox() 24  open_window1() 25  open_window2() 26     Switch_Window()

handles = driver.window_handles # 获取当前打开的全部窗口的句柄
driver.switch_to.window(handles[N]) # 切换到其中一个窗口
其中,获取的句柄下标从0开始,即第一个窗口为[0]、第二个窗口为[1],如此类推。使用switch_to.window方法切换到新标签页后就能够作其余操做了。

spa

3、alert弹窗code

在WebDriver中处理JS所生成的alert、confirm以及prompt十分简单,具体作法是使用switch_to.alert()方法定位到alert/confirm/prompt,而后使用text/accept/dismiss/send_keys等方法进行操做。orm

1.text:返回alert/confirm/prompt中的文字信息。blog

2.accept():接受现有警告框。

3.dismiss():解散现有警告框。

4.send_keys(keysToSend):发送文本至警告框。 keysToSend:将文本发送至警告框。

 

如图所示,百度搜索设置弹出的窗口是不能经过前端工具对其进行定位的,这个时候就能够经过switch_to.alert()方法接受这个弹窗。

 

代码以下:

 1 #导包
 2 from selenium import webdriver  3 from selenium.webdriver.common.action_chains import ActionChains  4 from time import sleep  5 #定义浏览器句柄,打开百度网页
 6 driver=webdriver.Chrome()  7 driver.implicitly_wait(10)  8 url="http://www.baidu.com"
 9 driver.get(url) 10 #鼠标悬停至"设置"链接
11 link=driver.find_element_by_link_text('设置') 12 ActionChains(driver).move_to_element(link).perform() 13 #打开搜索设置
14 driver.find_element_by_link_text('搜索设置').click() 15 #保存设置
16 sleep(2) 17 driver.find_element_by_xpath('//*[@id="gxszButton"]/a[1]').click() 18 sleep(3)19 #接受警告框
20 alert=driver.switch_to.alert 21 print(alert.text) 22 alert.accept() 23 #20和22行合并,能够直接写成: driver.switch_to.alert.accept()
24 sleep(2) 25 driver.quit()

 

------------------------------------------------------------------------------------------------

talk is cheap,show me the code.

相关文章
相关标签/搜索