窗口切换



此代码来源学习后对淘宝操作实践记录:

以下代码在Chrome61和IE11上正常运行,Firefox5.7上运行存在一些问题须改进,应该是火狐不兼容差link_text部分和循环经常报错,在Firefox中建议少使用中文进行定位.

current = driver.current_window_handle #获取当前窗口句柄
current2 = driver.current_window_handle #点击跳转后获取跳转后窗口句柄
allchuang = driver.window_handles #点击跳转后获取所有窗口句柄
for hande in allchuang:
if hande != current2:#判断如果不是跳转后窗口,那么切换到这个窗口
driver.switch_to.window(hande) #跳转到这个窗口

句柄:你可以理解为能代表当前浏览器窗口的一串编号,通过获取的句柄你就可以灵活的进行窗口之间切换了

__author__ = 'Wei'
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome()#正常运行
#driver = webdriver.Ie()#正常运行
#driver = webdriver.Firefox()#部分报错
driver.implicitly_wait(10)
driver.maximize_window()
driver.get("http://www.taobao.com")
title = driver.title#title为当前页面标题
if title == '淘宝网 - 淘!我喜欢':
print('成功跳转')
else:
print('跳转失败')
driver.find_element_by_css_selector("#q").send_keys("手机壳")#在搜索框中输入手机壳
driver.find_element_by_css_selector(".btn-search").click()#点击淘宝搜索
sleep(2)
ddd = "window.scrollTo(0,200)"#设置右侧滚动条坐标
aaa = "window.scrollTo(0,500)"
bbb = "window.scrollTo(0,800)"
ccc = "window.scrollTo(0,1000)"
eee = "window.scrollTo(0, document.body.scrollHeight)" #滚动至底部
driver.execute_script(ddd)#调用滚动坐标
sleep(1)
driver.execute_script(aaa)
sleep(1)
driver.execute_script(bbb)
sleep(1)
driver.execute_script(ccc)
sleep(1)
driver.execute_script(eee)
sleep(1)
driver.execute_script(ddd) sleep(1)#等待一秒
driver.find_element_by_link_text("销量").click()#点击销量
sleep(1)
current = driver.current_window_handle#获取当前句柄
driver.find_element_by_link_text(u"锐舞iPhoneX手机壳苹果X新款10透明套硅胶防摔iPhone X女潮男超薄").click()#点击销量第一的店
current2 = driver.current_window_handle
allchuang = driver.window_handles#获取所有句柄 for hande in allchuang:
if hande != current or hande == current2:#判断跳转窗口
driver.switch_to.window(hande)
driver.implicitly_wait(10)#隐式等待10秒
driver.maximize_window()#窗口最大化
panduan = driver.title
if "手机壳" in panduan:
print("跳转成功222")
fff = "window.scrollTo(0,500);"#设置右侧滚动跳下拉500,并赋值
sleep(2)
driver.execute_script(fff)#调用滚动坐标
sleep(2)
driver.find_element_by_partial_link_text(u"苹果X【新银色】 送钢化膜★柔软不伤机").click()#选择款式 u代表让他默认UTF8格式
driver.find_element_by_xpath("//a[@id='J_LinkBasket']").click()#加入购物车
sleep(2)
xf = driver.find_element_by_css_selector(".j_minilogin_iframe")#此网页iframe没有id和name故使用class元素赋值然后访问
# xf = driver.find_element_by_xpath("//*[class ='j_minilogin_iframe']") #此处使用xpath方法未能找到元素
driver.switch_to.frame(xf)#进入框架
driver.find_element_by_xpath("//*[@id='J_Quick2Static']").click()#点击密码登陆
# driver.find_element_by_css_selector("#J_Quick2Static").click()
driver.find_element_by_xpath("//*[@id='TPL_username_1']").send_keys("weibgg")#输入账户
driver.find_element_by_xpath("//*[@id='TPL_password_1']").send_keys("123")#输入密码
driver.find_element_by_xpath("//*[@id='J_SubmitStatic']").click()#登录 sleep(3)
driver.quit()

python3 + selenium 之窗口切换的更多相关文章

  1. Python3 Selenium多窗口切换

    Python3 Selenium多窗口切换 以腾讯网(http://www.qq.com/)为例,打开腾讯网,点击新闻,打开腾讯新闻,点击新闻中第一个新闻链接. 在WebDriver中封装了获取当前窗 ...

  2. Python+Selenium学习--窗口切换及操作元素

    场景 有时候我们在测试一个web 应用时会出现多个浏览器窗口的情况,在selenium1.0 中这个问题比较难处理.webdriver 提供了相关相方法可以很轻松的在多个窗口之间切换并操作不同窗口上的 ...

  3. selenium webdriver窗口切换(上)

    selenium webdriver窗口切换,有时候在做自动化的时候需要打开很多很多的页面, 当在操作不同的页面的时候需要切换窗口,下面是如何切换到前后页面窗口的操作: package test201 ...

  4. selenium webdriver窗口切换(下)

    多窗口切换有时候需要在不同的窗口切换,从而操作不同的窗口上的元素.在selenium1.0 中这个问题比较难处理.但WebDriver 提供了switcTo.window()方法可以切换到任意的窗口. ...

  5. Selenium 多窗口切换

    我们在操作网页的时候,点击有些页面的链接,会重新打开一个窗口,我们要在新页面上操作,就得切换窗口 比如在百度首页的登录框点击注册,会重新打开一个注册的新页面,要在新页面注册,就得先切进新页面 那我们怎 ...

  6. Selenium多窗口切换代码

    # #!/usr/bin/python3 # -*- coding: utf-8 -*- # @Time : 2020/7/31 16:05 # @Author : Gengwu # @FileNam ...

  7. python之selenium多窗口切换

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

  8. selenium多窗口切换定位

    from selenium import webdriverimport unittest,time,refrom selenium.webdriver.common.keys import Keys ...

  9. selenium 多窗口切换(windows)

    在web应用中,常常会遇见点击某个链接会弹出一个新的窗口,或者是相互关联的web应用 ,这样要去操作新窗口中的元素,这时就需要主机切换到新窗口进行操作..WebDriver 提供了switchTo() ...

随机推荐

  1. 函数和常用模块【day04】:内置函数(十)

    一.36-40 36.isinstance(object, classinfo) 功能:用于判断,对象是否是某个类的实例 # s = "alex" # 对象,"alex& ...

  2. python---RabbitMQ(4)exchange中模糊匹配topic

    和关键字相似 生产者: # coding:utf8 # __author: Administrator # date: // # /usr/bin/env python import pika con ...

  3. JS基础:翻转数组

    var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; console.log(arr); //操作原数组,让原数组第一位和最后一个位调换位置,以此类推. for (va ...

  4. Linux记录-筛选日志sed、find、tail,du,awk命令

    1.查看某一段时间的日志 #cat hdfs-audit.log | sed -n '/2018-04-11 10:00:00/,/2018-04-11 10:01:00/ p' | more   - ...

  5. Hbase记录-HBase基本操作(二)

    HBase Exists   可以使用exists命令验证表的存在.下面的示例演示了如何使用这个命令. hbase(main):024:0> exists 'emp' Table emp doe ...

  6. ACM-ICPC 2018 沈阳赛区网络预赛 K题

    题目链接: https://nanti.jisuanke.com/t/31452 AC代码(看到不好推的定理就先打表!!!!): #include<bits/stdc++.h> using ...

  7. Android避免OOM(内存优化)

    Android内存优化是性能优化很重要的一部分,而如何避免OOM又是内存优化的核心. Android内存管理机制 android官网有一篇文章 Android是如何管理应用的进程与内存分配 Andro ...

  8. java中的基本数据类型一定存储在栈中吗?

    首先说明,"java中的基本数据类型一定存储在栈中的吗?”这句话肯定是错误的. 下面让我们一起来分析一下原因: 基本数据类型是放在栈中还是放在堆中,这取决于基本类型在何处声明,下面对数据类型 ...

  9. 一套oracle的练习题

    create table student( sno varchar2(10) primary key, sname varchar2(20), sage number(2), ssex varchar ...

  10. Jade教程

    Jade 是一个高性能的模板引擎,它深受 Haml 影响,它是用 JavaScript 实现的,并且可以供 Node 使用. 如何在jade模板上加业务逻辑 if res.length==5 h1= ...