selenium滚动条下滑操作(网易新闻案例)_selenium向下滑动
滚动滚动条到底部:
selenium进行滚轮滚动,并判断是否到底部_selenium 鼠标滚轮-CSDN博客
自动化测试——selenium(完结篇)_selenium自动化测试-CSDN博客
一、滚动条下拉的方法
driver.execute_script(\"windows.scrollBy(0,2000)\")
windows.scrollBy(0,2000):是js参数
Window scrollBy() 方法
定义和用法
scrollBy() 方法可把内容滚动指定的像素数。
语法
scrollBy(xnum,ynum)
参数 描述 xnum 把文档向右滚动的像素数 ynum 把文档向下滚动的像素数
二、js获取滚动条距离顶部的高度
//对有DOCTYPE申明的页面 可以使用:document.documentElement.scrollTop
//对没有DOCTYPE申明的页面 可以使用:document.body.scrollTop
//safair 比较特殊 可以使用:window.pageYOffset
var scroll = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop
三、selenium 点击的元素被遮挡无法操作的解决办法
问题描述:
在用selenium实现自动化的过程中,因为要提高效率,不可能等页面全部加载完毕才去进行下一步操作,一般是用显性等待,等需要操作的元素出现就行点击,但是有时候页面加载过程中的那些转动的进度条和进度圈之类的东西会遮挡你要点击的要素,导致无法点击或者报错,需要js进行处理
解决方案:
使用JS脚本来点击,不用selenium点击。
more = driver.find_element(By.XPATH, \'//div\') # 使用JS脚本来点击,能解决需要点击的元素被遮挡无法点击的情况。 driver.execute_script(\'arguments[0].click()\', more)
第一步还是使用selenium常规方法获取需要操作的对象
第二步直接用selenium支持的JS脚本方法点击,\'arguments[0].click()\'是固定的,后面的点击对象替换即可。
四、网易新闻案例
import randomimport timefrom selenium.webdriver import Chromedef window_top_to_bottom(driver, stop_length=None, step_length=500): \"\"\" :param driver: :param stop_length: 表示需要滚动的总距离。如果不指定,则会一直滚动到页面底部 :param step_length: 每次滚动的步长 :return: \"\"\" top = 0 while True: # 判断stop_length为真还是假 也就是是否还有滑动的距离 if stop_length: if stop_length - step_length < 0: print(f\'滑行距离小于500的值:{stop_length}\') driver.execute_script(\'window.scrollBy(0,{})\'.format(stop_length)) break stop_length -= step_length print(f\"stop_length:{stop_length}\") # 循环滚动条下拉操作 driver.execute_script(\'window.scrollBy(0,{})\'.format(step_length)) # 滚动条距离顶端的距离 check_height = driver.execute_script(\'return document.documentElement.scrollTop || document.body.scrollTop || \' \'window.pageYOffset;\') print(f\"check_height:{check_height}\") # 暂停程序一段时间,模拟用户操作 time.sleep(random.random() + 0.5) # 判断如果当前滚动条位置和上一次相同,说明页面无法再滚动,跳出循环;否则,更新 top 的值 if check_height == top: break top = check_height print(\'不在滑动\') driver = Chrome()driver.get(\'https://news.163.com/\')# 写一个程序 处理滚动条向下滑动for i in range(1, 5): try: # 向下滚动操作 window_top_to_bottom(driver, 20000, 1000) # 走到这里 证明该点击了 more = driver.find_element(By.XPATH, \'//*[@id=\"index2016_wrap\"]/div[2]/div[2]/div[3]/div[2]/div[5]/div/a[3]\') # 坑 因为有些点击按钮上面会有遮罩,我们看不到,点击会报错 需要js进行处理 # more.click() # 使用js进行点击 driver.execute_script(\'arguments[0].click();\', more) time.sleep(random.random() + 0.5) print(f\'第{i}次点击\') except: print(\'已经加载更多了\') break# print(driver.page_source)time.sleep(100)
- 演示