Python爬虫---selenium基本使用(支持无界面浏览器PhantomJS和Chrome handless)

本文主要是介绍Python爬虫---selenium基本使用(支持无界面浏览器PhantomJS和Chrome handless),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

为什么使用selenium?

使用urllib.request.urlopen()模拟浏览器有时候获取不到数据,所以使用selenium

(1) selenium是一个用于web应用程序测试的工具
(2) selenium 测试直接运行在浏览器中,就像真正的用户在操作一样
(3) 支持通过各种driver (FirfoxDriver,IternetExplorerDriver,OperaDriver, ChromeDriver) 驱动真实浏览器完成测试。
(4) selenium也是支持无界面浏览器操作的。

1. 安装selenium(以谷歌为例)

1.1. 安装谷歌浏览器驱动 chromedriver :chromedriver官网下载地址   

注意:chromedriver 需要下载与谷歌浏览器对应的版本,防止版本不兼容

选择自己需要的版本,我这是120.0版本,复制这个链接到空的标签页就可下载

 将下载的解压包解压后无需安装和运行,将exe文件直接放在程序目录下,如下图:

 1.2. 安装selenium:pip install seleniumpip install selenium -i https://pypi.douban.com/simpl

如果报错可以安装此版本(需卸载之前的):pip install selenium==3.3.1

注意:需要安装在python解释器下面,例如:D:\Program Files\Python3.11.4\Scripts

2. 使用selenium基础

1)导入selenium

2)创建浏览器操作对象

3)访问网站

# import urllib.request
# url = "https://www.jd.com/"
# response = urllib.request.urlopen(url=url)
# content = response.read().decode("utf-8")
# print(content)  # 获取不到京东秒杀活动,所以需要使用selenium# 1)导入selenium
from selenium import webdriver
# from selenium.webdriver.common.by import By
# 2)创建浏览器操作对象
path = "chromedriver.exe"  # 驱动路径browser = webdriver.Chrome(path)# 3)访问网站
url = "https://www.baidu.com"browser.get(url)
browser.get("https://www.jd.com/")# page_source:获取网页源码
content = browser.page_source
print(content)   # 可以获取京东秒杀活动

3. 元素定位

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

1)根据id找到对象:browser.find_element_by_id("id属性值")

2)根据标签属性的属性值获取对象:browser.find_element_by_name("属性值")

3)根据xpath语句来获取对象:browser.find_elements_by_xpath("xpath语句")

4)根据标签名字获取对象:browser.find_elements_by_tag_name("标签名")

5)使用bs4语法来获取对象:browser.find_elements_by_css_selector("bs4语法")

6)使用链接来获取对象:browser.find_elements_by_link_text("链接文本")

from selenium import webdriver# 创建浏览器对象
path = "chromedriver.exe"
browser = webdriver.Chrome(path)# 访问网站
url = "https://www.baidu.com"
browser.get(url)# 元素定位# 根据id找到对象
button1 = browser.find_element_by_id("su")
print(button1)# 根据标签属性的属性值获取对象
button2 = browser.find_element_by_name("wd")
print(button2)# 根据xpath语句来获取对象
button3 = browser.find_elements_by_xpath("//input[@id='su']")
print(button3)# 根据标签名字获取对象
button4 = browser.find_elements_by_tag_name("input")
print(button4)# 使用bs4语法来获取对象
button5 = browser.find_elements_by_css_selector("#su")
print(button5)# 使用链接(a标签)来获取对象
button6 = browser.find_elements_by_link_text("新闻")
print(button6)

4. 元素信息

获取标签的属性:get_attribute("属性名")

获取标签的名字:tag_name

获取元素的文本:text

from selenium import webdriver# 创建浏览器对象
path = "chromedriver.exe"
browser = webdriver.Chrome(path)# 访问网站
url = "https://www.baidu.com"
browser.get(url)# 元素信息input = browser.find_element_by_id("su")
# 获取标签的属性
print(input.get_attribute("class"))
# 获取标签的名字
print(input.tag_name)a = browser.find_element_by_link_text("新闻")
# 获取元素的文本
print(a.text)

5. 交互

from selenium import webdriver
import time# 创建浏览器对象
path = "chromedriver.exe"
browser = webdriver.Chrome(path)# 访问网站
url = "https://www.baidu.com"
browser.get(url)
time.sleep(2)# 获取文本框对象
input = browser.find_element_by_id("kw")
# 在文本框中输入周杰伦
input.send_keys("周杰伦")
time.sleep(2)# 获取百度一下按钮
button = browser.find_element_by_id("su")
# 点击按钮
button.click()
time.sleep(2)# 滑到底部
js_bottom = "document.documentElement.scrollTop=100000"
browser.execute_script(js_bottom)
time.sleep(2)# 获取下一页按钮
button1 = browser.find_element_by_xpath("//a[@class='n']")
# 点击下一页
button1.click()
time.sleep(2)# 返回上一页
browser.back()
time.sleep(2)# 再回去
browser.forward()
time.sleep(3)# 退出
browser.quit()

6. PhantomJS

1.什么是phantomjs?
        1)是一个无界面的浏览器
        2)支持页面元素查找,js的执行等
        3)由于不进行css和gui渲染,运行效率要比真实的浏览器要快很多
2.如何使用phantomjs?

        1)下载phantomjs:phantomjs下载 , 将下载的解压包解压后无需安装和运行,将exe文件直接放在程序目录下
        2)获取phantomjs.exe文件路径path
        3)browser = webdriver.PhantomJs(path)
        4) browser.get(ur1)
        扩展: 保存屏幕快照:browser.save_screenshot('baidu.png')

from selenium import webdriver
import time# 创建浏览器对象
path = "phantomjs.exe"
browser = webdriver.PhantomJS(path)# 访问网站
url = "https://www.baidu.com"
browser.get(url)# 拍快照
browser.save_screenshot("baidu.png")
time.sleep(2)# 获取输入框对象
input = browser.find_element_by_id("kw")
# 输入框输入 "星之卡比"
input.send_keys("星之卡比")
time.sleep(2)
# 拍快照
browser.save_screenshot("xing.png")

7. Chrome handless(更推荐)

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

系统要求 :  1)Chrome:Unix\Linux 系统需要 chrome >= 59,windows 系统需要 chrome >= 60
2)Python3.6          3)Selenium==3.4.*         4)ChromeDriver==2.31

配置:只需要修改path

chrome_options = Options()
chrome_options.add_argument("--headless")
chrome_options.add_argument("--disable-gpu")

# path是自己的chrome浏览器的文件路径
path = r"C:\Program Files\Google\Chrome\Application\chrome.exe"
chrome_options.binary_location = path

browser = webdriver.Chrome(chrome_options=chrome_options)

# from selenium import webdriver
# from selenium.webdriver.chrome.options import Options
#
# chrome_options = Options()
# chrome_options.add_argument("--headless")
# chrome_options.add_argument("--disable-gpu")
#
# path是自己的chrome浏览器的文件路径
# path = r"C:\Program Files\Google\Chrome\Application\chrome.exe"
# chrome_options.binary_location = path
# browser = webdriver.Chrome(chrome_options=chrome_options)
#
# url = "https://www.baidu.com"
# browser.get(url)
# browser.save_screenshot("baidu1.png")# 封装的handless
from selenium import webdriver
from selenium.webdriver.chrome.options import Optionsdef share_browser():chrome_options = Options()chrome_options.add_argument("--headless")chrome_options.add_argument("--disable-gpu")# path是自己的chrome浏览器的文件路径path = r"C:\Program Files\Google\Chrome\Application\chrome.exe"chrome_options.binary_location = pathbrowser = webdriver.Chrome(chrome_options=chrome_options)return browserbrowser = share_browser()url = "https://www.baidu.com"browser.get(url)

 

这篇关于Python爬虫---selenium基本使用(支持无界面浏览器PhantomJS和Chrome handless)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/564108

相关文章

一文教你Python如何快速精准抓取网页数据

《一文教你Python如何快速精准抓取网页数据》这篇文章主要为大家详细介绍了如何利用Python实现快速精准抓取网页数据,文中的示例代码简洁易懂,具有一定的借鉴价值,有需要的小伙伴可以了解下... 目录1. 准备工作2. 基础爬虫实现3. 高级功能扩展3.1 抓取文章详情3.2 保存数据到文件4. 完整示例

使用Python实现IP地址和端口状态检测与监控

《使用Python实现IP地址和端口状态检测与监控》在网络运维和服务器管理中,IP地址和端口的可用性监控是保障业务连续性的基础需求,本文将带你用Python从零打造一个高可用IP监控系统,感兴趣的小伙... 目录概述:为什么需要IP监控系统使用步骤说明1. 环境准备2. 系统部署3. 核心功能配置系统效果展

基于Python打造一个智能单词管理神器

《基于Python打造一个智能单词管理神器》这篇文章主要为大家详细介绍了如何使用Python打造一个智能单词管理神器,从查询到导出的一站式解决,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 项目概述:为什么需要这个工具2. 环境搭建与快速入门2.1 环境要求2.2 首次运行配置3. 核心功能使用指

Python实现微信自动锁定工具

《Python实现微信自动锁定工具》在数字化办公时代,微信已成为职场沟通的重要工具,但临时离开时忘记锁屏可能导致敏感信息泄露,下面我们就来看看如何使用Python打造一个微信自动锁定工具吧... 目录引言:当微信隐私遇到自动化守护效果展示核心功能全景图技术亮点深度解析1. 无操作检测引擎2. 微信路径智能获

使用Java将各种数据写入Excel表格的操作示例

《使用Java将各种数据写入Excel表格的操作示例》在数据处理与管理领域,Excel凭借其强大的功能和广泛的应用,成为了数据存储与展示的重要工具,在Java开发过程中,常常需要将不同类型的数据,本文... 目录前言安装免费Java库1. 写入文本、或数值到 Excel单元格2. 写入数组到 Excel表格

redis中使用lua脚本的原理与基本使用详解

《redis中使用lua脚本的原理与基本使用详解》在Redis中使用Lua脚本可以实现原子性操作、减少网络开销以及提高执行效率,下面小编就来和大家详细介绍一下在redis中使用lua脚本的原理... 目录Redis 执行 Lua 脚本的原理基本使用方法使用EVAL命令执行 Lua 脚本使用EVALSHA命令

Python中pywin32 常用窗口操作的实现

《Python中pywin32常用窗口操作的实现》本文主要介绍了Python中pywin32常用窗口操作的实现,pywin32主要的作用是供Python开发者快速调用WindowsAPI的一个... 目录获取窗口句柄获取最前端窗口句柄获取指定坐标处的窗口根据窗口的完整标题匹配获取句柄根据窗口的类别匹配获取句

利用Python打造一个Excel记账模板

《利用Python打造一个Excel记账模板》这篇文章主要为大家详细介绍了如何使用Python打造一个超实用的Excel记账模板,可以帮助大家高效管理财务,迈向财富自由之路,感兴趣的小伙伴快跟随小编一... 目录设置预算百分比超支标红预警记账模板功能介绍基础记账预算管理可视化分析摸鱼时间理财法碎片时间利用财

Java 中的 @SneakyThrows 注解使用方法(简化异常处理的利与弊)

《Java中的@SneakyThrows注解使用方法(简化异常处理的利与弊)》为了简化异常处理,Lombok提供了一个强大的注解@SneakyThrows,本文将详细介绍@SneakyThro... 目录1. @SneakyThrows 简介 1.1 什么是 Lombok?2. @SneakyThrows

Python中的Walrus运算符分析示例详解

《Python中的Walrus运算符分析示例详解》Python中的Walrus运算符(:=)是Python3.8引入的一个新特性,允许在表达式中同时赋值和返回值,它的核心作用是减少重复计算,提升代码简... 目录1. 在循环中避免重复计算2. 在条件判断中同时赋值变量3. 在列表推导式或字典推导式中简化逻辑