python3 + selenium 之窗口切换
窗口切换
此代码来源学习后对淘宝操作实践记录:
以下代码在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 之窗口切换的更多相关文章
- Python3 Selenium多窗口切换
Python3 Selenium多窗口切换 以腾讯网(http://www.qq.com/)为例,打开腾讯网,点击新闻,打开腾讯新闻,点击新闻中第一个新闻链接. 在WebDriver中封装了获取当前窗 ...
- Python+Selenium学习--窗口切换及操作元素
场景 有时候我们在测试一个web 应用时会出现多个浏览器窗口的情况,在selenium1.0 中这个问题比较难处理.webdriver 提供了相关相方法可以很轻松的在多个窗口之间切换并操作不同窗口上的 ...
- selenium webdriver窗口切换(上)
selenium webdriver窗口切换,有时候在做自动化的时候需要打开很多很多的页面, 当在操作不同的页面的时候需要切换窗口,下面是如何切换到前后页面窗口的操作: package test201 ...
- selenium webdriver窗口切换(下)
多窗口切换有时候需要在不同的窗口切换,从而操作不同的窗口上的元素.在selenium1.0 中这个问题比较难处理.但WebDriver 提供了switcTo.window()方法可以切换到任意的窗口. ...
- Selenium 多窗口切换
我们在操作网页的时候,点击有些页面的链接,会重新打开一个窗口,我们要在新页面上操作,就得切换窗口 比如在百度首页的登录框点击注册,会重新打开一个注册的新页面,要在新页面注册,就得先切进新页面 那我们怎 ...
- Selenium多窗口切换代码
# #!/usr/bin/python3 # -*- coding: utf-8 -*- # @Time : 2020/7/31 16:05 # @Author : Gengwu # @FileNam ...
- python之selenium多窗口切换
前提: 在页面操作过程中有时候点击某个链接会弹出新的窗口,这就需要主机切换到新打开的窗口上.WebDriver提供了switch_to.window()方法,可以实现在不同的窗口之间切换. 内容: 以 ...
- selenium多窗口切换定位
from selenium import webdriverimport unittest,time,refrom selenium.webdriver.common.keys import Keys ...
- selenium 多窗口切换(windows)
在web应用中,常常会遇见点击某个链接会弹出一个新的窗口,或者是相互关联的web应用 ,这样要去操作新窗口中的元素,这时就需要主机切换到新窗口进行操作..WebDriver 提供了switchTo() ...
随机推荐
- JavaSE学习总结(十六)—— 泛型与泛型应用
一.泛型概要 泛型(Generic)的本质是类型参数化,通俗的说就是用一个占位符来表示类型,这个类型可以是String,Integer等不确定的类型,表明可接受的类型. 泛型是Java中一个非常重要的 ...
- Swift真机调试时报错dyld: Library not loaded: @rpath/libswiftCore.dylib
dyld: Library not loaded: @rpath/libswiftCore.dylib Referenced from: /private/var/mobile/Containers/ ...
- 4、JDBC-API
访问数据库 /** * 在 java.sql 包中有 3 个接口分别定义了对数据库的调用的不同方式: * * Statement * * PrepatedStatement * * CallableS ...
- mysql优化问题汇总
sql优化-->分区-->分表-->垂直分库-->水平分库-->读写分离 分区 关于分区的博客推荐这个:https://blog.csdn.net/youzhouliu/ ...
- 用java发邮件之一 (直接源于真实项目) 【原】
真实项目应用的java发送邮件,应该还待进一步完善. 依赖 mail-1.4.jar jar包下载地址: http://mvnrepository.com/artifact/javax.mail/ma ...
- 直接用<img> 的src属性显示base64转码后的字符串成图片【原】
直接用<img> 的src属性显示base64转码后的字符串成图片 <img src="data:image/gif;base64,base64转码后的字符串" ...
- RocketMQ之消息幂等
幂等(idempotent.idempotence)是一个数学与计算机学概念,常见于抽象代数中. 在编程中一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同. 首先我们了解一下什么是 ...
- 五、u-boot 启动流程---u-boot.lds
5.1 u-boot.lds 链接脚本分析 uboot 编译出来的第一个链接脚本就是执行 u-boot.lds 链接脚本,去掉里面无用的和没有定义的,进行分析. /* 配置头文件,自动生成的,包含芯 ...
- 51nod1222 最小公倍数计数
题目来源: Project Euler 基准时间限制:6 秒 空间限制:131072 KB 分值: 640 定义F(n)表示最小公倍数为n的二元组的数量. 即:如果存在两个数(二元组)X,Y(X & ...
- C# 部分类使用partial修饰
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace pati ...