Python爬虫——Selenium

简介       

 Selenium是一个自动化测试框架,可以通过编程语言控制浏览器进行各种操作。在Python中,可以使用Selenium实现爬虫。

        首先,我们需要需要安装Selenium库。可以使用pip命令安装:

pip install selenium

        要使用的话我们还需要下载对应浏览器的驱动程序。Selenium支持多种浏览器,比如Chrome、Firefox等。

     谷歌驱动地址:http://chromedriver.storage.googleapis.com/index.html

还有这个:Chrome for Testing availability

        这个真的是给我折磨掺了,我一开始发现我谷歌浏览器版本太高了,然后一开始的网站没有对应的版本,然后我就整卸载了我的google然后花了好久去找了一个低版本的,因为我的谷歌一直添加了很多的插件,所以我就登录了一下我的谷歌账号来同步一下,结果谷歌自动给我更新到了最新版,我心态崩了,然后我抱着侥幸的姿态去试了一下selenium,结果发现驱动不匹配,然后我又花了好久再找到上面的第二个链接有高版本的驱动,我真的哭了┭┮﹏┭┮

        这个地址最好是使用一些魔法来访问,国内好像访问不到,我不用魔法的话直接到反诈中心了。。。。
  

下面是一个示例代码,展示了如何使用Selenium爬取网页内容:

from selenium import webdriver# 创建浏览器对象
driver = webdriver.Chrome("/path/to/chromedriver")# 访问网页
driver.get("http://www.example.com")# 打印网页标题
print(driver.title)# 关闭浏览器
driver.quit()

        上面的示例代码使用了Chrome浏览器和Chrome驱动程序。要将路径/path/to/chromedriver修改为你自己的驱动程序路径。

        通过Selenium,你可以模拟浏览器行为,比如点击按钮、填写表单等。当然,你也可以获取网页的源码,进一步解析和提取数据。

        需要注意的是,Selenium是一个相对比较重量级的库,适用于对JavaScript等动态内容较多的网页进行爬取。对于静态网页,我们一般使用requests进行爬取,效率更高。

为什么使用selenium呢?

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

        这里大家如果报错各种奇奇怪怪的,建议使用selenium的3.3.1版本,我无论是python3.1还是3.7使用这个版本都不报错,而使用其他版本全部报错。。。。。。。。我裂开   


基本使用

# (1)导入selenium
from selenium import webdriver# (2)创建浏览器操作对象
# path是驱动文件的路径
path = 'chromedriver.exe'browser = webdriver.Chrome(path)# (3)访问网站
url = 'https://www.jd.com/'browser.get(url)# page_source获取网页源码
content = browser.page_source
print(content)

这样的话就可以获得京东的秒杀页面的代码了


Selenium的元素定位

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

示例代码如下:

# (1)导入selenium
from selenium import webdriver# (2)创建浏览器操作对象
# path是驱动文件的路径
path = 'chromedriver.exe'browser = webdriver.Chrome(path)# (3)访问网站
url = 'https://www.baidu.com'browser.get(url)# 元素定位:
# 根据id寻找到对象
button = browser.find_element_by_id('su')
print(button)# 根据标签属性的值来获取对象
button = browser.find_element_by_name('wd')
print(button)# 根据xpath语句来获取对象
button = browser.find_elements_by_xpath('//input[@id="su"]')
print(button)# 根据标签名来获取对象
button = browser.find_elements_by_tag_name('input')
print(button)# 使用bs4的语法来获取对象
button = browser.find_elements_by_css_selector('#su')
print(button)# 获取链接,也就是a标签
button = browser.find_element_by_link_text('视频')
print(button)

Selenium的访问元素信息

# (1)导入selenium
from selenium import webdriver# (2)创建浏览器操作对象
# path是驱动文件的路径
path = 'chromedriver.exe'browser = webdriver.Chrome(path)# (3)访问网站
url = 'http://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)


Selenium交互

        直接上代码,下述的代码可以实现整个页面的互相调用。什么意思呢,就是可以直接通过程序先输入一个 ‘ 章若楠 ’ ,然后滑到最下面然后再点击下一页,然后再往下滑,然后再回到前一页,再去后一页。

# (1)导入selenium
from selenium import webdriver
import time# 创建浏览器对象
path = 'chromedriver.exe'
browser = webdriver.Chrome(path)# url
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)# 获取下一页的按钮
next = browser.find_element_by_xpath('//a[@class="n"]')
# 点击下一页
next.click()time.sleep(2)browser.execute_script(js_bottom)time.sleep(2)
# 回到上一页
browser.back()time.sleep(2)browser.execute_script(js_bottom)time.sleep(2)
# 下一页
browser.forward()time.sleep(3)# 退出
browser.quit()

phantomjs

# phantomjs 的基本使用
from selenium import webdriver
import timepath = '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('李一桐.jpg')

Chrome handless

到这里我就裂开了

需要Python3.6以上的,我现在还用的3.1,爆炸了我要┭┮﹏┭┮

......

       重新从这里开始写文章已经是两天之后了,没错,我完美的预判到了重新下载python将会导致的一系列版本不兼容问题,我哭了,我累了,但是好在我搞定了┭┮﹏┭┮

配置

from selenium import webdriver
from selenium.webdriver.chrome.options import Optionschrome_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)

上面的代码除了path几乎不用修改

url = 'https://www.baidu.com'browser.get(url)browser.save_screenshot("baidu.png")

可以再加上这几行浅浅使用一下

可以使用方法封装一下然后调用

# 封装的handless
from selenium import webdriver
from selenium.webdriver.chrome.options import Options"""封装一下
"""
def 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.jd.com'
browser.get(url)
browser.save_screenshot("jd.jpg")

总结

这一章真的不难,但是我真的很烦!!!

更新完python真的多了好多事,好多版本真的不兼容,哭了哭了┭┮﹏┭┮

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

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

相关文章

用于生成环境噪声的Noisedash

本文中关于音频的专业描述&#xff0c;来自于互联网和 ChatGPT&#xff1b; 什么是白噪声 &#xff1f; 白噪声&#xff08;White Noise&#xff09;是具有平均功率的随机信号&#xff0c;其功率在整个频谱范围内均匀分布。它的能量在所有频率上都是相等的&#xff0c;没有频率…

【Linux C | 网络编程】广播概念、UDP实现广播的C语言例子

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…

伟大音乐家的伟大不朽作品,贝多芬一生的音乐作品全集

一、音乐描述 贝多芬一生创作题材广泛&#xff0c;重要作品包括9部交响曲、1部歌剧、32首钢琴奏鸣曲、5首钢琴协奏曲、多首管弦乐序曲及小提琴、大提琴奏鸣曲等。因为其对古典音乐的重大贡献&#xff0c;以及对奏鸣曲式和交响曲套曲结构的发展和创新&#xff0c;而被后世尊称为…

【比较mybatis、lazy、sqltoy、mybatis-flex、easy-query、mybatis-mp操作数据】操作批量新增、分页查询(四)

orm框架使用性能比较 比较mybatis、lazy、sqltoy、mybatis-flex、easy-query、mybatis-mp操作数据 环境&#xff1a; idea jdk17 spring boot 3.0.7 mysql 8.0测试条件常规对象 orm 框架是否支持xml是否支持 Lambda对比版本编码方式mybatis☑️☑️3.5.4lambda xml 优化sq…

Python乱码恢复

比如说网页是ISO-8859-1编码&#xff0c;然后requests得到的是乱码&#xff0c; 那么这样操作就可以还原数据&#xff1a;res.text.encode(‘ISO-8859-1’).decode(‘utf-8’) 乱码恢复网站&#xff0c;可以知道是什么编码http://www.mytju.com/classCode/tools/messyCodeReco…

Stable Diffusion——Animate Diff一键AI图像转视频

前言 AnimateDiff 是一个实用框架&#xff0c;可以对文本生成图像模型进行动画处理&#xff0c;无需进行特定模型调整&#xff0c;即可为大多数现有的个性化文本转图像模型提供动画化能力。而Animatediff 已更新至 2.0 版本和3.0两个版本&#xff0c;相较于 1.0 版本&#xff…

C#高级:Winform桌面开发中DataGridView的详解

一、每条数据增加一个按钮&#xff0c;点击输出对应实体 请先确保正确添加实体的名称和文本&#xff1a; private void button6_Click(object sender, EventArgs e) {//SQL查询到数据&#xff0c;存于list中List<InforMessage> list bll.QueryInforMessage();//含有字段…

tomcat安装及jdk安装

Tomcat 服务器是一个免费的开放源代码的Web 应用服务器&#xff0c;属于轻量级应用服务器&#xff0c;在中小型系统和并发访问用户不是很多的场合下被普遍使用&#xff0c;是开发和调试JSP 程序的首选。对于一个初学者来说&#xff0c;可以这样认为&#xff0c;当在一台机器上配…

C++ Qt开发:运用QThread多线程组件

Qt 是一个跨平台C图形界面开发库&#xff0c;利用Qt可以快速开发跨平台窗体应用程序&#xff0c;在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置&#xff0c;实现图形化开发极大的方便了开发效率&#xff0c;本章将重点介绍如何运用QThread组件实现多线程功能。 多线程…

mac报错:zsh:command not found: brew

1、基本概述&#xff1f; 在使用brew安装程序的时候MAC提示&#xff1a; zsh:command not found: brew 本质就是brew没有安装&#xff0c;这个命令与linux系统中的yum命令类似。 使用的环境说明&#xff1a; 虚拟机版本&#xff1a;VMware Workstation 17 Pro mac os Ventu…

TinyEMU编译与使用(一)

TinyEMU编译与使用&#xff08;一&#xff09; 1 介绍2 准备工作3 编译TinyEMU3.1 安装依赖库3.2 编译 4 运行TinyEMU4.1 在线运行4.2 离线运行 5 共享目录5.1 修改root_9p-riscv64.cfg5.2 启动TinyEMU5.3 执行挂载命令 6 TinyEMU命令帮助 1 介绍 原名为riscvemu&#xff0c;于…

Maven【5】在IDEA环境中配置和使用Maven

文章目录 【1】创建父工程1.创建 Project2.开启自动导入 【2】配置 Maven 信息【3】创建 Java 模块工程1.创建2.maven命令操作 【4】创建 Web 模块工程1.创建模块2.Web设定 【1】创建父工程 1.创建 Project 按照idea工程的布局&#xff0c;project相当于父工程&#xff0c;里…

javascript中的强制类型转换和自动类型转换

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;前端泛海 景天的主页&#xff1a;景天科技苑 文章目录 1.转换函数2.强制类型转换&#xff08;1&#xff09;Number类型强转&…

day11_SpringCloud(Nacos注册中心,LoadBalancer,OpenFeign)

文章目录 Spring Cloud Alibaba1 系统架构演进1.1 单体架构1.2 微服务架构1.3 分布式和集群 2 Spring Cloud Alibaba概述2.1 Spring Cloud简介2.2 Spring Cloud Alibaba简介 3 微服务环境准备3.1 工程结构说明3.2 父工程搭建3.3 用户微服务搭建3.3.1 基础环境搭建3.3.2 基础代码…

安装或卸载VMware时,显示无法打开注册表项,以及开启虚拟机电脑蓝屏重启的解决方法

我之前安装过一次VMware&#xff0c;之后就随手把他删除了&#xff0c;但没有删除干净&#xff0c;最近我再次安装VMware的时候&#xff0c;出现了一系列问题&#xff0c;我决定分享一下我的解决方案。 一&#xff1a;安装或卸载VMware时&#xff0c;显示无法打开注册表项 解决…

围坝胶的粘度一般是多少

围坝胶的一般粘度是多少?围坝胶&#xff0c;作为一种广泛应用于汽车、电子等领域的粘合剂&#xff0c;其粘度是评估其性能的重要指标之一。了解围坝胶的粘度有助于我们更好地选择和使用这种粘合剂。 首先&#xff0c;我们要明白什么是粘度。粘度是流体流动时抵抗剪切力的能力&…

09. C语言内嵌汇编代码

C语言函数内可以自定义一段汇编代码&#xff0c;在GCC编译器中使用 asm 或 __asm__ 关键词定义一段汇编代码&#xff0c;并可选添加volatile关键字&#xff0c;表示不要让编译器优化这段汇编代码。 内嵌汇编代码格式如下&#xff1a; __asm__ ("汇编代码":输出描述…

Git 入门

Git 入门 版本控制 什么是版本控制 版本控制是一种记录一个或若干文件内容变化&#xff0c;以便将来查阅特定版本修订情况的系统。 除了项目源代码&#xff0c;你可以对任何类型的文件进行版本控制。 为什么要版本控制 有了它你就可以将某个文件回溯到之前的状态&#xff…

WordPress建站入门教程:忘记后台管理员密码了怎么办?

前面跟大家分享的『WordPress建站入门教程&#xff1a;如何在本地电脑搭建WordPress网站&#xff1f;』一文介绍了搭建WordPress网站&#xff0c;但是有些站长跟boke112百科一样&#xff0c;没有记录后台管理密码&#xff0c;这种情况应该怎么办呢&#xff1f;有以下2种方法解决…

我国离子注入设备市场规模不断增加 本土企业仍有较大发展空间

我国离子注入设备市场规模不断增加 本土企业仍有较大发展空间 离子注入是半导体器件和集成电路生产的关键工艺之一&#xff0c;其提供的高精度和高均匀性可以大幅度提高集成电路的成品率。离子注入设备是芯片制造的核心工艺装备。 从全球市场来看&#xff0c;随着科学技术不断进…