当前位置 : 主页 > 编程语言 > python >

python爬虫问题滚动条/内嵌滚动条循环下滑

来源:互联网 收集:自由互联 发布时间:2022-06-24
缘由 通常我们的爬取页面的时候会碰到滚动条无限可以下拉的情况. 浏览器自带外边的滚动条 解决方法:思路就是用scrollBy一直下拉滚动条,然后scrollTop会一直变化,当scrollTop不变时,


缘由


通常我们的爬取页面的时候会碰到滚动条无限可以下拉的情况.


浏览器自带外边的滚动条


  • 解决方法:思路就是用scrollBy一直下拉滚动条,然后scrollTop会一直变化,当scrollTop不变时,说明就到底了。跳出循环即可。
  • 代码复现:
import time
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()


内嵌滚动条,循环下滑到最底部


  • 代码复现:
#encoding:utf-8
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)
  • 参数化(想实现每次下滑一页,但是找不到这个高度,以后找到方法再优化)
#encoding:utf-8
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代码
<!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>欢迎你</p>
<p>这是一个内嵌的div滚动条</p>
<div id="yoyoketang" name="yoyo" class="scroll">这是一个内嵌div:高考,见证过一代代人的青春时光,承载着万千家庭的期盼与梦想。它是一段难忘的回忆,浸透着汗水,有关理想与现实,勇气和坚持。
人们总说高考是人生的一次重大转折,虽然,一张张考卷早已不是决定个人前途命运的唯一凭证,更不是成才的唯一钥匙,但它依然寄托着莘莘学子不负青春的誓言。
今天,我们讲述的是一组平凡的故事,它映射着每个人心中的那份美好,以及在困境面前守望相助永不言弃的精神。zhegedancihenchanghenchangchangchangchangchanchanchanchangchangchangchancg</div>

</body>
</html>
上一篇:python中\u编码
下一篇:没有了
网友评论