有时,使用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. CDH5.16.1的kafka集群报错: No broker in ISR for partition [getngo_collect_apm_test,0]

    1 详细错误 kafka.common.NoReplicaOnlineException: No broker in ISR for partition [getngo_collect_apm_tes ...

  2. 解决Django项目静态资源无法访问的问题

    静态资源无法访问 url.py中配置 from django.conf.urls import url from django.views import static from django.conf ...

  3. SQL SERVER 常用函数 学习笔记

    1.字符串截取.字符串转数字 --Server.8.30 select SUBSTRING('SqlServer_2008',4,6) as DB, CONVERT(float,SUBSTRING(' ...

  4. [shell] shell echo打印换行的方法

    echo要支持同C语言一样的\转义功能,只需要加上参数-e,如下所示: echo -e hello \n echo \n

  5. java 中 IO 流分为几种?(未完成)

    java 中 IO 流分为几种?(未完成)

  6. mysql存储json

    1. json_merge 合并Json并返回 update `user` set inviteeMap = json_merge(inviteeMap, '{"xx1":100} ...

  7. 牛客练习赛52 | C | [烹饪] (DP,裴蜀定理,gcd)

    牛客练习赛52 C 烹饪 链接:https://ac.nowcoder.com/acm/contest/1084/C来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 327 ...

  8. RxJava事件流变换者--操作符

    对于Rxjava来说,操作符是它的一个非常重要的概念,如官网: 而上节上也贴了一下都有哪些操作符,其实还不少,所以有必要仔细学习一下关于操作符这块的东东,那操作符在Rxjava中扮演着什么样的角色呢, ...

  9. linux运维面试前,先来检查这些基础知识忘了没?

    知乎上有这样一个问题:一个新手面试 Linux 运维工作至少需要知道哪些知识?其中有一个答案对这一话题的解读非常深入,今天特别分享给大家. 一.什么是大型网站运维? 首先明确一下,全文所讲的”运维“是 ...

  10. BZOJ2208 [Jsoi2010]连通数[缩点/Floyd传递闭包+bitset优化]

    显然并不能直接dfs,因为$m$会非常大,复杂度就是$O(mn)$: 这题有三种做法,都用到了bitset的优化.第二种算是一个意外的收获,之前没想到竟然还有这种神仙操作.. 方法一:缩点+DAG上b ...