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

首先要确定弹窗的类型:

(1)div弹窗

(2)新标签页弹窗

(3)alert弹窗

一,div弹窗

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

这里用百度登陆为例子:

1 from selenium importwebdriver2 importtime3

4 deflogin_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 importwebdriver2 importtime3

4 defopen_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 defSwitch_Window():14 handles =driver.window_handles15 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方法切换到新标签页后就可以做其他操作了。

三、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 importwebdriver3 from selenium.webdriver.common.action_chains importActionChains4 from time importsleep5 #定义浏览器句柄,打开百度网页

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.alert21 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.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值