Selenium2+python自动化26-js处理内嵌div滚动条

前言

    前面有篇专门用js解决了浏览器滚动条的问题,生活总是多姿多彩,有的滚动条就在页面上,这时候又得仰仗js大哥来解决啦。

一、内嵌滚动条

    1.下面这张图就是内嵌div带有滚动条的样子,记住它的长相。

    2.页面源码如下:(老规矩:copy下来,用文本保存下来,后缀改成.html,用浏览器打开)

<!DOCTYPE html>
<meta charset="UTF-8"> <!-- for HTML5 -->
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<html>
<head>
<style type="text/css">

div.scroll
{
background-color:#afafaf;
width:500px;
height:100px;
overflow:auto;
}


</style>
</head>

<body>
<p>个人微信公众号:yoyoketang</p>
<p>这是一个内嵌的div滚动条</p>
<div id="yoyoketang" name="yoyo" class="scroll">这是一个内嵌div:民国年间,九大家族镇守长沙,被称为“九门提督”。这九门势力庞大,外八行的无人不知,无人不晓,几乎所有冥器,流出长沙必然经过其中一家。
1933年秋,一辆神秘鬼车缓缓驶入长沙火车站,九门之首“张大佛爷”张启山身为布防官,奉命调查始末。张启山与八爷齐铁嘴一路探访,发现长沙城外有一座疑点重重的矿山,一直被日本人窥伺。
为破解矿山之谜,张启山求助同为九门上三门的戏曲名伶二月红,无奈二月红虽出身考古世家,却心系重病的妻子丫头,早已金盆洗手。张启山为了国家大义和手足之情,北上去往新月饭店为二月红爱妻求药。在北平,张启山邂逅了新月饭店的大小姐尹新月,并为尹新月连点三盏天灯,散尽家财。尹新月帮助张启山等人顺利返回长沙,二人暗生情愫。二月红爱妻病入膏肓,服药后不见好转,最终故去。
二月红悲伤之余却意外发现家族祖辈与矿山亦有重大关联,于是振作精神,决定与张启山联手,解开矿山之谜zhegedancihenchanghenchangchangchangchangchanchanchanchangchangchangchancg</div>

</body>
</html>

 

二、纵向滚动

    1.这个是div的属性:<div id="yoyoketang" name="yoyo" class="scroll">

    2.这里最简单的通过id来定位,通过控制 scrollTop的值来控制滚动条高度

    3.运行下面代码,观察页面是不是先滚动到底部,过五秒再回到顶部。(get里面地址是浏览器打开该页面的地址)

 

三、横向滚动

    1.先通过id来定位,通过控制scrollLeft的值来控制滚动条高度

 

四、用class属性定位

    1.js用class属性定位,返回的是一个list对象,这里取第一个就可以了。

    2.这里要注意了,element和elements有很多小伙伴傻傻分不清楚。


有时候很多元素属性都一样时候,就可以用复数定位,取对应的第几个就可以了

在学习过程中有遇到疑问的,可以加selenium(python+java) QQ群交流:646645429

《selenium+python高级教程》已出书:selenium webdriver基于Python源码案例

(购买此书送对应PDF版本)

 

转载于:https://www.cnblogs.com/yoyoketang/p/6188582.html

<think>我们正在处理一个关于Selenium如何操作页面内嵌滚动条的问题。用户提供的引用中包含了几个与Selenium滚动操作相关的代码片段,我们可以从中提取有用的信息。 根据引用[1]中的代码,我们可以看到有几种滚动页面的方法: 1. 使用`window.scrollTo`来滚动整个页面(到底部或顶部) 2. 使用`arguments[0].scrollIntoView()`来滚动到特定的元素 但是,用户的问题是关于“内嵌滚动条”(inner scroll bar),这通常是指页面中某个元素内部的滚动条(如div等元素),而不是整个页面的滚动条处理内嵌滚动条的方法与整个页面的滚动有所不同。我们需要先定位到具有滚动条的元素,然后在该元素上执行滚动操作。 以下是一些可能的解决方案: 1. 使用JavaScript直接操作元素的滚动属性(如scrollTop, scrollLeft)。 2. 使用Selenium的ActionChains来模拟鼠标操作(如拖动滚动条),但这种方法通常比较复杂且不稳定。 推荐使用JavaScript的方式,因为它更直接且可靠。 示例代码: 假设我们有一个内嵌滚动条的元素,我们可以这样操作: ```python # 先定位到内嵌滚动条所在的元素 inner_element = driver.find_element_by_id("inner_scroll_element") # 使用JavaScript设置该元素的滚动条位置(垂直滚动到最底部) driver.execute_script("arguments[0].scrollTop = arguments[0].scrollHeight", inner_element) # 如果要滚动到顶部 driver.execute_script("arguments[0].scrollTop = 0", inner_element) # 如果要水平滚动 # driver.execute_script("arguments[0].scrollLeft = arguments[0].scrollWidth", inner_element) # driver.execute_script("arguments[0].scrollLeft = 0", inner_element) ``` 另外,我们也可以使用`scrollIntoView`方法滚动到该元素内部的某个子元素,这样就会自动将滚动条滚动到该子元素可见的位置。 例如,我们想滚动到内嵌元素内部的某个子元素: ```python child_element = inner_element.find_element_by_id("child_element") driver.execute_script("arguments[0].scrollIntoView();", child_element) ``` 注意:如果内嵌滚动条所在的元素是一个iframe,那么我们需要先切换到该iframe,然后再操作内部的元素。 引用[4]中提到了多窗口切换,同样,如果滚动条在iframe中,我们需要先切换: ```python driver.switch_to.frame("iframe_id_or_name") # 然后操作内部元素 inner_element = driver.find_element_by_id("inner_scroll_element") driver.execute_script("arguments[0].scrollTop = arguments[0].scrollHeight", inner_element) # 操作完成后,如果需要切换回主文档 driver.switch_to.default_content() ``` 总结步骤: 1. 定位到内嵌滚动条所在的元素(或者先切换到iframe,如果滚动条在iframe内)。 2. 使用`execute_script`执行JavaScript代码来滚动该元素内部的滚动条。 相关问题: 1. 如何判断一个元素是否有滚动条2. 如何使用Selenium模拟鼠标拖动滚动条? 3. 如何处理动态加载内容的滚动条(无限滚动)?</think>### 使用Selenium处理内嵌滚动条的方法 在Selenium处理内嵌滚动条(如div容器内的滚动条)需要通过JavaScript直接操作DOM元素的滚动属性。以下是具体实现方法: #### 1. **定位内嵌滚动容器** 先确定包含滚动条的元素(通常是div): ```python # 通过CSS选择器定位 scroll_container = driver.find_element(By.CSS_SELECTOR, "div.scrollable-class") # 通过ID定位 scroll_container = driver.find_element(By.ID, "scrollable-div-id") ``` #### 2. **垂直滚动操作** ```python # 滚动到底部 driver.execute_script("arguments[0].scrollTop = arguments[0].scrollHeight", scroll_container) # 滚动到顶部 driver.execute_script("arguments[0].scrollTop = 0", scroll_container) # 滚动到指定位置(如300px) driver.execute_script("arguments[0].scrollTop = 300", scroll_container) ``` #### 3. **水平滚动操作** ```python # 滚动到最右侧 driver.execute_script("arguments[0].scrollLeft = arguments[0].scrollWidth", scroll_container) # 滚动到最左侧 driver.execute_script("arguments[0].scrollLeft = 0", scroll_container) ``` #### 4. **滚动到内部特定元素** ```python inner_element = scroll_container.find_element(By.CLASS_NAME, "target-element") driver.execute_script("arguments[0].scrollIntoView()", inner_element) ``` #### 5. **平滑滚动(CSS动画)** ```python js = """ arguments[0].scrollTo({ top: arguments[1], behavior: 'smooth' }); """ driver.execute_script(js, scroll_container, 500) # 滚动到500px位置 ``` #### ⚠️ 注意事项 1. **内嵌框架处理**:如果滚动条在iframe内,需先切换: ```python driver.switch_to.frame("iframe-id") # 操作滚动条... driver.switch_to.default_content() # 切回主文档[^4] ``` 2. **动态内容加载**:滚动后添加等待时间确保内容加载: ```python from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC WebDriverWait(driver, 10).until( EC.visibility_of_element_located((By.CLASS_NAME, "new-content")) ) ``` ### 完整示例 ```python from selenium import webdriver from selenium.webdriver.common.by import By driver = webdriver.Chrome() driver.get("https://example.com/page-with-inner-scroll") # 定位滚动容器 scroll_div = driver.find_element(By.ID, "scrollable-area") # 滚动到底部加载内容 driver.execute_script("arguments[0].scrollTop = arguments[0].scrollHeight", scroll_div) # 滚动到内部按钮并点击 button = scroll_div.find_element(By.CSS_SELECTOR, ".load-more-btn") driver.execute_script("arguments[0].scrollIntoView({block: 'center'});", button) button.click() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值