缘由 通常我们的爬取页面的时候会碰到滚动条无限可以下拉的情况. 浏览器自带外边的滚动条 解决方法:思路就是用scrollBy一直下拉滚动条,然后scrollTop会一直变化,当scrollTop不变时,
缘由
浏览器自带外边的滚动条
- 解决方法:思路就是用scrollBy一直下拉滚动条,然后scrollTop会一直变化,当scrollTop不变时,说明就到底了。跳出循环即可。
- 代码复现:
from selenium import webdriver
def main():
driver = webdriver.Chrome()
driver.maximize_window()
driver.get('<https://tophub.today/c/news>')
# driver.find_element_by_id('kw').send_keys('python滚动条的高度')
# time.sleep(1)
# driver.find_element_by_id('su').click()
time.sleep(2)
# 定义一个初始值
temp_height = 0
while True:
# 循环将滚动条下拉
driver.execute_script("window.scrollBy(0,300)")
# sleep一下让滚动条反应一下
time.sleep(2)
# 获取当前滚动条距离顶部的距离
check_height = driver.execute_script(
"return document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop;")
# 如果两者相等说明到底了
if check_height == temp_height:
break
temp_height = check_height
print(check_height)
driver.quit()
if __name__=="__main__":
main()
内嵌滚动条,循环下滑到最底部
- 代码复现:
from selenium import webdriver
import time
driver=webdriver.Chrome()
driver.get('file:///Users/starrysky/Desktop/PythonProject/spider_slide_bottom/web/index.html')
time.sleep(2)
# 竖向滚动条操作
js1='var q=document.getElementById("yoyoketang").scrollTop = 10000'
driver.execute_script(js1)
time.sleep(2)
js2='var q=document.getElementById("yoyoketang").scrollTop = 0'
driver.execute_script(js2)
time.sleep(2)
# 横向滚动条操作
js3='var q=document.getElementById("yoyoketang").scrollLeft = 10000'
driver.execute_script(js3)
time.sleep(2)
js4='var q=document.getElementById("yoyoketang").scrollLeft = 0'
driver.execute_script(js4)
time.sleep(2)
# 用classname
js5 = "var q=document.getElementsByClassName('scroll')[0].scrollTop = 10000"
driver.execute_script(js5)
js6 = "var q=document.getElementsByClassName('scroll')[0].scrollLeft = 10000"
driver.execute_script(js6)
- 参数化(想实现每次下滑一页,但是找不到这个高度,以后找到方法再优化)
from selenium import webdriver
import time
driver=webdriver.Chrome()
driver.get('file:///Users/starrysky/Desktop/PythonProject/spider_slide_bottom/web/index.html')
time.sleep(2)
for i in range(0, 6000, 850):
js5 = "var q=document.getElementsByClassName('ag-body-viewport ag-layout-normal ag-row-animation')[0].scrollTop={}".format(
i)
print("===>", i)
driver.execute_script(js5)
time.sleep(2)
- 页面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>欢迎你</p>
<p>这是一个内嵌的div滚动条</p>
<div id="yoyoketang" name="yoyo" class="scroll">这是一个内嵌div:高考,见证过一代代人的青春时光,承载着万千家庭的期盼与梦想。它是一段难忘的回忆,浸透着汗水,有关理想与现实,勇气和坚持。
人们总说高考是人生的一次重大转折,虽然,一张张考卷早已不是决定个人前途命运的唯一凭证,更不是成才的唯一钥匙,但它依然寄托着莘莘学子不负青春的誓言。
今天,我们讲述的是一组平凡的故事,它映射着每个人心中的那份美好,以及在困境面前守望相助永不言弃的精神。zhegedancihenchanghenchangchangchangchangchanchanchanchangchangchangchancg</div>
</body>
</html>