有时,使用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])切换到最新打开窗口的更多相关文章

  1. selenium - switch_to.window() - 多窗口切换

    在页面操作过程中有时候点击某个链接会弹出新的窗口,这时就需要主机切换到新打开的窗口上进行操作.WebDriver提供了switch_to.window()方法,可以实现在不同的窗口之间切换. 以百度首 ...

  2. Selenium_使用switch_to.window方法处理窗口切换(12)

    想一下这样的场景,打开页面A点击一个链接,在一个新的窗口打开页面B,由于之前的driver实例对象在页面A,但是你接下来操作的元素在页面B中,此时脚本就会报错找不到元素.该场景需要使用到seleniu ...

  3. 2.7.2 元素定位:frame 内定位 driver.switch_to.frame()

    来源: http://blog.csdn.net/anniejunyan/article/details/23257327  Selenium + Webdriver 学习(五) frame下元素定位 ...

  4. driver.close()和driver.quit()

    driver.close()关闭当前窗口 driver.quit()退出驱动关闭所有窗口 from selenium import webdriver from time import sleep d ...

  5. python selenium + web自动化,切换到新的窗口,元素定位不到?

    问题描述: 自动化由首页切换到分页面,打开了一个新的窗口,不过,定位不到这个窗口的元素,通过开发者工具是可以查到这个元素的 原因是: 因为窗口句柄还停留在上一个页面,所以导致无法定位元素.报错 &qu ...

  6. 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/ ...

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

  8. selenium中driver.close()和driver.quit()的不同点

    driver.quit()与driver.close()的不同:driver.quit(): Quit this driver, closing every associated windows;dr ...

  9. Selenium_使用switch_to.frame处理网页框架切换(13)

    与在新窗口打开一个网页后需要切换窗口才能定位元素一样,在iframe标签中的元素也不能直接定位,需要切换到对应的iframe框架中才能进行元素定位. 完成网页框架切换操作需要用selenium中的两个 ...

随机推荐

  1. 浅谈nginx简介和应用场景

    简介 nginx是一款轻量级的web服务器,它是由俄罗斯的程序设计师伊戈尔·西索夫所开发. nginx相比于Tomcat性能十分优秀,能够支撑5w的并发连接(而Tomcat只能支撑200-400),并 ...

  2. kubernetes之node资源紧缺时pod驱逐机制

    在系统硬件资源紧缺的情况下保证node的稳定性, 是kubelet需要解决的一个重要问题 1.驱逐策略 kubelet持续监控主机的资源使用情况, 一旦出现资源紧缺的迹象, kubelet就会主动终止 ...

  3. MNPR--造福人类的人值得被感激

    https://artineering.io/research/MNPR/ https://mnpr.artineering.io https://pdfs.semanticscholar.org/0 ...

  4. Codeforces Round #586 (Div. 1 + Div. 2) E. Tourism

    链接: https://codeforces.com/contest/1220/problem/E 题意: Alex decided to go on a touristic trip over th ...

  5. SQL Server查询表结构语句

    --1:获取当前数据库中的所有用户表   www.2cto.com   select Name from sysobjects where xtype='u' and status>=0  -- ...

  6. [Cypress] Use the Most Robust Selector for Cypress Tests

    Which selectors your choose for your tests matter, a lot. In this lesson, we'll see the recommended ...

  7. pe头

    1.dos头 结构: struct _IMAGE_DOS_HEADER {     WORD e_magic;     WORD e_cblp;     WORD e_cp;     WORD e_c ...

  8. Java实现浏览器大文件分片上传

     上周遇到这样一个问题,客户上传高清视频(1G以上)的时候上传失败. 一开始以为是session过期或者文件大小受系统限制,导致的错误. 查看了系统的配置文件没有看到文件大小限制, web.xml中s ...

  9. NetMQ介绍

    NetMQ 是  ZeroMQ的C#移植版本. 一.ZeroMQ ZeroMQ(Ø)是一个轻量级的消息内核,它是对标准socket接口的扩展.它提供了一种异步消息队列,多消息模式,消息过滤(订阅),对 ...

  10. Solr6.0创建新的core

    现在solrhome文件夹下创建一个[new1_core]的文件夹,提示需要啥xml或者是txt就从下载好的solr6.0中去找,然后拷贝过来就行 这样的话,一般到最后会报 Error loading ...