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)

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/229306.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

园林机械部件自动化三维测量检测形位公差-CASAIM自动化三维检测工作站

随着园林机械的广泛应用,对其机械部件的精确测量需求也日益增加。传统的测量方法不仅效率低下,而且精度难以保证,因此,自动化三维测量技术成为了解决这一问题的有效途径。本文将重点介绍CASAIM自动化三维检测工作站在园林机械部件…

QT/C++ 远程数据采集上位机+服务器

一、项目介绍: 远程数据采集与传输 课题要求:编写个基于TCP的网络数据获取与传输的应用程序; 该程序具备以下功能: 1)本地端程序够通过串口与下位机(单片机)进行通信,实现数据采集任务 2)本地端程序能将所获取下位机数据进行保存(如csv文本格式等); 3…

IDEA 控制台中文出现乱码问题解决

一、问题概述 请看下图 二、问题分析 IDEA控制台输出乱码一般会有三种来源: ① IDEA本身编码错误 ② Tomcat日志输出编码错误 ③ 项目本身原因。 终极原因:IDEA编码和Tomcat编码不一致,统一设置为UTF-8即可。 三、解决思路 修改…

如何使用Plex在Windows系统搭建个人媒体站点公网可访问

文章目录 1.前言2. Plex网站搭建2.1 Plex下载和安装2.2 Plex网页测试2.3 cpolar的安装和注册 3. 本地网页发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 1.前言 用手机或者平板电脑看视频,已经算是生活中稀松平常的场景了,特别是各…

Rust学习笔记001:HELLOW WORLD + Cargo

Rust介绍 Rust(中文称为“锈”)是一种由Mozilla开发的系统编程语言,它着力于提供安全性、并发性和实用性。Rust的设计目标是消除程序出现的内存安全性问题,如空指针引用、数据竞争等。它通过在编译时进行严格的所有权和借用检查来…

如何实现WinApp的UI自动化测试?

WinApp(WindowsAPP)是运行在Windows操作系统上的应用程序,通常会提供一个可视的界面,用于和用户交互。例如运行在Windows系统上的Microsoft Office、PyCharm、Visual Studio Code、Chrome,都属于WinApp。常见的WinApp&…

gorm.PrepareStmt模式使用不当问题查询

一、背景 xx服务内存持续上涨。内存占用10%以内,在QPS无明显变化的前提下,内存占用50%左右。 dump了一下heap内存,发现主要是 InitUserCacheRefresh 任务代码占用 正常来说,dao层查完数据库之后,对象应该会释放&…

边缘计算网关:重新定义物联网数据处理

随着物联网(IoT)设备的爆炸式增长,数据处理和分析的需求也在迅速增加。传统的数据处理方式,将所有数据传输到中心服务器进行处理,不仅增加了网络负担,还可能导致数据延迟和安全问题。因此,边缘计…

大数据机器学习GAN:生成对抗网络GAN全维度介绍与实战

文章目录 大数据机器学习GAN:生成对抗网络GAN全维度介绍与实战一、引言1.1 生成对抗网络简介1.2 应用领域概览1.3 GAN的重要性 二、理论基础2.1 生成对抗网络的工作原理2.1.1 生成器生成过程 2.1.2 判别器判别过程 2.1.3 训练过程训练代码示例 2.1.4 平衡与收敛 2.2…

SpringBoot 日志打印

一. 自定义打印日志 开发者自定义打印日志实现步骤: • 在程序中得到日志对象 • 使用日志对象的相关语法输出要打印的内容. 得到日志对象: //日志工厂需要将需要打印的类的类型传递进去,这样我们才知道日志的归属类,才能更方便的定位到文体类 private static Logger logger …

LaTeX写论文,公式后段落取消缩进方法:\noindent

在论文的段落中,需要插入一个公式,按道理公式后应该紧接着是段落的文本内容,但如果直接写的话,编译得到的PDF中呈现出来的却是开头缩进的样子 如果需要取消公式后面的段落缩进,可以使用命令 \noindent 该命令的作用…

git基础概念和常用命令(日常开发收藏备用)

目录 ### 常用命令 ### 远程仓库与克隆 ### 分支管理 ### 子模块(Submodule) ### 其他高级操作 ### 交互式暂存(Interactive Staging) ### cherry-pick ### rebase ### reflog与reset ### 子树合并(Subtree …

深入理解 C# 中的字符串比较:String.CompareTo vs String.Equals

深入理解 C# 中的字符串比较:String.CompareTo vs String.Equals 在处理字符串时,了解如何正确比较它们对于编写清晰、有效和可靠的 C# 程序至关重要。本文将深入探讨 C# 中的两个常用字符串比较方法:String.CompareTo 和 String.Equals&…

代码质量评价及设计原则

1.评价代码质量的标准 1.1 可维护性 可维护性强的代码指的是: 在不去破坏原有的代码设计以及不引入新的BUG的前提下,能够快速的修改或者新增代码. 不易维护的代码指的是: 在添加或者修改一些功能逻辑的时候,存在极大的引入新的BUG的风险,并且需要花费的时间也很长. 代码可…

三、C语言中的分支与循环—while循环 (5)

本章分支结构的学习内容如下: 三、C语言中的分支与循环—if语句 (1) 三、C语言中的分支与循环—关系操作符 (2) 三、C语言中的分支与循环—条件操作符 与逻辑操作符(3) 三、C语言中的分支与循环—switch语句(4)分支结构 完 本章循环结…

ARCGIS PRO SDK 访问Geometry对象

一、Geometry常用对象 二、主要类 1、ReadOnlyPartCollection:Polyline 和 Polygon 使用的 ReadOnlySegmentCollection 部件的只读集合,属性成员:​ 名字描述Count获取 ICollection 中包含的元素数。TIEM获取位于指定索引处的元素。Spatial…

macbook安装mysql

参考这两篇文章: https://blog.csdn.net/zz00008888/article/details/109091478 https://blog.csdn.net/m0_67400973/article/details/126034807 其中,在配置文件这里,不太熟悉linux指令 cd /:返回根目录 sudo vim ~/.zshrc&am…

VSCode远程开发配置

目录 概要远程开发插件安装开始连接SSH无密码登录开发环境配置 概要 现在很多公司都是直接远程到服务器上写代码,使用远程开发,可以在与生产环境相同的环境中开发、测试和部署代码,减少因环境不同而导致的问题。本文将详细介绍如何通过VSCod…

SpringBoot 一个注解实现数据脱敏

什么是数据脱敏 数据脱敏是指对某些敏感信息,例如姓名、身份证号码、手机号、固定电话、银行卡号、邮箱等个人信息,通过脱敏算法进行数据变形,以保护敏感隐私数据。 数据脱敏通常涉及以下几种主要方法: 替换: 将原始…

如何使用Docker部署Swagger Editor结合内网穿透实现远程编辑API文档

文章目录 Swagger Editor本地接口文档公网远程访问1. 部署Swagger Editor2. Linux安装Cpolar3. 配置Swagger Editor公网地址4. 远程访问Swagger Editor5. 固定Swagger Editor公网地址 Swagger Editor本地接口文档公网远程访问 Swagger Editor是一个用于编写OpenAPI规范的开源编…