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,一经查实,立即删除!

相关文章

7-Zip:一款免费开源但强大的压缩软件

名人说:莫道桑榆晚,为霞尚满天。——刘禹锡(刘梦得,诗豪) 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、什么是7-zip?①为什么选择7-Zip?②7-Zip的主要特点二、下载安装三、如何使用7-Zip?四、总结很高兴你打开了这篇博客,如有疑问,欢迎评论…

密码学之椭圆曲线

引言 DH(Diffie-Hellman)密钥交换算法于1976年提出,是第一个公开密钥交换算法。其基础是数学中的群论,群论也是大多数公开密钥密码的基础。简单来说,群是一组元素的集合以及在这些元素上定义的特殊二元运算。 一个群需要满足如下性质: 封闭性:群中两个元素的运算结果仍…

用于生成环境噪声的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…

代码随想录算法训练营第33天—动态规划01 | ● 理论基础 ● 509. 斐波那契数 ● 70. 爬楼梯 ● 746. 使用最小花费爬楼梯

动态规划理论基础 https://programmercarl.com/%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html 视频&#xff1a;https://www.bilibili.com/video/BV13Q4y197Wg 主要题型 动规基础题 斐波那契数列 背包问题打家劫舍股票问题子序列问题 解题…

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

一、音乐描述 贝多芬一生创作题材广泛&#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…

【记录31】elementUI el-tree 虚线、右键、拖拽

父组件 <eltree :treeData"treeData"></eltree>import eltree from "../../components/tree.vue"; export default {name: ,components: { // org_tree ,eltree},watch: {},data() {return {orgFormchoose: {},orgForm: { type: 0, limits: 1…

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…

CRC8/CRC16/CRC32全面对比详解

在现代数据通信和存储技术中&#xff0c;CRC&#xff08;Cyclic Redundancy Check&#xff0c;循环冗余校验&#xff09;算法作为一种关键的错误检测机制&#xff0c;在确保数据完整性方面扮演着不可或缺的角色。该算法基于一个特定的生成多项式对原始数据块进行模2除法运算&am…

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

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

Golang关键字defer

# Golang 关键字 defer 的用法和原理## 什么是 defer在 Golang 中&#xff0c;有一个特殊的关键字 defer&#xff0c;它可以让一个函数或者语句在当前函数返回之前执行。defer 的常见用途有&#xff1a;- 关闭文件、数据库连接、网络连接等资源 - 解锁互斥锁 - 捕获和处理异常 …

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

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

代码思想录-动态规划(509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯)

509. 斐波那契数 class Solution { public:int fib(int n){if (n0) return 0;if (n1) return 1;vector<int> dp(n1, 0);dp[0] 0;dp[1] 1;for (int i2; i<n1;i){dp[i] dp[i-1] dp[i-2];}return dp[n];} }; 70. 爬楼梯 class Solution { public:int climbStairs(…

Linux删除Mysql

//rpm包安装方式卸载 查包名&#xff1a;rpm -qa|grep -i mysql 删除命令&#xff1a;rpm -e –nodeps 包名//yum安装方式下载 1.查看已安装的mysql 命令&#xff1a;rpm -qa | grep -i mysql 2.卸载mysql 命令&#xff1a;yum remove mysql-community-server-5.6.36-2.el7.x86…

E8-完善数据库备份的存储过程

起因 我们公司E8的数据用的是SQL Server 2012在我把从生产环境下复制来的数据库备份文件恢复到本机测试环境里时&#xff0c;被提示硬盘空间不足。备份文件3G多&#xff0c;硬盘剩余空间10G左右。于是我去生产环境看了一下数据库的物理文件&#xff0c;就是扩展名是mdf文件&am…

【Shell脚本】读取大量DDR寄存器的值

功能&#xff1a;使用shell脚本读取大量DDR寄存器的值&#xff1a; # Function: Read the registers&#xff1a; # registers: # 0x2000000 ~ 0x2000FFC # 0x2001000 ~ 0x2001034 # 0x440000 ~ 0x4403AC # 0x400000 ~ 0x42B030 # 0x2010000, 0x2010400Step1. 创建一个包含了所…

tomcat安装及jdk安装

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

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

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

PHP实现数据爬虫

一&#xff1a;什么是爬虫 网络爬虫&#xff08;又被称为网页蜘蛛&#xff0c;网络机器人&#xff0c;在FOAF社区中间&#xff0c;经常被称为网页追逐者&#xff09;&#xff0c;是一种按照一定的规则&#xff0c;自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字…