python selenium安装、常用方法以及实现多页面抓取

1.配置

selenium的配置,在cmd窗口下载指定的版本
pip install selenium==3.141.0
打开自己的chrome浏览器,右上方三个点找到帮助-关于Google Chrome-查看浏览器的版本,我已将浏览器更新至最新版本

在这里插入图片描述
在https://registry.npmmirror.com/binary.html?path=chromedriver/,找到对应版本的驱动,只要前面的大版本不错,最后面的小版本差不多就可以,如果上面网址没有找到你浏览器对应的版本,也可以在https://googlechromelabs.github.io/chrome-for-testing/查找,但是这个网址需要国外代理访问
将下载下来的zip文件解压,将解压好的1-2个文件chromedriver(有的版本解压是1个,有的版本解压是2个)放置你你电脑中python.exe的文件夹中,并且将chromedriver.exe也放至chrome.exe的文件夹中,大部分人的chrome在C:\Program Files\Google\Chrome\Application\,可以自行查看

注意:如果你使用的不是chrome浏览器,需要下载对应的浏览器驱动

  1. 导入相应模块,创建浏览器实例
# 导入模块
from selenium import webdriver
# 下载selenium3.141.0版本

driver = webdriver.chrome('C:\\Program Files\\Google\\Chrome\\Application\\chromedriver.exe')
driver.get('https://www.baidu.com')
# 注意,我使用的时Chrome浏览器
  1. 通过xpath查询html内容
input = driver.find_element_by_xpath('//input[@id="kw"]')
input
# 找到id=kw的input
  1. 通过id或者class查找html中符合需求的内容
input_html = driver.find_element_by_id('kw')
input_html

input_html = driver.find_element_by_class_name('kw')
input_html

  1. 向输入框中发送要查询的信息
input_html.send_keys('上海有几大区')
  1. 代码实现点击按钮,查询内容
button = driver.find_element_by_xpath('//input[@id="su"]')
# 点击按钮查询内容
button.click()
  1. 代码实现鼠标滑动操作页面
    driver.execute_script(‘window.scrollBy(x,y)’),JavaScript实现滑动
# 三种滑动方式:
1.一次性滑动结束
driver.execute_script('window.scrollBy(0,500)')
# 线下滑动5000个像素

2.匀速滑动
import time
import random

for i in range(20):
	# 每次向下滑动100像素,滑动一次睡眠0.1秒
	driver.execute_script('window.scrollBy(0,100)')
	time.sleep(0.1)

3.不定速滑动
for i in range(20):
	height = random.randint(50,200)
	# 每次滑动的距离由random随机生成
	driver.execute_script(f'window.scrollBy(0.{height})')
	time.sleep(random.uniform(0,1))
  1. 获取标签对象的文本和属性
    xxx.text获取标签对象的文本
    xxx.get_attribute(‘属性名称’),得到属性的值
li_name## 获取网页中id=2的a标签文本内容
id_tag = driver.find_elements_by_id("2")
id_tag
#需要注意的是,上面有find_elements获取的id_tag是一个list对象,其没有find_xxx方法,必须通过下标访问到其中之一,才能使用find_element方法。
## 在找到id_tag中的a标签
driver.find_element_by_id("2").find_elements_by_tag_name("a")[0].text

# xpath的写法
id_content = driver.find_element_by_xpath('//div[@id="2"]//a')
id_content

# 获取属性值
print(id_content.get_attribute('href'))

# 获取文本内容
print("\n")
print(id_content.text)
  1. 最大最小化窗口,以及其他窗口处理
    driver.maximize_window() 最大化
    driver.minimize_window() 最小化
    driver.set_window_size(宽度,高度) 指定大小
    driver.set_window_position(距离左边,距离上面) 设置位置

    driver.get_window_size() 获取大小
    driver.get_window_position() 获取位置

    driver.close() 关闭当前窗口
    driver.back() 后退
    driver.fresh() 刷新页面
    driver.quit() 退出浏览器

  2. 窗口句柄与切换
    每打开一个Tab标签页,就会多一个窗口句柄
    除了点击,如何用代码打开一个新的标签页呢?
    driver.execute_script(‘window.open(“url”)’)

  3. 如何获取一个窗口句柄
    driver.window_handles 返回list
    list中就是所有的窗口句柄
    窗口句柄默认还是停留在之前的窗口中,它不像我们实际操作,已经换到新界面了。代码操作需要用代码的方式进行切换窗口,才能用代码控制对应的窗口。
    如果关闭了某个窗口,也需要切换到其他窗口才行

  4. 切换窗口
    driver.switch_to.window(具体的窗口句柄对象)
    通过driver.window_handles[index]获取窗口

driver.execute_script('window.open("https://music.163.com/")')

#  切换到打开的第二个窗口
driver.switch_to.window(driver.window_handles[1])


# 尝试滚动页面
# 发现纹丝不动
driver.execute_script('window.scrollBy(0,500)')
  1. 网页框架与切换
    网页内还有内嵌的网页,切换 iframe 层级
    切换到iframe内才可以浏览 iframe内的内容

    driver.switch_to.frame( xxx ) xxx: iframe的id

    或 iframe的name
    或 find_element_by_yyy()得到的对象

    切回到原始层级: driver.switch_to.default_content()

# 进入网易云飙升榜
# 切换 iframe
driver.switch_to.frame('g_iframe')

# 就可以控制了。如滚动
driver.execute_script("window.scrollBy(0,600)")

driver.find_element_by_class_name('f-ff2').text
  1. 关闭窗口
    driver.close()

  2. 键盘事件
    有时候需要一些键盘输入,比如,触发回车,数字等等
    有时候xxx.click()会失效,因为窗口滑动的位置,不能点击到我们想要点击的事件
    就可以用触发回车代替点击,需要导入键盘相关的类
    最终依然用xxx.send_keys()

# 导入与键盘相关的类
from selenium.webdriver.common.keys import Keys
# 通过输入Keys.按Tab提示,看有哪些键盘

driver.get('http://www.baidu.com')

shuru = driver.find_element_by_id('kw')

shuru.send_keys(Keys.NUMPAD3)
shuru.send_keys(Keys.NUMPAD8)
shuru.send_keys(Keys.ENTER)
  1. 获取网页解析后的 页面代码, 字符串格式
    driver.page_source

就可以 结合 正则 或者 bs4 转换与提取内容,速度比 纯 selenium提取快

  1. 完全退出浏览器¶
    driver.quit()

相关推荐

  1. C#页面一个实例

    2024-04-21 18:28:07       35 阅读
  2. 前端数组方法以及解释(手动整理)

    2024-04-21 18:28:07       40 阅读
  3. Python-字典的方法以及技巧-Dict

    2024-04-21 18:28:07       38 阅读
  4. 安全测试方式

    2024-04-21 18:28:07       52 阅读
  5. 【RabbitMQ高级功能详解以及插件实战

    2024-04-21 18:28:07       56 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-21 18:28:07       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-21 18:28:07       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-21 18:28:07       87 阅读
  4. Python语言-面向对象

    2024-04-21 18:28:07       96 阅读

热门阅读

  1. C#基础|StringBuilder字符串如何高效处理。

    2024-04-21 18:28:07       41 阅读
  2. 36-5 Python 编写poc基础

    2024-04-21 18:28:07       40 阅读
  3. 运维前端vue部署

    2024-04-21 18:28:07       38 阅读
  4. Android开发如何从入门进阶到架构

    2024-04-21 18:28:07       38 阅读
  5. linux下安装mysql和主从搭建_亲测成功

    2024-04-21 18:28:07       35 阅读
  6. 蓝桥杯第859题——旅行

    2024-04-21 18:28:07       38 阅读
  7. 【k8s】(四)kubernetes1.29.4离线部署之-组件安装

    2024-04-21 18:28:07       35 阅读
  8. ElasticSearchDSL

    2024-04-21 18:28:07       37 阅读
  9. 深度学习框架比较:TensorFlow vs PyTorch

    2024-04-21 18:28:07       40 阅读
  10. Flask、Django和Tornado怎么选

    2024-04-21 18:28:07       38 阅读
  11. ollama 开源大语言模型平台

    2024-04-21 18:28:07       38 阅读
  12. 嵌入式学习——C语言基础——day4

    2024-04-21 18:28:07       36 阅读