Selenium-处理各种下拉框问题

在页面自动化中,定位下拉框筛选项是避免不了的,下面就给大家介绍几个定位不同下拉框的方法

第一种:鼠标悬停下拉框(以百度新闻为例)


思路:先找到设置这两个字符;然后把鼠标悬停在设置这个字符上,弹出下拉选项;然后在弹出的下拉框中点击选择某一个选项;
方法:使用selenium的ActionChains

# -*- coding:utf-8 -*- 
import time
from selenium import webdriver
from selenium.webdriver import ActionChains #导入这个模块

browser = webdriver.Chrome()
browser.set_window_size(1920, 1080)
browser.get("http://news.baidu.com/") #打开百度新闻页面
time.sleep(1)
browser.find_element_by_id("ww").send_keys("广州")
browser.find_element_by_class_name("btn").click()
time.sleep(3)
set_button=browser.find_element_by_class_name("search_set") #找到设置这两个字符
ActionChains(browser).move_to_element(set_button).perform() #鼠标悬停在设置这两个字符上
browser.find_element_by_link_text("高级搜索").click() #选择高级搜索这个选项,并点击

第二种:普通点击下拉框(以百度新闻排序为例)



思路:先找到排序筛选框;然后鼠标点击筛选框,弹出下拉选项;然后在弹出的下拉框中点击选择某一个选项;
方法:使用selenium的Select


# -*- coding:utf-8 -*-
import time
from selenium import webdriver
from selenium.webdriver.support.select import Select

browser = webdriver.Chrome()
browser.set_window_size(1920, 1080)
browser.get("http://news.baidu.com/") #打开百度新闻页面
time.sleep(1)
browser.find_element_by_link_text("高级搜索").click() #点击进入高级检索页面
set_sort=browser.find_element_by_css_selector("select[name='ct1']") #找到这个排序筛选框
Select(set_sort).select_by_value("0") #切换成按时间排序

这就完成了,so easy,但是你有没想过,如果是新的窗口页面里面的某个下拉框,改方法是否也适用呢,答案是不,那怎么办呢,接下来继续讲解:

这里面,我们需要了解selenium的一个术语:句柄;
句柄,就是当前浏览器每个窗口的标识符,每个窗口的句柄具有唯一性;
接下来先做一个小实验,证明一下为啥需要用到句柄:

还是以百度新闻为例:



 -*- coding:utf-8 -*-
import time
from selenium import webdriver

browser = webdriver.Chrome()
browser.set_window_size(1920, 1080)
browser.get("http://news.baidu.com/") #打开百度新闻页面
time.sleep(1)
handles = browser.window_handles #获取所有窗口的句柄
print("当前窗口的句柄",handles )  #这里输出所有窗口的句柄,当前只有一个窗口,所以输出的是当前窗口的句柄
browser.find_element_by_link_text("百度新闻客户端").click() #在百度新闻页面基础上(新窗口)打开百度新闻客户端页面
handles = browser.window_handles #获取所有窗口的句柄
print("全部窗口的句柄",handles ) #这里会输出两个句柄信息,以list的方式返回

到这里,我们怎么知道当前标记的是哪个窗口的句柄呢(就是读取哪个窗口的代码)?我们可以关闭一个窗口,如果某个窗口被关闭了,那就证明标记的是哪个窗口的句柄,在后面增加下面这行代码

browser.close() #关闭当前标识的窗口
handles = browser.window_handles #获取所有窗口的句柄
print("全部窗口的句柄",handles )

我们会发现就算打开了新的窗口,并在页面上跳转到新的窗口,但是关闭的窗口仍然是最初始的窗口,所以这就证明由始至终都是标识第一个窗口的句柄,那我们就要在进行后面一系列操作之前,先标识到新窗口的句柄

还是以百度新闻的排序筛选框为例,结合悬停下拉框

# -*- coding:utf-8 -*-
import time
from selenium import webdriver
from selenium.webdriver import ActionChains #导入这个模块

browser = webdriver.Chrome()
browser.set_window_size(1920, 1080)
browser.get("http://news.baidu.com/") #打开百度新闻页面
time.sleep(1)
browser.find_element_by_id("ww").send_keys("广州")
browser.find_element_by_class_name("btn").click()
time.sleep(3)
set_button=browser.find_element_by_class_name("search_set") #找到设置这两个字符
ActionChains(browser).move_to_element(set_button).perform() #鼠标悬停在设置这两个字符上
browser.find_element_by_link_text("高级搜索").click() #选择高级搜索这个选项,并点击
handles = browser.window_handles #获取所有窗口的句柄
browser.switch_to.window(handles[1]) #切换到新窗口的句柄,从0开始,第一个窗口就是0,第二个(新)窗口就是1,以此类推
set_sort=browser.find_element_by_css_selector("select[name='ct1']") #找到这个排序筛选框
Select(set_sort).select_by_value("0") #切换成按时间排序
这样子,我们就可以在新窗口进行一系列的操作啦,当然,切换窗口,也可以使用重定向的方式,关注我,后续再介绍哈!!!
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,716评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,558评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,431评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,127评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,511评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,692评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,915评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,664评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,412评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,616评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,105评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,424评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,098评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,096评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,869评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,748评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,641评论 2 271

推荐阅读更多精彩内容

  • 摘要: 之前用Selenium做UI自动化测试从初学到熟练碰到过很多问题,这里就不一一细说了,所以把最基本的操作都...
    Vicky_习惯做唯一阅读 11,257评论 1 23
  • 这篇文章在介绍官网的同时使用了比较多的脚本示例,示例里遇到的问题有部分在本篇文章进行了解释,还有一篇文章专门记录了...
    顾顾314阅读 12,791评论 3 32
  • 1 控制浏览器 Selenium 主要提供的是操作页面上各种元素的方法,但它也提供了操作浏览器本身的方法,比...
    古佛青灯度流年阅读 21,834评论 6 66
  • 昨天突然想学学 Selenium,就上网查了一些介绍,发现一些教程基本都是比较老版本的了,使用起来略有不便,所以今...
    顾顾314阅读 15,589评论 3 15
  • refer 朝天椒的夏天 一.selenium入门概念篇 最近开始接触selenium,刚开始时仅仅是知道它是一个...
    mcdullsnow阅读 1,272评论 0 9