selenium基本操作

news/2024/4/26 8:59:18/文章来源:https://blog.csdn.net/m0_73344153/article/details/129191710

爬虫与反爬虫之间的斗争

爬虫:对某个网站数据或图片感兴趣,开始抓取网站信息;
网站:请求次数频繁,并且访问ip固定,user_agent也是python,开始限制访问;
爬虫:通过设置user_agent,并添加代理ip请求;
网站:压力过大,不符合常规现象,开始设置登陆访问;
爬虫:注册账号,携带cookie获取数据;
网站:发现网站单账号访问异常,限制账号权限;
爬虫:构建cookie池,多个账号联合爬取数据;
网站:压力还是很大,加大对访问频繁ip的封锁频率
爬虫:开始模仿手动请求,限制爬取速度
网站:设置验证码策略
爬虫:打码平台介入,或者机器学习识别验证码
网站:发现对HTML数据请求频繁,不请求js和css,开发人员将重要数据通过Ajax方式加载
爬虫:通过selenium+phantomjs完全模拟浏览器操作
网站:。。。。。。

认识selenium

--- Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。

-----支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google,Chrome,Opera,Edge等

浏览器驱动

Selenium需要驱动程序与所选浏览器进行交互,下面是几种常见的驱动下载链接:

  • Chrome: http://chromedriver.storage.googleapis.com/index.html

  • Edge: https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/

  • Firefox: https://github.com/mozilla/geckodriver/releases

  • Safari: https://webkit.org/blog/6900/webdriver-support-in-safari-10/

selenium入门

# 导入模块
fromseleniumimportwebdriver
​
# 使用谷歌浏览器
driver = webdriver.Chrome()
​
# 使用谷歌打开百度页面
driver.get("https://www.baidu.com")
​
# 窗口最大化
driver.maximize_window()
​
# 获取页面源代码
driver.page_source
​
# 获取所有cookie
driver.get_cookies()

页面元素定位

fromseleniumimportwebdriver
fromselenium.webdriver.common.byimportBy
​
driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
# 1、通过id值定位
driver.find_element(By.ID,"kw")
​
# 2、通过class值定位
driver.find_element(By.CLASS_NAME,"s_ipt")
​
# 3、通过name定位
driver.find_element(By.NAME,"wd")
​
# 4、通过tag_name定位
driver.find_element(By.TAG_NAME,"div")
# 说明:HTML本质就是由不同的tag(标签)组成,而每个tag都是指同一类,所以tag定位效率低,一般不建议使用;
​
# 5、通过XPATH语法定位
driver.find_element(By.XPATH,"//*[@id="kw"]")
​
# 6、通过css语法定位
driver.find_element(By.CSS,"#kw")
​
# 7、通过文本定位--精确定位
driver.find_element(By.LINK_TEXT,"在希望的田野上")
​
# 8、通过部分文本定位--模糊定位
driver.find_element(By.PARTIAL_LINK_TEXT,"田野上")

操作表单元素

# 输入内容
send_keys("python")
​
# 清除输入框内容
clear()
# 鼠标单击
click()             

行为链

在用selenium操作页面时,有时要分为很多步骤,那么这个时候可以用鼠标行为链类ActionChains来完成。
from selenium import webdriver
from selenium.webdriver.common.by importBy
#引入行为链ActionChains类
from selenium.webdriver.common.action_chains import ActionChains
​
driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
#定位搜索框
inputtag = driver.find_element(By.ID,"kw")
​
#百度一下按钮
submittag = driver.find_element(By.ID,"su")
​
#建立行为链
actions =ActionChains(driver)
​
#给搜索框发送数据
actions.move_to_element(inputtag)
actions.send_keys_to_element(inputtag,'python')
#选中提交按钮并提交
actions.move_to_element(submittag)
actions.click(submittag)
#统一执行
actions.perform()

动作链

  • ActionChains方法列表

click(on_element=None) ——单击鼠标左键

click_and_hold(on_element=None) ——点击鼠标左键,不松开

context_click(on_element=None) ——点击鼠标右键

double_click(on_element=None) ——双击鼠标左键

drag_and_drop(source, target) ——拖拽到某个元素然后松开

key_down(value, element=None) ——按下某个键盘上的键

key_up(value, element=None) ——松开某个键

move_to_element(to_element) ——鼠标移动到某个元素

perform() ——执行链中的所有动作

release(on_element=None) ——在某个元素位置松开鼠标左键

send_keys(*keys_to_send) ——发送某个键到当前焦点的元素

send_keys_to_element(element, *keys_to_send) ——发送某个键到指定元素

  • 鼠标移动

示例网站:http://sahitest.com/demo/mouseover.htm

# -*- coding:utf-8 -*-
fromseleniumimportwebdriver
fromselenium.webdriver.common.action_chainsimportActionChains
fromselenium.webdriver.common.byimportBy
importtime
​
driver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.maximize_window()
driver.get('http://sahitest.com/demo/mouseover.htm')
​
# 鼠标移动到此元素,在下面的input框中会显示“Mouse moved”
write = driver.find_element(By.XPATH,'//input[@value="Write on hover"]')
# 鼠标移动到此元素,会清空下面input框中的内容
blank = driver.find_element(By.XPATH,'//input[@value="Blank on hover"]')
​
result = driver.find_element(By.NAME,'t1')
​
action = ActionChains(driver)
# 移动到write,显示“Mouse moved”
time.sleep(3)
# 移动到write上
action.move_to_element(write).perform()
​
# 移动到blank上,清空
time.sleep(3)
action.move_to_element(blank).perform()
# 移动到write上
time.sleep(3)
action.move_to_element(write).perform()
​

driver.quit()

  • 鼠标拖拽

示例网站:http://sahitest.com/demo/dragDropMooTools.htm

fromseleniumimportwebdriver
fromselenium.webdriver.common.action_chainsimportActionChains
fromselenium.webdriver.common.byimportBy
fromtimeimportsleep
​
driver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.maximize_window()
driver.get('http://sahitest.com/demo/dragDropMooTools.htm')
​
target = driver.find_element(By.ID,'dragger')  # 被拖拽元素
item1 = driver.find_element(By.XPATH,'//div[text()="Item 1"]')  # 目标1
item2 = driver.find_element(By.XPATH,'//div[text()="Item 2"]')  # 目标2
item3 = driver.find_element(By.XPATH,'//div[text()="Item 3"]')  # 目标3
item4 = driver.find_element(By.XPATH,'//div[text()="Item 4"]')  # 目标4
​
action = ActionChains(driver)
# 1.移动dragger到目标1
action.drag_and_drop(target, item1).perform()
sleep(2)
# 2.效果与上句相同,也能起到移动效果
action.click_and_hold(target).release(item2).perform() 
sleep(2)
# 3.效果与上两句相同,也能起到移动的效果
action.click_and_hold(target).move_to_element(item3).release().perform()
sleep(2)
action.click_and_hold(target).move_to_element(item4).release().perform()
sleep(2)
driver.quit()
  • 点击操作

示例网站:http://sahitest.com/demo/clicks.htm

fromseleniumimportwebdriver
fromselenium.webdriver.common.action_chainsimportActionChains
fromselenium.webdriver.common.byimportBy
fromtimeimportsleep
driver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.maximize_window()
driver.get('http://sahitest.com/demo/clicks.htm')
# 单击按钮
click_left = driver.find_element(By.XPATH,'//input[@value="click me"]')
# 双击按钮
doubleclick_btn = driver.find_element(By.XPATH,'//input[@value="dbl click me"]')
# 右键单击按钮
click_right = driver.find_element(By.XPATH,'//input[@value="right click me"]')
# 链式用法
ActionChains(driver).click(click_left).double_click(doubleclick_btn).context_click(click_right).perform()
​
sleep(2)
driver.quit()

页面等待

--- 当selenium打开一个页面要进行操作,但是浏览器还处于加载状态,所以需要等待加载完毕之后再操作

显式等待
显式等待是您定义的代码,用于等待特定条件发生,然后再继续执行代码。这种情况的极端情况是 time.sleep(),它将条件设置为要等待的确切时间段。提供了一些方便的方法来帮助您编写只等待所需时间的代码。WebDriverWait 与 ExpectedCondition 结合使用是实现此目的的一种方式。
fromseleniumimportwebdriver
fromselenium.webdriver.common.byimportBy
fromselenium.commonimportTimeoutException
fromselenium.webdriver.support.uiimportWebDriverWait
fromselenium.webdriver.supportimportexpected_conditionsasEC
​
driver = webdriver.Chrome()
driver.get("http://somedomain/url_that_delays_loading")
defsearch():try:element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "myDynamicElement")))exceptTimeoutException:returnsearch()
在上面的代码中,Selenium 将等待最多 10 秒以找到匹配给定条件的元素。如果在那段时间内没有找到任何元素,则抛出 TimeoutException。捕获到异常后写一个递归操作,这样10秒之后就会继续等待10秒,知道元素加载完毕

隐式等待
隐式等待告诉 WebDriver 在尝试查找任何不立即可用的元素(或多个元素)时轮询 DOM 一段时间。默认设置为 0(零)。设置后,将为 WebDriver 对象的生命周期设置隐式等待。
fromseleniumimportwebdriver
​
driver = webdriver.Firefox()
driver.implicitly_wait(10) # seconds
driver.get("http://somedomain/url_that_delays_loading")
myDynamicElement = driver.find_element_by_id("myDynamicElement")

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

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

相关文章

ifconfig不显示ipv4地址,ifconfig eth0 192.168.5.9失败

ifconfig eth0 192.168.5.9设置ip地址后,通过ifconfig仍然没有ipv4地址: 一、 执行ifup eth0启动eth0: ifconfig、ifup、ifdown :这三个命令的用途都是启动网络接口,不过,ifup 与 ifdown 仅就 /etc/sysconfig/network-…

【数据存储】浮点型在内存中的存储

目录 一、存储现象 二、IEEE标准规范 1.存储 2.读取 三、举例验证 1.存储 2.读取 浮点型存储的标准是IEEE(电气电子工程师学会)754制定的。 一、存储现象 浮点数由于其有小数点的特殊性,有很多浮点数是不能精确存储的,如&#…

阅读HAL源码之重点总结

HAL封装中有如下特点(自己总结的): 特定外设要设置的参数组成一个结构体; 特定外设所有寄存器组成一个结构体; 地址基本都是通过宏来定义的,定义了各外设的起始地址,也就是对应寄存器结构体的地…

优秀外贸业务员必备的业务技能

2023年的春天,可谓是外贸企业三年寒冬后的第一个春天。外贸行业离不开的就是优秀的外贸业务员,那么一个优秀的外贸业务员需要有哪些必备的技能呢?跟着我一起来看看吧!一、电话开发客户能力首先,要知道,声音…

【unittest学习】unittest框架主要功能

1.认识unittest在 Python 中有诸多单元测试框架,如 doctest、unittest、pytest、nose 等,Python 2.1 及其以后的版本已经将 unittest 作为一个标准模块放入 Python 开发包中。2.认识单元测试不用单元测试框架能写单元测试吗?答案是肯定的。单…

华为OD机试题,用 Java 解【最小施肥机能效】问题

最近更新的博客 华为OD机试 - 猴子爬山 | 机试题算法思路 【2023】华为OD机试 - 分糖果(Java) | 机试题算法思路 【2023】华为OD机试 - 非严格递增连续数字序列 | 机试题算法思路 【2023】华为OD机试 - 消消乐游戏(Java) | 机试题算法思路 【2023】华为OD机试 - 组成最大数…

无线通信时代的新技术----信标( Beacon)

随着IT技术的发展,无线通信技术也在不断发展。 现已根据预期用途开发了各种无线通信技术,例如 NFC、WIFI、Bluetooth和 RFID。 车辆内部结构的复杂化和数字化,车载通信网络技术的重要性也越来越高。 一个典型的例子是远程信息处理。 远程信息…

ESP32 Arduino EspNow点对点双向通讯

ESP32 Arduino EspNow点对点双向通讯✨本案例分别采用esp32和esp32C3之间点对点单播无线通讯方式。 🌿esp32开发板 🌾esp32c3开发板 🔧所需库(需要自行导入到Arduino IDE library文件夹中,无法在IDE 管理库界面搜索下载到该库)&am…

git cherry-pick could not apply fb2cde669...问题解决

最近多个分支修复bug,在使用git cherry-pick进行小功能合并时经常会出现类似could not apply fb2cde669...的错误。具体如下图:具体原因是cherry-pick指定的commit内容中和当前分支有冲突导致的。具体解决分以下步骤:1:首先使用gi…

京东前端二面必会vue面试题(持续更新中)

说一下Vue的生命周期 Vue 实例有⼀个完整的⽣命周期,也就是从开始创建、初始化数据、编译模版、挂载Dom -> 渲染、更新 -> 渲染、卸载 等⼀系列过程,称这是Vue的⽣命周期。 beforeCreate(创建前):数据观测和初…

spring(六)--------spring的扫描机制

spring的扫描一般可以通过两种方式: 测试类: Component public class Scan_A {PostConstructpublic void init(){System.out.println("-----------Scan_A");}} 1)、ComponentSscan注解 public class ComponentScanTest {public…

前端JS调用grpc服务(cpp)

参考文献:https://blog.csdn.net/qq_45634989/article/details/128151766依赖文件:protoc-v3-20.1.exe grpc_cpp_plugin.exe // 生成cpp中间文件protoc-gen-grpc-web.exe // 生成js中间文件grpcwebproxy-v0.13.0-win64 1.4.0.exe // 负责代理的端口映射新…

运营级手机直播平台源码 短视频直播带货APP源码

短视频直播带货APP源码 全开源原生直播APP源码 前端:原生APP 安卓端:Java 苹果端:OC 后台:PHP 数据库:Mysql 技术框架:Thinkphp5.1 系统特色功能包括:礼物系统;提现方式&#…

WAF:ModSecurity on Nginx(15)

预备知识 Nginx概述 Nginx ("engine x") 是一个高性能的HTTP和 反向代理 服务器,也是一个 IMAP/POP3/SMTP服务器。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代…

指针的进阶【上篇】

文章目录📀1.字符指针📀2.指针数组📀3.数组指针💿3.1.数组指针的定义💿3.2. &数组名VS数组名💿3.3.数组指针的使用📀1.字符指针 int main() {char ch w;char* pc &ch;// pc就是字符指…

智慧物联网系统源码:一个用于数据的收集、处理、可视化、设备管理、设备预警、报警的平台

项目简介: 一个用于数据的收集、处理、可视化、设备管理、设备预警、报警的平台,通过平台将所有设备连接起来,为上层应用提供设备的管理、数据收集、远程控制等核心物联网功能。 支持支持远程对设备进行实时监控、故障排查、远程控制&#…

PPP点到点协议认证之PAP认证

PPP点到点协议认证之PAP认证 需求 如图配置接口的IP地址将R1配置为认证端,用户名和密码是 huawei/hcie ,使用的认证方式是pap确保R1和R2之间可以互相ping通 拓扑图 配置思路 确保接口使用协议是PPP确保接口的IP地址配置正确在R1 的端口上&#xff0c…

Pycharm远程服务器常见问题

2023年02月23日 问题描述&#xff1a;Pycharm远程服务器跑代码时&#xff0c;不小心把Pycharm关掉了&#xff0c;但服务器代码还在运行&#xff1f; 解决办法&#xff1a;kill进程 先用watch -n 0.5 nvidia_smi查看进程&#xff0c;然后kill -9 <进程> 1、nvidia-smi…

ip公司和soc公司是什么?

IP 公司和 SoC 公司都是半导体行业的重要组成部分&#xff0c;但它们的角色和职责略有不同。IP&#xff08;Intellectual Property&#xff09;公司主要提供可重用的知识产权组件&#xff0c;也称为 IP 核或 IP 模块&#xff0c;这些组件可以在设计芯片的过程中被集成到芯片中。…

Unity 对接 ML-Agents 初探

一、ML-Agents 是什么 The Unity Machine Learning Agents Toolkit (ML-Agents) is an open-source project that enables games and simulations to serve as environments for training intelligent agents. We provide implementations (based on PyTorch) of state-of-the…