selenium 窗口句柄之间的切换

以前使用selenium时都是在单窗口的模式下,本次新增多窗口下的窗口之间切换

from selenium import webdriver

from selenium.webdriver.common.keys import Keys

import selenium.webdriver.support.ui as ui

from selenium.webdriver.common.action_chains import ActionChains

#完成点击下载ppt

def get_ppt_download():

start_url = ‘http://www.hjenglish.com/dl/bec/‘

driver = webdriver.Chrome()

driver.maximize_window()

wait = ui.WebDriverWait(driver,10)

driver.get(start_url)

h = driver.current_window_handle

driver.find_elements_by_xpath(‘//a[@class="fastLogin"]‘)[0].click()

driver.find_elements_by_xpath(‘//input[@class="hp-username"]‘)[0].send_keys("")  #引号内输入用户名

driver.find_elements_by_xpath(‘//input[@class="hp-password"]‘)[0].send_keys("")  #引号内输入密码

driver.find_elements_by_xpath(‘//button[@class="hp-btn hp-btn-green"]‘)[0].click()

time.sleep(5)

for i in driver.window_handles:

if i == h:

driver.switch_to_window(h)

article_list = driver.find_elements_by_xpath(‘//ul[@id="article_list"]/li‘)

for index in range(0,len(article_list)):

for m in driver.window_handles:

if m == h:

driver.switch_to_window(h)

article_list[index].find_elements_by_xpath(‘./div[@class="article_list_info"]/h2/a[@class=" a_article_title"]‘)[0].click()

for t in driver.window_handles:

if t != h:

driver.switch_to_window(t)

p = driver.find_elements_by_xpath(‘//div[@class="btn_downpage_area"]/a[@class="btn_downpage"]‘)

if len(p):

p[0].click()

driver.find_elements_by_xpath(‘//ul[@id="down_linklist"]/li[1]‘)[0].click()

time.sleep(5)

driver.close()

else:

driver.switch_to_window(h)     

time.sleep(3)

driver.close()

本次测试的网站是http://www.hjenglish.com/dl/bec/

主要是中间列表ppt的下载

经测试,可以正常实现单个ppt的点击下载逻辑,但是在循环点击其他ppt时还有点问题,有待解决。

时间: 2024-10-08 02:49:25

selenium 窗口句柄之间的切换的相关文章

selenium获取多窗口句柄并一一切换至原窗口句柄(三个窗口)

网上有很多是selenium基于python来获取两个窗口句柄与切换,本文实现用python+selenium获取多窗口句柄并一一切换至原窗口句柄(三个窗口),且在每个窗口下进行一个搜索或翻译,然后截图. 代码如下: 1 # coding=utf-8 2 from selenium import webdriver 3 import time 4 5 driver = webdriver.Chrome() 6 driver.maximize_window() # 窗口最大化 7 8 driver

Selenium中怎么实现多个窗口之间的切换?

Selenium 多窗口(多Tab)之前的切换 多窗口的切换的目的是为了让selenium改变操作的窗口.在selenium中假如不切换窗口,一旦遇到一个链接跳转到另外的窗口的时候,当前的资源句柄操作的依然是最开始的窗口,这样一来,就给自动化人员带来极大的不便.在多窗口的切换中,资源句柄会随着切换窗口而切换操作的资源句柄.在切换窗口的时候需要做的步骤与思路:获取当前浏览器的所有资源句柄放到Set集合中,通过遍历的方式获取该资源句柄的Title与实际想切换的窗口的Title进行比较,如果相等,那么

Selenium2+python自动化71-多个浏览器之间的切换【转载】

前言 有时候一些业务的功能涉及到多个系统,需要在web系统1打开造一些数据,然后用到某些参数是动态生成的,需要调用web系统2里面的参数. 举个简单例子:在做某些业务的时候,需要手机短信验证码,我不可能去搞个手机连着电脑吧,那样太傻,我们的目的是获取短信验证码,短信验证码都有短信平台去查询. 当然能直接操作数据库最简单了,用python连数据库直接通过sql去查就行. 一.启动两个driver 1.如果我想启动2个火狐,一个火狐打开百度,另外一个火狐打开博客园,我们只需用2个实例driver去控

用户态与内核态之间的切换

时间:2014.06.08 地点:基地 说明:本文由网上资料整理而成 -------------------------------------------------------------------------------------- 一.用户态与内核态 程序在运行时会消耗操作系统的物理资源,比如在创建新进程时涉及物理内存的分配,从父进程拷贝相关信息,拷贝设置页目录.页表等.这些都涉及很底层的操作,不可随便让程序去做,而是由更高级的程序完成,以达到对资源的集中管理,减少冲突.在Linux

【UIKit】控制器之间的切换2 【Push】

[控制器切换Push][?Code] 1.创建3个xib和控制器 2.在AppDelegate中设置首先启动的页面 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window=[[UIWindow alloc]initWithFrame:[[UIScreen mainScreen]bounds] ]; self.

【UIKit】控制器之间的切换1 【Modal】

[Modal][?Code] 1.首先有2个控制器,并且都拥有视图界面. ? 2.点击登录后,第二个页面会从下方上移,那就得在第一个界面中首先创建另外一个界面.然后转向 首先得加载一个协议,这个就是第二个页面的代理. <LoginViewControllerDelegate> 2).点击登录进行转向 - (IBAction)Login { // 初始化控制器 LoginViewController *login=[[LoginViewController alloc]init]; login.

iOS 视图在不同View之间的切换(对于convertRect:函数的一些理解)

可以通过以下函数完成坐标体系在不同View之间的切换,如下面是完成当前View向ParentView坐标的转换(一个矩阵转换)CGRect parentRect = [currentView convertRect:blankImageView.bounds toView:self.superview]; (self.view 上有viewA 与 viewB 两个视图 btn在viewA上) 绝对rect =[viewA.superView convertRect:btn.frame fromV

用Swift完成不同View Controller之间的切换

之前用objective-c开发时,页面之间的切换很容易.其实用swift没有很大的变化,如果你是用storyboard完成的界面,基本上是同样的方式,只不过在代码部分写成swift风格的就行了. 今天在实验开发一个简单的小程序时,却遇到了一些bug,后来还是求助stackoverflow上的大神解决了问题,在此做下记录. 我的程序结构是这样的,在一个页面A中有个按钮,然后点击按钮以后,切换到另一个页面B.A和B都在同一个storyboard中. 这里先说下通用的方法: 手动用代码建好的view

ViewController 之间的切换

1 -(IBAction)btnRegisterClicked:(id)sender 2 { 3 if(secondViewController==nil) 4 { 5 secondViewController = [[SecondViewController alloc] initWithNibName:nil bundle:nil]; 6 } 7 8 [self.view.superview addSubview:secondViewController.view]; 9 [self.vie