第十六天:Selenium 处理滚动条

selenium并不是万能的,有时候页面上操作无法实现的,这时候就需要借助JS来完成了

当页面上的元素超过一屏后,想操作屏幕下方的元素,是不能直接定位到,会报元素不可见的。这时候需要借助滚动条来拖动屏幕,使被操作的元素显示在当前的屏幕上。滚动条是无法直接用定位工具来定位的。selenium里面也没有直接的方法去控制滚动条,这时候只能借助J了,还好selenium提供了一个操作js的方法:execute_script(),可以直接执行js的脚本

一. 控制滚动条高度

1. 滚动条回到顶部:

js="var q=document.getElementById('id').scrollTop=0"
driver.execute_script(js)

2. 滚动条拉到底部

js="var q=document.documentElement.scrollTop=10000"
driver.execute_script(js)

可以修改scrollTop 的值,来定位右侧滚动条的位置,0是最上面,10000是最底部

以上方法在Firefox和IE浏览器上上是可以的,但是用Chrome浏览器,发现不管用。Chrome浏览器解决办法:

js = "var q=document.body.scrollTop=0"
driver.execute_script(js)

二.横向滚动条

1. 有时候浏览器页面需要左右滚动(一般屏幕最大化后,左右滚动的情况已经很少见了)
2. 通过左边控制横向和纵向滚动条scrollTo(x, y)

js = "window.scrollTo(100,400)"
driver.execute_script(js)

三.元素聚焦

虽然用上面的方法可以解决拖动滚动条的位置问题,但是有时候无法确定我需要操作的元素在什么位置,有可能每次打开的页面不一样,元素所在的位置也不一样,怎么办呢?这个时候我们可以先让页面直接跳到元素出现的位置,然后就可以操作了

同样需要借助JS去实现。 具体如下:

target = driver.find_element_by_xxxx()
driver.execute_script("arguments[0].scrollIntoView();", target)

四. 参考代码

from selenium import webdriver
from lxml import etree
import time
​
url = "https://search.jd.com/Search?keyword=%E7%AC%94%E8%AE%B0%E6%9C%AC&enc=utf-8&wq=%E7%AC%94%E8%AE%B0%E6%9C%AC&pvid=845d019c94f6476ca5c4ffc24df6865a"
# 加载浏览器
wd = webdriver.Firefox()
# 发送请求
wd.get(url)
# 要执行的js
js = "var q = document.documentElement.scrollTop=10000"
# 执行js
wd.execute_script(js)
​
time.sleep(3)
# 解析数据
e = etree.HTML(wd.page_source)
# 提取数据的xpath
price_xpath = '//ul[@class="gl-warp clearfix"]//div[@class="p-price"]/strong/i/text()'
# 提取数据的
infos = e.xpath(price_xpath)
​
print(len(infos))
# 关闭浏览器
wd.quit()
​

### 使用Selenium实现网页滚动条操作 在HTML页面中,一些元素为动态显示,只有当滚动条到达特定位置时才会加载这些元素。为了确保能够与这类动态内容交互,Selenium提供了多种方式来控制浏览器窗口的滚动条。 #### 方法一:使用JavaScript执行器进行全局滚动 对于整个页面的滚动,可以直接利用JavaScript代码片段通过`execute_script()`函数来进行。这种方式适用于大多数情况下的页面滚动需求[^1]: ```python from selenium import webdriver driver = webdriver.Chrome() driver.get('https://example.com') # 向下滚动到底部 driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") # 返回顶部 driver.execute_script("window.scrollTo(0, 0);") ``` #### 方法二:定位具体元素并使其进入视野 如果目标是在某个特定区域内找到一个隐藏的对象,则可以让它自动出现在屏幕中央以便于后续的操作。此方法特别适合处理那些位于不可见部分但又必须先显现出来的组件[^3]: ```python target_element = driver.find_element_by_id('element-id') driver.execute_script("arguments[0].scrollIntoView(true);", target_element) ``` #### 方法三:模拟用户行为触发局部区域滚动 有时页面设计会使得某些控件仅在其父容器内可滚动而非整体文档流的一部分。这时就需要采用更灵活的办法——比如模仿真实用户的按键动作或者鼠标事件来促使相应区块发生位移变化[^4]: ```python import time from selenium.webdriver.common.keys import Keys html = driver.find_element_by_tag_name('html') for _ in range(5): # 假设需要按五次Page Down键才能看到想要的内容 html.send_keys(Keys.PAGE_DOWN) time.sleep(0.5) # 或者使用ActionChains类创建复杂的链式操作序列 from selenium.webdriver import ActionChains actions = ActionChains(driver) actions.move_to_element(target_element).perform() # 将光标移到指定元素上从而引起其周围环境的变化 ``` 以上就是几种常见的基于Python语言环境下运用Selenium库对Web应用实施自动化测试过程中涉及到的不同类型的滚动栏操控技巧介绍。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

穿梭的编织者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值