Selenium实战指南:安装、使用技巧和JavaScript注入案例解析

背景

​ 最近一段时间我会重新开一个关于selenium的专题,由浅入深的给大家讲一下selenium,同时回顾一下之前学的内容,selenium可以实现模拟登录,动态数据获取,获取动态cookie等等,还有可以写一些抢p的脚本,点到为止,步入正题。

简介

  • selenium

​ - 是一种浏览器自动化的工具,所谓的自动化是指,我们可以通过代码的形式制定一系列的行为动作,然后执行代码,这些动作就会同步触发在浏览器中,即浏览器模拟人的执行。

环境安装:

pip install  selenium
conda install selenium
  • 下载浏览器驱动程序:
    • http://chromedriver.storage.googleapis.com/index.html
  • 查看驱动和浏览器版本的映射关系:
    • http://blog.csdn.net/huilan_same/article/details/51896672

如果大家chrome浏览器版本太高,又不好降级,建议大家看一下这篇博客:【笔记】chromedriver下载与安装方法_谷歌浏览器驱动_逸峰轻云的博客-CSDN博客

常用函数:

请求发送:

driver.get("网站")  驱动打开一个网站
driver.quit()# 关闭浏览器
驱动创建:
  • Selenium支持非常多的浏览器,如Chrome、Firefox、Edge等.另外,也支持无界面浏览器。主要使用Chrome浏览器.
driver = webdriver.Chrome(r'路径')  实例化一个浏览器对象
browser = webdriver.Firefox()
browser = webdriver.Edge()
browser = webdriver.PhantomJS()
browser = webdriver.Safari()
定位元素:
  • webdriver 提供了一系列的元素定位方法,常用的有以下几种:

  • driver.find_element_by_xpath() # 根据xpath对网页进行解析
    find_elements_by_link_text() # 根据超链接内容进行定位
    find_element_by_id(  ) # 根据标签id属性值定位
    find_element_by_tag_name() # 根据标签名定位
    find_element_by_name() # 根据其name属性值定位
    

​ 元素定位用的最多的是xpath那个,大家可以去学一下xpath的语法。

页面交互:

​ Selenium可以驱动浏览器来执行一些操作,也就是说可以让浏览器模拟执行一些动作。

send_keys()#发送关键字
clear() # 清空文字
click() # 点击按钮
执行js:

​ 对于某些操作,Selenium API并没有提供。比如,下拉进度条,它可以直接模拟运行JavaScript,此时使用execute_script()方法即可实现。

execute_script() #执行js
# 拉到顶部
def scroll_top():
js = “var q=document.documentElement.scrollTop=0return d.execute_script(js)
#拉到底部
window.scrollTo (0, document.body.scrollHeight)

案例实战:

效果展示1:
from selenium import webdriver
from time import sleep# 后面是你的浏览器驱动位置,记得前面加r'','r'是防止字符转义的
# 路径写你下载的驱动的位置(建议使用相对路径)
driver = webdriver.Chrome(r'./chromedriver')
# 用get打开百度页面
driver.get("http://www.baidu.com")
# 等待三秒 观察效果
sleep(3)
# 关闭浏览器
driver.quit()

在这里插入图片描述

效果展示2:

​ 要求:实现输入python自动跳转到之后的页面

from selenium import webdriver
from time import sleep# 后面是你的浏览器驱动位置,记得前面加r'','r'是防止字符转义的
driver = webdriver.Chrome(r'D:\Downloads\xx\chromedriver-win64\chromedriver.exe')
# 用get打开百度页面
driver.get("http://www.baidu.com")
# 找到输入框
shuru=driver.find_element_by_id('kw')
shuru.send_keys("python")
# 输入关键字sleep(3)
# # 找到确定按钮
button=driver.find_element_by_xpath('//*[@id="su"]')
button.click()# sleep(3)# # 关闭浏览器
# driver.quit()

在这里插入图片描述

在这里插入图片描述

效果展示3:

要求:对京东网站输入购买物品关键字后,同时注入js脚本滑倒最底部。

​ 要滑动网页到最低侧,你可以使用 JavaScript 中的 scrollTo 方法。以下是一个示例代码,可以在网页加载完成后自动滑动到最低侧:

window.onload = function() {// 获取文档的高度var docHeight = document.documentElement.scrollHeight;// 滑动到最低侧window.scrollTo(0, docHeight);};
// 滑动到最顶部
window.scrollTo(0, 0);
path = r'D:\Downloads\xx\chromedriver-win64\chromedriver.exe'from selenium import webdriver
from time import sleep# 创建一个浏览器对象,executable_path指定当前浏览器的驱动程序
bro = webdriver.Chrome(executable_path=path)# 浏览器的请求发送
bro.get('https://www.jd.com/')# 标签定位: 调用find系列的函数进行标签定位
search_box = bro.find_element_by_xpath('//*[@id="key"]')# 节点交互
search_box.send_keys('Apple14')  # 向指定标签中录入内容
sleep(2)btn = bro.find_element_by_xpath('//*[@id="search"]/div/div[2]/button/i')
btn.click()  # 点击按钮
sleep(2)# 使用execute_script方法注入JavaScript代码,滑动到最底部
bro.execute_script('window.scrollTo(0, document.documentElement.scrollHeight)')
sleep(5)# 关闭浏览器
bro.quit()

在这里插入图片描述

扩展:

扩展实现控制滑动的速度:

path = r'D:\Downloads\xx\chromedriver-win64\chromedriver.exe'from selenium import webdriver
from time import sleep# 创建一个浏览器对象,executable_path指定当前浏览器的驱动程序
bro = webdriver.Chrome(executable_path=path)# 浏览器的请求发送
bro.get('https://www.jd.com/')# 标签定位: 调用find系列的函数进行标签定位
search_box = bro.find_element_by_xpath('//*[@id="key"]')# 节点交互
search_box.send_keys('Apple14')  # 向指定标签中录入内容
sleep(2)btn = bro.find_element_by_xpath('//*[@id="search"]/div/div[2]/button/i')
btn.click()  # 点击按钮
sleep(2)# 获取页面高度
page_height = bro.execute_script('return document.documentElement.scrollHeight')# 设置每次滑动的距离和间隔时间
scroll_distance = 200  # 每次滑动的距离
scroll_interval = 0.1  # 每次滑动的间隔时间(秒)# 逐步滑动页面
current_height = 0  # 当前滑动的高度
while current_height < page_height:bro.execute_script(f'window.scrollBy(0, {scroll_distance});')  # 滑动指定距离sleep(scroll_interval)  # 等待一段时间current_height += scroll_distance  # 更新当前滑动的高度# 关闭浏览器
bro.quit()

建议大家将这段代码保存下来,实现慢慢滑动

# 获取页面高度
page_height = bro.execute_script('return document.documentElement.scrollHeight')# 设置每次滑动的距离和间隔时间
scroll_distance = 200  # 每次滑动的距离
scroll_interval = 0.1  # 每次滑动的间隔时间(秒)# 逐步滑动页面
current_height = 0  # 当前滑动的高度
while current_height < page_height:bro.execute_script(f'window.scrollBy(0, {scroll_distance});')  # 滑动指定距离sleep(scroll_interval)  # 等待一段时间current_height += scroll_distance  # 更新当前滑动的高度

今天的分享就到这里啦!!!

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

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

相关文章

Vue打包错误UnhandledPromiseRejectionWarning: CssSyntaxError

错误详情如下&#xff1a; building for production...Error processing file: static/css/app.3d5caae7aaba719754d7d5c30b864551.css (node:33011) UnhandledPromiseRejectionWarning: CssSyntaxError: /Users/yt/Documents/BM/sims-plus/sims-website/static/css/app.3d5caa…

ELK+kafka+filebeat企业内部日志分析系统

1、组件介绍 1、Elasticsearch&#xff1a; 是一个基于Lucene的搜索服务器。提供搜集、分析、存储数据三大功能。它提供了一个分布式多用户能力的全文搜索引擎&#xff0c;基于RESTful web接口。Elasticsearch是用Java开发的&#xff0c;并作为Apache许可条款下的开放源码发布…

Kafka 如何实现顺序消息

版本说明 本文所有的讨论均在如下版本进行&#xff0c;其他版本可能会有所不同。 Kafka: 3.6.0Pulsar: 2.9.0RabbitMQ 3.7.8RocketMQ 5.0Go1.21github.com/segmentio/kafka-go v0.4.45 结论先行 Kafka 只能保证单一分区内的顺序消息&#xff0c;无法保证多分区间的顺序消息…

1. git入门操作

1. git入门操作 1、基本名词解释 图片 名词含义index索引区&#xff0c;暂存区master分支名&#xff0c;每个仓库都有个master&#xff0c;它作为主分支。branch其他分支&#xff0c;我们可以把master分支上的代码拷贝一份&#xff0c;重新命名为其他分支名work space就是我…

信息学奥赛一本通1331:【例1-2】后缀表达式的值

1331&#xff1a;【例1-2】后缀表达式的值 时间限制: 10 ms 内存限制: 65536 KB 提交数: 54713 通过数: 13547 【题目描述】 从键盘读入一个后缀表达式&#xff08;字符串&#xff09;&#xff0c;只含有0-9组成的运算数及加&#xff08;&#xff09;、减&#xf…

【C4D如何将多个选集设置为一个选集】

操作 首先&#xff0c;单击一个选集&#xff0c;将选集中的面高亮显示 接着&#xff0c;按着shift&#xff0c;点击另一个选集&#xff0c;点击右侧命令栏中的选择&#xff0c;即可多选另外的面选集&#xff0c;更多的面选集是同样的操作&#xff0c;按着SHIFT选择新的选集即…

关于python中的nonlocal关键字

如果在函数的子函数中需要调用外部变量&#xff0c;一般会看见一个nonlocal声明&#xff0c;类似下面这种&#xff1a; def outer_function():x 10def inner_function():nonlocal xx 1print(x)inner_function()outer_function()在这个例子中&#xff0c;inner_function 引用…

【一起来学kubernetes】7、k8s中的ingress详解

引言配置示例负载均衡的实现负载均衡策略实现模式实现方案Nginx类型Ingress实现Treafik类型Ingress实现HAProxy类型ingress实现Istio类型ingress实现APISIX类型ingress实现 更多 引言 Ingress是Kubernetes集群中的一种资源类型&#xff0c;用于实现用域名的方式访问Kubernetes…

万字解析设计模式之责任链模式、状态模式

目录 一、责任链模式 1.1概述 1.2结构 1.3实现 1.4 优缺点 1.5应用场景 1.6源码解析 二、状态模式 2.1概述 2.2结构 2.3实现 2.4优缺点 2.5应用场景 三、责任链模式实验 任务描述 实现方式 编程要求 测试说明 四、状态模式实验 任务描述 实现方式 编程要…

23年最新版pycharm找不到conda可执行文件解决办法

引言 我下载的是2023年最新版本的pycharm&#xff0c;不知道怎么安装pycharm的看我这篇文章。新版的 pycharm 安装好了之后就会出现一个问题&#xff0c;就是在配置 conda 虚拟环境找不到 conda 的可执行文件&#xff0c;出现了以下问题。 遇到这个问题有两种解决办法。 解决办…

ChatGPT文章批量改写伪原创软件说明文档

大家好&#xff0c;我是淘小白~ 最近有很多朋友咨询&#xff0c;chatGPT文章改写插件和改写软件&#xff0c;这个软件之前已经做出来了&#xff0c;用的朋友不是很多&#xff0c;这几天有不少咨询的&#xff0c;现在把说明文档补一下&#xff0c;(#^.^#) 1、软件语言 Pytho…

基于python+TensorFlow+Django算法模型的车辆车型识别系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介简介技术栈主要模块1. 数据预处理2. 模型构建3. 模型训练4. 模型集成5. 用户界面 系统工作流程未来改进计划 二、功能三、系统四. 总结 一项目简介 # 车辆车…