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的高安全性密码管理器实现方案,感兴趣的小伙伴可以参考一下... 目录一、前言:为什么我们需要专属密码管理器二、系统架构设计2.1 安全加密体系2.2 密码强度策略三、核心功能实现详解

Java String字符串的常用使用方法

《JavaString字符串的常用使用方法》String是JDK提供的一个类,是引用类型,并不是基本的数据类型,String用于字符串操作,在之前学习c语言的时候,对于一些字符串,会初始化字符数组表... 目录一、什么是String二、如何定义一个String1. 用双引号定义2. 通过构造函数定义三、St

Python Faker库基本用法详解

《PythonFaker库基本用法详解》Faker是一个非常强大的库,适用于生成各种类型的伪随机数据,可以帮助开发者在测试、数据生成、或其他需要随机数据的场景中提高效率,本文给大家介绍PythonF... 目录安装基本用法主要功能示例代码语言和地区生成多条假数据自定义字段小结Faker 是一个 python

Python实现AVIF图片与其他图片格式间的批量转换

《Python实现AVIF图片与其他图片格式间的批量转换》这篇文章主要为大家详细介绍了如何使用Pillow库实现AVIF与其他格式的相互转换,即将AVIF转换为常见的格式,比如JPG或PNG,需要的小... 目录环境配置1.将单个 AVIF 图片转换为 JPG 和 PNG2.批量转换目录下所有 AVIF 图

Python通过模块化开发优化代码的技巧分享

《Python通过模块化开发优化代码的技巧分享》模块化开发就是把代码拆成一个个“零件”,该封装封装,该拆分拆分,下面小编就来和大家简单聊聊python如何用模块化开发进行代码优化吧... 目录什么是模块化开发如何拆分代码改进版:拆分成模块让模块更强大:使用 __init__.py你一定会遇到的问题模www.

Pydantic中Optional 和Union类型的使用

《Pydantic中Optional和Union类型的使用》本文主要介绍了Pydantic中Optional和Union类型的使用,这两者在处理可选字段和多类型字段时尤为重要,文中通过示例代码介绍的... 目录简介Optional 类型Union 类型Optional 和 Union 的组合总结简介Pyd

Vue3使用router,params传参为空问题

《Vue3使用router,params传参为空问题》:本文主要介绍Vue3使用router,params传参为空问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录vue3使用China编程router,params传参为空1.使用query方式传参2.使用 Histo

详解如何通过Python批量转换图片为PDF

《详解如何通过Python批量转换图片为PDF》:本文主要介绍如何基于Python+Tkinter开发的图片批量转PDF工具,可以支持批量添加图片,拖拽等操作,感兴趣的小伙伴可以参考一下... 目录1. 概述2. 功能亮点2.1 主要功能2.2 界面设计3. 使用指南3.1 运行环境3.2 使用步骤4. 核

Python 安装和配置flask, flask_cors的图文教程

《Python安装和配置flask,flask_cors的图文教程》:本文主要介绍Python安装和配置flask,flask_cors的图文教程,本文通过图文并茂的形式给大家介绍的非常详细,... 目录一.python安装:二,配置环境变量,三:检查Python安装和环境变量,四:安装flask和flas

使用Python自建轻量级的HTTP调试工具

《使用Python自建轻量级的HTTP调试工具》这篇文章主要为大家详细介绍了如何使用Python自建一个轻量级的HTTP调试工具,文中的示例代码讲解详细,感兴趣的小伙伴可以参考一下... 目录一、为什么需要自建工具二、核心功能设计三、技术选型四、分步实现五、进阶优化技巧六、使用示例七、性能对比八、扩展方向建