driver.switch_to.window(driver.window_handles[0])切换到最新打开窗口
有时,使用selenium 定位页面元素时,浏览器明明打开的是需要定位的页面,但就是定位不到元素。打印一下元素page_source,会发现源码与页面不同。
主要问题是页面没有加载完成导致,需要设置一个等待时间。所以正常情况下,只要click()点击后有页面跳转,在driver.switch_to.window(driver.window_handles[0])
切换到新页面前,最好设置一下等待时间。防止获取不到元素
切换到最新窗口:
n=driver.window_handles #获取当前页面所有的句柄
driver.switch_to.window(n[0]) #切换至最前面的页面 脚本示例:
#特别注意,有点击操作后,driver.click()后最好停顿2S左右加载后,再切换至最新页面
from selenium import webdriver
from conf import *
import time driver=webdriver.Chrome(executable_path = "E:\seleniumbrowserdriver\chromedriver\chromedriver")
driver.get("https://192.168.81.176:8080/***/***/pay/homeIndex")
driver.maximize_window() #窗口最大化
time.sleep(2)
element=driver.find_element_by_id('phone') #根据ID找到元素
driver.find_element_by_id('phone').send_keys('131*****776') #输入号码
driver.execute_script("arguments[0].scrollIntoView(true);", element) #把输入框拉倒顶端
driver.find_element_by_xpath('//*[@id="app"]/div[6]/div[2]/span[2]').click() #切换产品分类
time.sleep(2)
driver.find_element_by_xpath('//*[@id="app"]/div[7]/section[1]/a/div[3]').click() #进入产品详情页面
#print(driver.page_source)
driver.find_element_by_xpath('//*[@id="buyBtn"]').click() #点击订购
driver.find_element_by_xpath('/html/body/div[10]/p[3]').click() #点击登录按钮
time.sleep(2)
n=driver.window_handles #获取当前页面所有的句柄
driver.switch_to.window(n[0]) #切换至最前面的页面
driver.find_element_by_xpath('/html/body/div[8]/div[5]').click() #选择密码登录
time.sleep(1)
driver.switch_to.window(n[0])
driver.find_element_by_id('phoneNumber').send_keys(account)
driver.find_element_by_id('pwd').send_keys(passwd)
driver.find_element_by_xpath('//*[@id="btnLoginPassword"]/p').click() #点击登录按钮
time.sleep(2)
driver.switch_to.window(n[0]) #切换至最新的页面
switch=0
for i in list_phone:
phones = i
if switch == 0:
print(i)
driver.find_element_by_xpath('//*[@id="phoneNumber"]').clear()
driver.find_element_by_xpath('//*[@id="phoneNumber"]').send_keys(i)
driver.find_element_by_xpath('//*[@id="buyBtn"]').click() #生成订单
new_windows = driver.switch_to.alert #切换至alert弹窗上
print(new_windows.text) #获取弹窗上的文本
time.sleep(600)
new_windows.accept() #点击确认按钮
switch =1
time.sleep(6)
elif switch == 1:
print(i)
element = driver.find_element_by_id('phone') # 找到元素
driver.find_element_by_id('phone').send_keys('13143683776') # 输入号码
driver.execute_script("arguments[0].scrollIntoView(true);", element) # 把输入框拉倒顶端
driver.find_element_by_xpath('//*[@id="app"]/div[6]/div[2]/span[2]').click() # 切换产品分类
time.sleep(2)
driver.find_element_by_xpath('//*[@id="app"]/div[7]/section[1]/a/div[3]').click() # 进入产品详情页面
driver.find_element_by_xpath('//*[@id="phoneNumber"]').clear()
driver.find_element_by_xpath('//*[@id="phoneNumber"]').send_keys(i)
driver.find_element_by_xpath('//*[@id="buyBtn"]').click() #生成订单
new_windows = driver.switch_to.alert #切换至alert弹窗上
print(new_windows.text) #获取弹窗上的文本
new_windows.accept() #点击确认按钮
time.sleep(6)
# driver.quit() #关闭浏览器
# driver.close() #关闭游标
执行结果:
登录成功
生成订单:
执行打印日志
driver.switch_to.window(driver.window_handles[0])切换到最新打开窗口的更多相关文章
- selenium - switch_to.window() - 多窗口切换
在页面操作过程中有时候点击某个链接会弹出新的窗口,这时就需要主机切换到新打开的窗口上进行操作.WebDriver提供了switch_to.window()方法,可以实现在不同的窗口之间切换. 以百度首 ...
- Selenium_使用switch_to.window方法处理窗口切换(12)
想一下这样的场景,打开页面A点击一个链接,在一个新的窗口打开页面B,由于之前的driver实例对象在页面A,但是你接下来操作的元素在页面B中,此时脚本就会报错找不到元素.该场景需要使用到seleniu ...
- 2.7.2 元素定位:frame 内定位 driver.switch_to.frame()
来源: http://blog.csdn.net/anniejunyan/article/details/23257327 Selenium + Webdriver 学习(五) frame下元素定位 ...
- driver.close()和driver.quit()
driver.close()关闭当前窗口 driver.quit()退出驱动关闭所有窗口 from selenium import webdriver from time import sleep d ...
- python selenium + web自动化,切换到新的窗口,元素定位不到?
问题描述: 自动化由首页切换到分页面,打开了一个新的窗口,不过,定位不到这个窗口的元素,通过开发者工具是可以查到这个元素的 原因是: 因为窗口句柄还停留在上一个页面,所以导致无法定位元素.报错 &qu ...
- Windows Driver Kit Version 7.1.0 ( 也就是 7600.16385.1 ) 下载地址
Windows Driver Kit Version 7.1.0 ( 也就是 7600.16385.1 ) 下载地址 http://download.microsoft.com/download/4/ ...
- oracle Can't connect to X11 window server using ':0.0' /Checking monitor: must be configured to display at least 256 colors解决方法
Can't connect to X11 window server using ':0.0' 解决方法 1. 以oracle 用户登陆X window 或者 2. root 身份执行 # xhost ...
- selenium中driver.close()和driver.quit()的不同点
driver.quit()与driver.close()的不同:driver.quit(): Quit this driver, closing every associated windows;dr ...
- Selenium_使用switch_to.frame处理网页框架切换(13)
与在新窗口打开一个网页后需要切换窗口才能定位元素一样,在iframe标签中的元素也不能直接定位,需要切换到对应的iframe框架中才能进行元素定位. 完成网页框架切换操作需要用selenium中的两个 ...
随机推荐
- 解决Django项目静态资源无法访问的问题
静态资源无法访问 url.py中配置 from django.conf.urls import url from django.views import static from django.conf ...
- 飞漫魏永明:从MiniGUI看嵌入式十年得与失
日前,飞漫软件创始人魏永明,在飞漫成立十周年之际,回顾了公司发展这十年,同时也回顾了嵌入式发展的这十年.魏永明以自身涉及嵌入式产业的方方面面,创新.人员管理.工程管理.教育培训.经营策略等多方面,并且 ...
- 10_Redis_多数据库
一:概念: 一个Redis实例可以包括多个数据库,客户端可以指定连接某个redis实例的哪个数据库,就好比一个mysql中创建多个数据库,客户端连接时指定连接哪个数据库. 一个Redis实例最多可提供 ...
- GoTests工具自动化test使用
安装 $go get -u github.com/cweill/gotests/... 复制代码 具体使用示例 用法 $gotests [options] PATH ... 复制代码 options说 ...
- CDQ 分治解决和点对有关的问题
具体可以去这篇博客学习: https://oi-wiki.org/misc/cdq-divide/
- BZOJ2140 稳定婚姻[强连通分量]
发现如果$B_i$和$G_j$配对,那么$B_j$又要找一个$G_k$配对,$B_k$又要找一个$G_l$配对,一直到某一个$B_x$和$G_i$配对上为止,才是不稳定的. 暴力是二分图匹配.匈牙利算 ...
- 引爆炸弹——DFS&&联通块
题目 链接 在一个$n \times m$方格地图上,某些方格上放置着炸弹.手动引爆一个炸弹以后,炸弹会把炸弹所在的行和列上的所有炸弹引爆,被引爆的炸弹又能引爆其他炸弹,这样连锁下去. 现在为了引爆地 ...
- 【Java-算法】 十六进制转字节数组
Java Code public class Convert{ public static void main(String args[]) { String sHex = "00 B6 0 ...
- MSMQ介绍
最近的项目中用到了MSMQ,简单的使用到了它,现总结下.有些是网上的资料有些是自己的笔记. MSMQ理解 Message Queue(微软消息队列)是在多个不同的应用之间实现相互通信的一种异步传输模式 ...
- Go位运算
目录 &(AND) |(OR) ^(XOR) &^(AND NOT) << 和 >> & 位运算 AND | 位运算 OR ^ 位运算 XOR & ...