Dimples's blog Dimples's blog
首页
  • 前端随笔

    • React
  • 系列文章

    • 《ES6 教程》笔记
    • 《Vue》笔记
    • 《TypeScript》笔记
  • 后端文章

    • Java
    • Python
    • 数据库
  • 学习笔记

    • 《Rust》笔记
    • 《SpringBoot》笔记
    • 《Django》笔记
    • 《Docker》笔记
    • 《Python爬虫》笔记
技术分享
友情链接
索引
关于
GitHub (opens new window)

DimplesY

不会写代码
首页
  • 前端随笔

    • React
  • 系列文章

    • 《ES6 教程》笔记
    • 《Vue》笔记
    • 《TypeScript》笔记
  • 后端文章

    • Java
    • Python
    • 数据库
  • 学习笔记

    • 《Rust》笔记
    • 《SpringBoot》笔记
    • 《Django》笔记
    • 《Docker》笔记
    • 《Python爬虫》笔记
技术分享
友情链接
索引
关于
GitHub (opens new window)
  • 爬虫介绍
  • 工具的使用
  • 爬取数据-urllib库
  • urllib库的高级用法
  • URLError与Cookie
  • Requests库的用法
  • 数据提取-正则表达式
  • 数据提取-Beautiful Soup
  • 数据提取-XPath
  • 数据提取-JsonPath
  • 数据提取-PyQuery
  • 爬虫之多线程
  • Selenium与PhantomJS
  • Selenium 处理滚动条
  • Python下Tesseract Ocr引擎及安装介绍
  • Scrapy 框架介绍与安装
  • 《Python爬虫》笔记
DimplesY
2022-03-08

Selenium 处理滚动条

# Selenium 处理滚动条

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

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

# 一. 控制滚动条高度
# 1.1 滚动条回到顶部:
js="var q=document.getElementById('id').scrollTop=0"
driver.execute_script(js)
# 1.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)
# 二.横向滚动条
# 2.1 有时候浏览器页面需要左右滚动(一般屏幕最大化后,左右滚动的情况已经很少见了)
# 2.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()


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
帮助我修改此页面 (opens new window)
#Python#爬虫
上次更新: 2022/11/20, 18:28:09
Selenium与PhantomJS
Python下Tesseract Ocr引擎及安装介绍

← Selenium与PhantomJS Python下Tesseract Ocr引擎及安装介绍→

最近更新
01
使用 strapi 快速构建 API 和 CMS 管理系统
03-03
02
Rust 开发环境
11-26
03
使用 paka.dev 为 npm 包生成文档
11-24
更多文章>
Theme by Vdoing | Copyright © 2020-2025 Dimples YJ | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式