Python selenium ActionChains 库(模拟鼠标悬浮)和 Select 库(分级菜单选择)的应用实践

selenium 是浏览器自动化测试框架,可以控制浏览器,模仿人浏览,操作网页,从而获取数据,自动操作等。

以下3个实践视频 : https://weibo.com/2203755810

1. 百度的应用 :

#1:
selenium登陆百度主页,暂停下一步程序运行,加入sleep(), 目的为了主页完成完整的加载,这里设置为 3。


#2:
在主页面有一个 ”设置“的选项,当鼠标点在”设置“上,会弹出它的分级菜单, 如下图1 。

打开 HTML 源代码,发现 "设置”是写在一个 非自闭合的 span label 里,而其它的分级菜单, 嵌套在 一个 div 的块区域 label 里,每个分级菜单,是一个独立的带超链接的 a label , 如下图2

因此在这个分级菜单,如果要定位相关的元素,只能用定位的方法,不可以用 Select 库的方法(下面的 Select 库例子会提到),否则会出现 如下图3 的报错。

先通过 ActionChains 的 move 方法,移到“设置” 所定位的位置选项上,然后再定位“高级搜索”,最后用 ActionChains的 click 方法实现选择“高级搜索”,弹出 如下图4 的对话框,最后设置 sleep(), 随便设置为3。

ActionChians的方法还有好多,具体可以通过官方简书查看说明,或者通过它的库帮助提示去看看,如下图5,具体弹出方法有两种, 一种是 按着 “Ctrl” 然后鼠标移到 库名上,会自动变成一个带手指的超链接,另外一种是,把库名 highlight 后,会弹出帮助提示的超链接,如下图6


#3:
在 “高级搜索里”,先定位 “包含全部关键词”,如下图7,然后 通过 send_keys() 方法,输入所需要搜索的内容。

然后再定位 “全部时间”,如下图8,再通过 click()方法打开下拉的分级菜单。例如要选择 “最近一周”,先定位这一选项的位置。
根据Element 的 显示,每个分选项都是一个独立的 p label, 而且都带有相同的 属性名class 和属性值 c-select-item。 如下图9

同时,也看到 这些的 p label 都是嵌套在 class= c-select-dropdown-list 的 div label 下。如果要定位 “最近一周”, 有两种方法。

(1) 先定位 class= c-select-dropdown-list 的 div label,然后通过循环,用 index 的方法,筛选出 " 最近一周” 的 label

(2) 另外一种,就是通过 CSS 选择器,直接一步定位,如下面代码。

定位了“最近一周”后,通过 click()方法,点击选择后,设置 sleep(), 随便设置为3,暂缓下一步程序。


#4:
定位“ 高级搜索” (也就是 submit ),然后 click() 点击,最后新建新的搜索结果页面,如下图10

注: ActionChians 方法,最后切记要 添加 perform() 方法去执行


图1
在这里插入图片描述


图2

在这里插入图片描述

图3

在这里插入图片描述

图4

在这里插入图片描述

图5

在这里插入图片描述


图6

在这里插入图片描述


图7

在这里插入图片描述


图8

在这里插入图片描述

图9

在这里插入图片描述

图10
在这里插入图片描述

from selenium import webdriver
from selenium.webdriver import ActionChains
import time

#1
browser = webdriver.Chrome()
browser.get(‘https://www.baidu.com’)
time.sleep(3)


#2
ActionChains(browser).move_to_element(browser.find_element_by_id(‘s-usersetting-top’)).perform()


ActionChains(browser).click(browser.find_element_by_link_text(‘高级搜索’)).perform()
time.sleep(3)


#3

adv_input = browser.find_element_by_id(‘adv_keyword’)
adv_input.send_keys(‘testing’)

time_zone = browser.find_element_by_class_name(‘c-select-selected-value’)

time_zone.click()
time.sleep(3)

last_week = browser.find_element_by_css_selector(’#adv-setting-gpc > div > div.c-select-dropdown > div.c-select-dropdown-list > p:nth-child(3)’)

last_week.click()
time.sleep(3)


#4

adv_search = browser.find_element_by_class_name(‘advanced-search-btn’)

adv_search.click()



2.新浪的应用 :


#1:
selenium登陆新浪首页,同样加入 sleep() 让网页有足够的时间去加载完整。


#2:
网页上,分别有 “图片”,“专栏”,“热点” 3个板块

其中如果用鼠标点去 “图片”和 “专栏”位置,会有另外一个页面弹出, 但点去“热点" 却没有。因为根据Element结构,“图片”,“专栏"都有相关的 href 超链接的 a label ,热点却只有 span label, 所以点去”热点”,没有发生自动跳转去另外一个页面, 如下图1

直接用 CSS 选择器,给“ 热点”定位,然后用 ActioanChians 的 move() 方法,移动定位的位置。


#3:
例如选择“热点”下的第2张图片,直接用CSS 选择器先把这图片定位, 如下图2, 最后用 ActionChains 的 click() 方法实现打开图片的超链接。


图1

在这里插入图片描述

图2

在这里插入图片描述

from selenium import webdriver
from selenium.webdriver import ActionChains
import time


#1

browser = webdriver.Chrome()
browser.get(‘https://www.sina.com.cn’)
time.sleep(3)


#2

ActionChains(browser).move_to_element(browser.find_element_by_css_selector(‘body > div.main > div.part-a.clearfix > div.part-a-m > div.mod-04.uni-blk > div.uni-blk-t.clearfix > div > div > span:nth-child(3)’)).perform()


#3

ActionChains(browser).click(browser.find_element_by_css_selector(’#fc_B_hot > div > a:nth-child(2)’)).perform()

注: ActionChians 方法,最后切记要 添加 perform() 方法去执行


3. Select库,下拉分级菜单鼠标悬浮应用


#1:
登陆相关主页,以 http://www.edu0574.com/nbuckcj.asp为例,加入 sleep() 让网页有足够的时间去加载完整。


#2:
“考试年月” 有一个下拉的分级菜单项,首先对它定位。
根据 Element 结构,看到 它是一个 select label, 每个分选项都是一个独立的 option label, 而且带有 value 属性值,都是嵌套在 select label里, 如下图1


#3:
最后用 Select库的 select_by_value()方法,去选择所需要的项,例如 2019 。

Select 库里,还有其它的方法,例如 by_index() by_visible_text 等等,具体查找方法,如上面 ActionChains 库查找方法一样。

Select库适用于大多数有下拉的分级菜单,但具体要看 Element 结构,不一定所有都可以的,以 新浪为例

在新浪的首页,有一个“新闻”的 下拉菜单,在 Element 结构里,这个element 同样是 建立在一个 select label, 分级菜单的每一个选项,也是一个独立的 option label, 而且有 value 属性值,但由于在 select label 里,有一个非可视设置,style=“display: none;” 如下图2,,导致如果用 Select 库时,会出现报错 : element not interactable : Element is not currently visible and may not be manipulated, 大概意思就是 selenium 检测到所定位的 element 设置了非可视属性, 如下图3


图1
在这里插入图片描述


图2
在这里插入图片描述

图3

在这里插入图片描述

from selenium import webdriver
from selenium.webdriver.support.select import Select
import time

#1:
browser = webdriver.Chrome()
browser.get(‘http://www.edu0574.com/nbuckcj.asp’)
time.sleep(2)


#2:
option = browser.find_element_by_name(‘kspc’)


#3:
Select(option).select_by_value(‘2019’)

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Python Selenium ActionChains是一个Selenium中的类,用于模拟用户在网页上的鼠标和键盘操作。它可以用于自动化测试和网页爬虫等场景,可以实现一些复杂的交互操作,如鼠标悬停、拖拽、双击等。使用ActionChains需要先创建一个ActionChains对象,然后通过链式调用方法来模拟用户的操作。 ### 回答2: Python Selenium ActionChains是一个非常有用的,可以用于模拟用户交互行为,例如鼠标移动、点击、拖拽等。ActionChains可以让程序模拟用户按下某个键盘键、鼠标移动、鼠标点击等一系列动作,从而实现快速测试和模拟用户使用浏览器的行为。 使用Python Selenium ActionChains的步骤如下: 1. 导入seleniumActionChains,在代码开头加入以下代码 from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains 2. 创建一个WebDriver对象,打开一个浏览器窗口 driver = webdriver.Chrome() 3. 执行一些基本的操作,例如前往某个网页 driver.get("http://www.baidu.com") 4. 创建一个ActionChains对象,可以执行一系列的鼠标或键盘事件 actions = ActionChains(driver) 5. 添加行动到ActionChains队列中 actions.click() #鼠标点击 actions.move_to_element(element) #鼠标移动到某个元素 actions.drag_and_drop(element1, element2) #将元素1拖动到元素2的位置 6. 执行 ActionChains 操作 actions.perform() 7. 关闭窗口,退出浏览器 driver.quit() 通过 Python Selenium ActionChains,可以实现自动化测试和模拟用户交互行为的场景,这对于网页测试和爬虫应用开发非常有用。 ### 回答3: Python selenium actionchains是一个用于模拟鼠标和键盘操作的模块。通过actionchains,我们可以模拟点击、拖拽、鼠标悬停等操作,实现更为精准的Web自动化测试。 对于一些复杂的操作,如拖拽或者双击事件,利用selenium的webdriver完成的话,代码量线性上升,非常的麻烦和复杂。而ActionChains这个类的出现,使得我们可以实现更为自然和灵活地模拟鼠标和键盘操作。 actionchains的使用方法非常简单,首先需要导入ActionChains类,然后在需要操作的元素上执行需要的操作。例如,我们可以使用以下代码实现单击操作: from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains # 实例化webdriver driver = webdriver.Chrome() # 打开需要操作的网址 driver.get("http://www.example.com") # 通过CSS选择器定位元素 ele = driver.find_element_by_css_selector("button.btn") # 实例化ActionChainsaction = ActionChains(driver) action.click(ele).perform() 此外,actionchains还支持一系列其它操作,比如双击、右键单击、拖拽等。这些操作都可以通过ActionChains类实现,十分方便。 综上所述,Python selenium actionchains是一个十分实用的模块,可以帮助我们完成更为高效的Web自动化测试。它能够模拟各种鼠标和键盘操作,从而实现更为灵活和自然地控制浏览器行为。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值