Python爬虫 Selenium(六)

news/2024/7/19 9:25:58 标签: python, 爬虫, selenium

文章目录

  • 简介
  • 示例
  • 元素定位、交互
  • 4.72版本示例(注意语法差别)
  • Chrome handless

简介

1.什么是selenium?

(1)Selenium是一个用于Web应用程序测试的工具。

(2)Selenium 测试直接运行在浏览器中,就像真正的用户在操作一样。

(3)支持通过各种driver(FirfoxDriver,IternetExplorerDriver,OperaDriver,ChromeDriver)驱动真实浏览器完成测试。

(4)selenium也是支持无界面浏览器操作的。

2.为什么使用selenium?

模拟浏览器功能,自动执行网页中的js代码,实现动态加载

在真实网页系统中,很多数据是由js加载进入html页面,部分数据是通过懒加载实现,如果直接爬去源码是无法获取到相对应的dom的数据

示例

安装

如何安装selenium?

(1)操作谷歌浏览器驱动下载地址


http://chromedriver.storage.googleapis.com/index.html 

(2)谷歌驱动和谷歌浏览器版本之间的

映射表
http://blog.csdn.net/huilan_same/article/details/51896672 

(3)查看谷歌浏览器版本

谷歌浏览器右上角‐‐>帮助‐‐>关于 

(4)pip install selenium

使用

(1)导入:
from selenium import webdriver

(2)创建谷歌浏览器操作对象:
path = 谷歌浏览器驱动文件路径
browser = webdriver.Chrome(path) 

(3)访问网址
url = 要访问的网址 browser.get(url)

元素定位、交互

selenium的元素定位?元素定位:自动化要做的就是模拟鼠标和键盘来操作来操作这些元素,点击、输入等等。操作这些元素前首先要找到它们,WebDriver提供很多定位元素的方法

方法:

1.find_element_by_id
eg:button =browser.find_element_by_id('su')

2.find_elements_by_name
eg:name = browser.find_element_by_name('wd')

3.find_elements_by_xpath
eg:xpath1 = browser.find_elements_by_xpath('//input[@id="su"]')
4.find_elements_by_tag_name
eg:names = browser.find_elements_by_tag_name('input')

5.find_elements_by_css_selector
eg:my_input = browser.find_elements_by_css_selector('#kw')[0]

6.find_elements_by_link_text
eg:browser.find_element_by_link_text("新闻")
eg:browser.find_element_by_link_text("新闻")
 
6. 访问元素信息 获取元素属性
.get_attribute('class') 获取元素文本
.text 获取内容
.tag_name 获取标签名

交互

点击:click()
输入:send_keys() 
后退操作:browser.back() 
前进操作:browser.forword() 
模拟JS滚动:js='document.documentElement.scrollTop=100000'
browser.execute_script(js) 执行js代码 
获取网页代码:page_source 
退出:browser.quit()

4.72版本示例(注意语法差别)

import time

from selenium import webdriver

# 驱动地址
from selenium.webdriver.common.by import By

path = 'chromedriver'
# 访问地址
url = 'https://www.baidu.com/'
# 创建谷歌浏览器操作对象:
browser = webdriver.Chrome(path)
# 打开页面
browser.get(url)

# 实现自动输入周杰伦翻译效果
input = browser.find_element(by=By.ID, value='kw')
input.send_keys('周杰伦')
button = browser.find_element(by=By.ID, value='su')
button.click()
time.sleep(2)
# 执行js代码 滚动到底部
js = 'document.documentElement.scrollTop=100000'
browser.execute_script(js)
# 点击下一页
page1 = browser.find_element(by=By.XPATH, value='//*[@id="page"]/div/a[8]/span')
page1.click()
time.sleep(5)
js = 'document.documentElement.scrollTop=100000'
browser.execute_script(js)
time.sleep(5)
# 回退
browser.back()
time.sleep(5)

Chrome handless

Chrome-headless模式,Google针对Chrome浏览器 59版新增加的一种模式,可以让你不打开UI界面的情况下使用Chrome浏览器,所以运行效果与Chrome保持完美一致

示例

import time

# 驱动地址
from selenium.webdriver.common.by import By
# 这个是浏览器自带的 不需要我们再做额外的操作
from selenium.webdriver.chrome.options import Options

from selenium import webdriver


# 封装
def share_browser():  # 初始化
    chrome_options = Options()
    # 注意参数这个版本不需要--
    chrome_options.add_argument('headless')
    chrome_options.add_argument('disable‐gpu')
    # 浏览器的安装路径 打开文件位置 #这个路径是你谷歌浏览器的路径
    # path = r'/Applications/Google Chrome.app/Contents/MacOS/Google Chrome'
    # chrome_options.binary_location = path
    browser = webdriver.Chrome(options=chrome_options,)
    return browser

path = 'chromedriver'
# 访问地址
url = 'https://www.baidu.com/'
# 创建谷歌浏览器操作对象:
browser = share_browser()
# 打开页面
browser.get(url)
browser.save_screenshot('baidu1.png')
# 实现自动输入周杰伦翻译效果
input = browser.find_element(by=By.ID, value='kw')
input.send_keys('周杰伦')
button = browser.find_element(by=By.ID, value='su')
button.click()
browser.save_screenshot('baidu2.png')
time.sleep(2)
# 执行js代码 滚动到底部
js = 'document.documentElement.scrollTop=100000'
browser.execute_script(js)
# 点击下一页
page1 = browser.find_element(by=By.XPATH, value='//*[@id="page"]/div/a[8]/span')
page1.click()
browser.save_screenshot('baidu3.png')
time.sleep(5)
js = 'document.documentElement.scrollTop=100000'
browser.execute_script(js)
browser.save_screenshot('baidu4.png')
time.sleep(5)
# 回退
browser.back()
browser.save_screenshot('baidu5.png')
time.sleep(5)


http://www.niftyadmin.cn/n/27628.html

相关文章

详解DFS(深度优先搜索)算法+模板+指数+排列+组合型枚举+带分数四道例题

目录 前言: 1.背景 2.图解分析 3.算法思想 4.dfs四大例题 4.1.递归实现指数型枚举 题解: 4.2.递归实现排列型枚举 题解: 字典序: 4.3.递归实现组合型枚举 题解: 4.4.带分数 题解: 5.最后: 前言:…

RabbitMQ实战教程

RabbitMQ实战教程 1.MQ引言 1.1 什么是MQ MQ (Message Queue): 翻译为消息队列,通过典型的生产者和消费者模型,生产者不断向消息队列中生产消息,消费者不断的从队列中获取消息。因为消息的生产和消费都是异步的,而且只关心消息的发送和接收&#xff0…

C语言——常用字符串库函数的介绍

文章目录常用字符串库函数介绍1.1关于字符串简介1.2:[strlen库函数](https://legacy.cplusplus.com/reference/cstring/strlen/?kwstrlen)1.2.1strlen函数的功能1.2.2strlen函数的参数和返回类型1.2.3strlen函数使用注意事项1.2.4strlen的使用1.2.5模拟实现strlen函数1.3:[str…

录屏软件无水印免费,分享一款功能强大且免费的录屏软件

市面上多数录屏软件,只能试用版录制几分钟的视频,且带有水印。想要长时间录制电脑屏幕、录制无水印的录屏,需要解锁才可以。那有没有一款录屏软件试用版就能无水印?当然有啦。小编今天给大家分享一款不限制录制时长,且…

【C语言练习】 二进制中1的个数

目录题目详情:思路一:思路二:思路三:题目详情: 思路一: 拿到二进制的每一位,看它是否等于 111,再定义一个计数器变量,如果等于 111,计数器变量就加 111。最终…

价值创造链路及经营计划

“价值创造过程最主要的环节是建立链接,北京万柳书院在网上热议,其背后是人与人的大量链接,近期热议的湖南卫视春晚亦如是,这种链接为价值的设计、沟通、传递创造条件;企业以客户为中心设计产品,往大了说是…

Elasticsearch:关于在 Python 中使用 Elasticsearch 你需要知道的一切 - 8.x

在本文中,我们将讨论如何在 Python 中使用 Elasticsearch。 如果你还不了解 Elasticsearch,可以阅读这篇文章 “Elasticsearch 简介” 进行快速介绍。在我之前的文章 “Elasticsearch:使用最新的 Python client 8.0 来创建索引并搜索”&#…

2023-01-16 Dubbo+Zookeeper集成

DubboZookeeper 文章目录DubboZookeeper1. Dubbo作用连通性健壮性伸缩性dubbo支持的协议dubbo协议(默认)注册中心Dubbo支持的注册中心Zookeeper注册中心(推荐)2. Dubbo服务治理Dubbo启动检查3. Dubbo架构4. Dubbo集群容错方案5. Zookeeper安装1.安装2.集群搭建6. Spring整合Dub…