关于Python+selenium 定位浏览器弹窗元素
首先要确定弹窗的类型:
(1)div弹窗
(2)新标签页弹窗
(3)alert弹窗
一,div弹窗
div弹窗是浏览器中比较好定位的弹窗,定位的方法与普通的元素一样。不过这里会有一个坑,明明可以找到这个按钮,但是就是定位不到。这个就是因为当前有div弹窗弹出的时候,需要设置一下等待时间,等页面元素加载完毕,再去做其他操作。
这里用百度登陆为例子:
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)
二,新标签页弹窗
新标签页弹窗,则需要进行窗口的切换。此处第一个窗口打开百度首页,在打开一个新窗口打开京东首页,在两个窗口之间进行切换。切换到不同的窗口之后,就可以用常规的方法进行元素的定位。
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
) # 切换到其中一个窗口
其中,获取的句柄下标从0开始,即第一个窗口为[0]、第二个窗口为[1],如此类推。使用switch_to.window方法切换到新标签页后就可以做其他操作了。
三、alert弹窗
在WebDriver中处理JS所生成的alert、confirm以及prompt十分简单,具体做法是使用switch_to.alert()方法定位到alert/confirm/prompt,然后使用text/accept/dismiss/send_keys等方法进行操作。
1.text:返回alert/confirm/prompt中的文字信息。
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.
转载于:https://www.cnblogs.com/chenshengkai/p/11303495.html
- 点赞
- 收藏
- 分享
- 文章举报
- 使用selenium+python;在页面A点击一个按钮跳转到页面B,页面A没有关闭,浏览器打开了一个B,切换窗口定位页面B的元素
- 关于python+Selenium定位元素出错的问题
- 🔥《手把手教你》系列基础篇之3-python+ selenium-驱动浏览器和元素定位大法(详细)
- selenium2.0关于python的常用函数(二) 定位元素,解析页面时用到
- Selenium+python,切换frame,定位元素出现NoSuchElementException异常
- Python+selenium定位不到元素的问题及解决方案
- python selenium系列(八)元素定位进阶之分层定位
- selenium webdriver python 元素定位
- selenium+python 元素定位方法
- 两份关于 selenium/xpath 元素定位的极品 pdf,同样适用于移动测试
- python+selenium 定位元素异常类型及解决方法
- selenium_webdriver(python)获取元素属性值,浏览器窗口控制、网页前进后退,title/url打印
- python+selenium之定位web页面元素二:css定位
- Python selenium根据class定位页面元素的方法
- Selenium2+Python自动化-处理浏览器弹窗(转载)
- python+selenium自动化测试-4元素定位
- 关于python+selenium截屏,crop裁剪指定元素的错误
- 浏览器检查selenium的xpath、css定位,助你轻松搞定元素定位
- Python+Selenium xpath 定位遇到相同元素时的解决方法父节点找子节点
- python + selenium 从主窗口A跳转至主窗口B后,无法定位窗口B的元素的问题