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.mzph.cn/news/168676.shtml

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

相关文章

matlab使用plot画图坐标轴上的导数速度一点和加速度两点如何显示

一、背景 在使用matlab中的plot函数画图时&#xff0c;有时需要在坐标轴上显示一个点的导数项&#xff0c;如横坐标是时间&#xff0c;纵坐标是速度&#xff0c;也就是位置的导数 y ˙ \dot y y˙​&#xff0c;如下图所示&#xff0c;这在matlab如何操作呢&#xff1f; 二…

护士排班问题:Nurse Rostering Problem(NRP)实战并可视化页面

文章目录 护士排班NRP问题问题示例模型求解排班表可视化护士排班NRP问题 基于计算机的自动化排班有助于提高排班的效率和质量,从而使得人力资源得到有效的利用。护士排班问题并不专指对于医院护士的排班,实际上泛指这种限制条件较多的排班问题。护士排班NRP问题是一个典型的…

工厂方法模式 (Factory Method Pattern)

定义&#xff1a; 工厂方法模式&#xff08;Factory Method Pattern&#xff09;是一种创建型设计模式&#xff0c;用于解决对象创建的问题。它定义了一个创建对象的接口&#xff0c;但让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。 工厂方法模式的关键…

为什么要升级水经微图到64位?

前段时间&#xff0c;水经微图升级到了64位版。 这里为大家说明一下我们为什么要升级水经微图到64位。 顺便再分享一下我们在PC端产品上的一些调整。 为什么要升级到64位&#xff1f; 水经微图一直以来有一个巨大的问题&#xff0c;那就是矢量加载与绘制功能相当弱。 但凡…

SecureCRT出现Key exchange failed.No compatible key exchange method. 错误解决方法

SecureCRT出现Key exchange failed.No compatible key exchange method. 如下 Key exchange failed. No compatible key exchange method. The server supports these methods: curve25519-sha256,curve25519-sha256libssh.org,diffie-hellman-group-exchange-sha256解决方法&…

【计网 可靠数据传输RDT】 中科大笔记 (十 一)

目录 0 引言1 RDT的原理RDT的原理&#xff1a; 2 RDT的机制与作用2.1 重要协议停等协议&#xff08;Stop-and-Wait&#xff09;:连续ARQ协议: 2.2 机制与作用实现机制&#xff1a;RDT的作用&#xff1a; &#x1f64b;‍♂️ 作者&#xff1a;海码007&#x1f4dc; 专栏&#x…

Java8 对象List 排序

目录 1.stream流式排序 1.使用说明: 2.多字段排序 2.Collections.sort(......) 排序 1.stream流式排序 Java8提供了流式操作来简化我们的编程&#xff0c;比如排序、分组、过滤、Map操作等API&#xff0c;配合Lambda表达式给我们编程带来了很大的便利&#xff0c;这篇文章重…

react高阶成分(HOC)

使用React函数式组件写了一个身份验证的一个功能&#xff0c;示例通过高阶组件实现的一个效果展示&#xff1a; import React, { useState, useEffect } from react;// 定义一个高阶组件&#xff0c;它接受一个组件作为输入&#xff0c;并返回一个新的包装组件 const withAuth…

Qt QIODevice介绍

作者:令狐掌门 技术交流QQ群:675120140 csdn博客:https://mingshiqiang.blog.csdn.net/ 文章目录 主要功能用法示例读取数据写入数据使用数据流基于套接字的读写注意事项QIODevice 是 Qt 中所有输入/输出设备的抽象基类。它为派生类提供了一组标准的接口用于读写数据。这些派…

Linux中tar命令的几个高级用法

在Linux世界中&#xff0c;Tar命令是一把解密归档世界的魔法工具。无论是打包、压缩还是解压&#xff0c;Tar命令都能胜任。本文将生动地介绍Tar命令的基本用法&#xff0c;并深入探讨五个常用选项&#xff0c;帮助读者在Linux系统中灵活运用这个强大的工具。 一、命令概述 Ta…

网络安全面试经历

2023-11-22 X亭安全服务实习生面试 一面&#xff1a; 工作方向&#xff1a;偏蓝队 总结&#xff1a;实习蓝队面试没有什么难度&#xff0c;没有什么技术上的细节问题&#xff0c;之前准备的细节问题没有考 最后和面试官聊了聊对网安的认识&#xff0c;聊了聊二进制的知识…

日本服务器访问速度和带宽有没有直接关系?

​  对于许多网站和应用程序来说&#xff0c;服务器的访问速度是至关重要的。用户希望能够快速加载页面、上传和下载文件&#xff0c;而这些都与服务器的带宽有关。那么&#xff0c;日本服务器的访问速度和带宽之间是否存在直接关系呢? 我们需要了解什么是带宽。带宽是指网络…

软件工程导论复习

文章目录 第一章软件工程学概述第二章可行性分析第三章需求分析第五章总体设计第六章详细设计第七章 实现第八章 维护重点预测 第一章软件工程学概述 什么叫软件危机&#xff1f;软件危机的表现有哪些&#xff1f;产生软件危机的原因是什么&#xff1f;什么是软件工程&#xf…

MySQL的体系结构与SQL的执行流程

文章目录 前言体系结构SQL语句的执行流程1、连接MySQL2、查询缓存3、解析SQL语句4、优化SQL语句5、执行SQL语句 总结 前言 如果你在使用MySQL时只会写sql语句的&#xff0c;那么你应该看一下《MySQL优化的底层逻辑》。如果你只了解到sql是如何优化的&#xff0c;那么你应该通过…

面试:云计算相关

文章目录 什么是云计算&#xff0c;它有哪些特性介绍一下云计算中的多租户技术&#xff0c;以及它在云环境中的应用解释一下什么是无服务器计算&#xff0c;以及它在云环境中的应用介绍一下云计算中的冷启动、热迁移和容灾&#xff0c;以及它们的优缺点描述一下云计算的几种服务…

Java反射调用kotlin中的类,Object类,Companion对象

Java反射调用kotlin中的类&#xff0c;Object类&#xff0c;Companion对象 1. Java反射调用kotlin中的普通类 kotlin普通类&#xff1a; package com.common; class TestNormal {fun get():String{return "Nolmal abc"}fun showNum(v:Int){println("Nolmal s…

【数据结构】什么是栈?

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:数据结构 ⚙️操作环境:Visual Studio 2022 目录 &#x1f4cc;栈的定义 &#x1f4cc;元素进栈出栈的顺序 &#x1f4cc;栈的抽象数据类型 &#x1f4cc;栈的顺序存储结构 &#x1f4cc;栈的链式存储结构 链栈的进…

java集合,ArrayList、LinkedList和Vector,多线程场景下如何使用 ArrayList

文章目录 Java集合1.2 流程图关系1.3 底层实现1.4 集合与数组的区别1.4.1 元素类型1.4.2 元素个数 1.5 集合的好处1.6 List集合我们以ArrayList集合为例1.7 迭代器的常用方法1.8 ArrayList、LinkedList和Vector的区别1.8.1 说出ArrayList,Vector, LinkedList的存储性能和特性1.…

汽车电子 -- 根据DBC解析CAN报文

采集的CAN报文&#xff0c;怎么通过DBC解析呢&#xff1f;有一下几种方法。 首先需要确认是CAN2.0 还是CAN FD报文。 还有是 实时解析 和 采集数据 进行解析。 一、CAN2.0报文实时解析&#xff1a; 1、CANTest工具 使用CAN分析仪 CANalyst-II&#xff0c;采集CAN报文。 使用…

Python与设计模式--单例模式

Python与设计模式–单例模式 一、总线 总线是计算机各种功能部件或者设备之间传送数据、控制信号等信息的公共通信解决方案之一。 现假设有如下场景&#xff1a;某中央处理器&#xff08;CPU&#xff09;通过某种协议总线与一个信号灯相连&#xff0c;信号灯有64种颜色可以设…