Python+webdriver一劳永逸解决弹出框识别问题


弹出框有几种类型,一般为alart, iframe, windows(包括可直接识别的div,还有不能能直接识别的),下面我们以百度首页为例,看看这几种弹出框如何识别。

假设现在要在百度首页点击登录按钮

等如下窗口弹出来后, 点击qq图标转向qq登录

然后,页面会跳转到第3方窗口,在里面选择账户密码登录

然后在如下弹出框里输入用户名和密码

我们直接代码看下如何实现,注意,以下下代码仅仅证明可行性,未作任何优化,工程代码应该利用设计模式(PageObject)/分离元素和操作/封装重用类/定义错误处理。

import time

from selenium import webdriver

#打开首页,点击登录按钮

d = webdriver.Chrome()

d.get("http://www.baidu.com")

d.find_element_by_xpath(".//*[@id='u1']/a[@name='tj_login']").click()

#jquery操作页面元素,点击qq账户登录。

#1. 这是弹出框问题的终极解决办法,一律用jquey直接操作页面元素,然后通过脚本执行

js_script ='''$("#pass_phoenix_btn .phoenix-btn-item")[0].click()'''

time.sleep(2)

d.execute_script(js_script)

time.sleep(2)

#切换到qq登录页面,并打印出当前页面以验证正确性。

#2. switch_to.window允许你跟弹出页面window交互。

for handle in d.window_handles:

d.switch_to.window(handle)

time.sleep(3)

print(d.current_url)

#分析页面元素,看出最终的账户登录是个iframe,找到这个iframe的id,切入到这个iframe,继续执行操作。

#3. iframe也可以用switch_to.frame直接操作。

element = d.find_element_by_xpath(".//*[@id='combine_page']/div[1]")

d.switch_to.frame(element.find_element_by_id('ptlogin_iframe'))

d.find_element_by_xpath(".//*[@id='switcher_plogin']").click()


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM