【自用】Python爬虫学习(七):selenium网页自动化操作

Python爬虫学习(七)

  • selenium介绍
  • selenium基础用法
  • selenium其他自动化操作
  • selenium动作链与iframe的处理
  • selenium无可视化界面与反检测实现


selenium介绍

selenium是一个广泛使用的开源自动化测试框架,主要用于Web应用程序的功能测试。它支持多种浏览器(如Chrome、Firefox、 Safari等)和操作系统(Windows、Mac、Linux),并允许用户通过编写代码自动执行浏览器中的操作。

Selenium可以很好地处理动态加载的Web内容,包括AJAX和JavaScript生成的元素,覆盖面更广。

selenium基础用法

import time
from lxml import etree
from selenium import webdriver# 新发地网址
url = 'http://www.xinfadi.com.cn/index.html'# 实例化一个浏览器对象
bro = webdriver.Edge()# 让浏览器发起一个指定url对应请求
bro.get(url)# page_source获取浏览器当前页面的页面源码数据
# (包含所见的所有数据,无论是服务器渲染还是客户端渲染都一样)
page_text = bro.page_source
# print(page_text)tree = etree.HTML(page_text)
tr_list = tree.xpath('//tbody[@id="ulTableBody"]/tr')
# print(tr_list[1])
for tr in tr_list:prodName = tr.xpath('./td[1]/text()')lowprice = tr.xpath('./td[2]/text()')avgprice = tr.xpath('./td[3]/text()')highprice = tr.xpath('./td[4]/text()')date = tr.xpath('./td[8]/text()')print(prodName, lowprice, avgprice, highprice, date)time.sleep(5)
bro.quit()

运行结果:

在这里插入图片描述

selenium其他自动化操作

import time
from selenium import webdriverurl = 'https://www.taobao.com/'# 实例化一个浏览器对象
bro = webdriver.Edge()# 让浏览器发起一个指定url对应请求
bro.get(url)# 标签定位,定位到页面中的搜索框
search_input = bro.find_element(by='id', value='q')
# 标签交互,在搜索框中输入文本
search_input.send_keys('iphone')# 执行一组js程序,右侧滑动一个页面的高度
bro.execute_script('window.scrollTo(0,document.body.scrollHeight)')
time.sleep(5)# 点击搜索按钮
search_button = bro.find_element(by='css selector', value='.btn-search')
search_button.click()# 重新打开一个网页
bro.get('https://www.baidu.com/')
# 回退
bro.back()
time.sleep(3)
# 前进
bro.forward()time.sleep(5)
bro.quit()

selenium动作链与iframe的处理

"""
-selenium处理iframe-如果定位的标签存在于iframe标签之中,则必须使用switch_to.frame(id)-动作链(拖动) :from selenium.webdriver import ActionChains-实例化一个动作链对象:action =ActionChains(bro)-click_and_hold(div):长按且点击操作-move_by_offset(x,y)-perform()让动作链立即执行-action.release()释放动作链对象
"""
import time
from selenium import webdriver
from selenium.webdriver import ActionChainsurl = 'https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable'# 调用Chrome浏览器打开网页
bro = webdriver.Chrome()
bro.get(url)# 如果定位的标签是存在于iframe标签之中的则必须通过如下操作再进行标签定位
bro.switch_to.frame('iframeResult')  # iframeResult为iframe标签的iddiv = bro.find_element(by='id', value='draggable')# 动作链
action = ActionChains(bro)
# 点击长按指定的标签
action.click_and_hold(div)for i in range(5):action.move_by_offset(50, 0).perform()time.sleep(1)
# 释放动作链
action.release().perform()
print("程序运行完毕!")
time.sleep(3)
bro.quit()

selenium无可视化界面与反检测实现

from time import sleep
from selenium import webdriver
# 实现无可视化界面
from selenium.webdriver.chrome.options import Options# 实现无可视化界面的操作,让selenium规避被检测
chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
# 实现规避检测
chrome_options.add_experimental_option('excludeSwitches', ['enable-automation'])# 无可视化界面
bro = webdriver.Chrome(options=chrome_options)
bro.get('https://www.baidu.com')
print(bro.page_source)
sleep(2)
bro.quit()

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

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

相关文章

机器学习速成第二集——监督学习之分类(理论部分)!

目录 分类算法的种类 分类问题的应用场景 模型选择与评估 结论 如何在不同数据集中选择最适合的监督学习分类算法? 监督学习中集成模型与单一模型相比有哪些具体的优势和劣势? 优势: 劣势: 在处理高维稀疏数据时&#xf…

Kubernetes-K8S

Kubernetes由于单词太长,省略掉中间8个字母简称为K8S。它介于应用服务和服务器之间。能够通过策略协调和管理多个服务,只需要一个YAML文件配置。定义应用的部署顺序等信息,自动部署应用到各个服务器,还可以自动扩容缩容。 架构原理…

K8S资源之Service

概念 将一组 Pods 公开为网络服务的抽象方法。 ClientIP 模型 集群内访问类型。 命令行 # 暴露端口 kubectl expose deployment my-dep-nginx --port8000 --target-port80Yml文件 apiVersion: v1 kind: Service metadata:labels:app: my-dep-nginxname: my-dep-nginx spe…

【张】#12 enum 枚举

enum 枚举定义格式&#xff1a; enum <类型名> {<枚举常量表> }; 枚举其实就是一个整数 enum example {Aa,Bb10,Cc //给Bb赋值为10后&#xff0c;Cc的值会变成11 }; 枚举变量只能使用枚举值&#xff0c;枚举可以赋值给整型&#xff0c;整型不能赋值给枚举 #inc…

Django | 从中间件的角度理解跨站请求伪造(Cross-Site Request Forgey)[CSRF攻击]

文章目录 切入点案例测试views.py测试代码templates模板下的html文件配置路由运行服务 出现CSRF报错解决CRSF报错再次运行服务 查看结果 切入点 某些恶意网站上包含链接、表单按钮或者]avaScript,它们会利用登录过的用户在浏览器中的认证信息试图在你的网站上完成某些操作 Gj…

HTML+CSS进阶用法(上)——平面转换、渐变、空间转换

欢迎来到CSS变换的世界&#xff0c;这里充满了创意和可能性。在本篇博客中&#xff0c;我们将一起学习如何使用transform属性来实现各种平面和空间转换效果&#xff0c;包括位移、旋转、缩放&#xff0c;以及如何通过渐变和动画来增强我们的网页设计。无论你是初学者还是有经验…

并发编程(第二天)

interrupt 方法详解 打断 sleep&#xff0c;wait&#xff0c;join 的线程 这几个方法都会让线程进入阻塞状态 打断 sleep 的线程, 会清空打断状态打断正常运行的线程 打断正常运行的线程, 不会清空打断状态打断 park 线程 打断 park 线程, 不会清空打断状态 如果打断标记已经…

【Python】线性规划模型(笔记)

线性规划的作用 求一个线性目标函数在线性可行域内的最值问题 线性规划的典型应用 配送运输问题&#xff1a;选大车还是小车生产规划问题&#xff1a;每种原料各买多少几何切割问题&#xff1a;切割长宽各多少买卖利润问题&#xff1a;最多能挣多少钱… 线性规划的本质 问…

C语言FTP文件传输(完成基本文件传输的功能)

文章目录 前言一、实现思路二、实现FTP服务器三、实现FTP客户端四、实现体验总结 前言 本篇文章带大家来完成一下C语言FTP文件传输助手最基础的功能&#xff0c;也就是客户端和服务器之间进行最基础的文件传输的功能。 一、实现思路 实现一个基本的 FTP 客户端和服务器&…

【生成式人工智能-十一一个不修改模型就能加速语言模型生成的方法】

一个加速语言模型生成的方法 现在语言模型的一个弊端speculative decoding预言家预测的问题 speculative decoding 模块的实现方法NAT Non-autoregressive模型压缩使用搜索引擎 一些更复杂些的speculative decoding 实现方式 speculative decoding 是一个适用于目前生成模型的加…

WSL 忘记ubuntu的密码

文章目录 1. 以管理员身份打开 PowerShel2.输入命令 wsl.exe -d Ubuntu-20.04 --user root3.输入命令 passwd username 修改用户密码&#xff0c;username即待重置的用户的名称 1. 以管理员身份打开 PowerShel 2.输入命令 wsl.exe -d Ubuntu-20.04 --user root 注意版本号是自…

Springboot整合Flowable入门-学习笔记

目录 1、定义流程&#xff08;画图&#xff09; 2、Springboot部署流程 3、Springboot删除所有流程 4、Springboot根据 流程部署ID 查询 流程定义ID 5、Springboot启动(发起)流程 6、Springboot查询任务 6.1全部任务 6.2我的任务&#xff08;代办任务&#xff09; 7、…

JVM知识总结(性能调优)

文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 性能调优 何时进行JVM调优&#xff1f; 遇到以下情况&#xff0c…

傻瓜式一步到位Mysql 8.0 密码修改

5.7之前修改密码语句 update user set authentication_string password(“root”) where user “root”; mysql 5.7.9以后废弃了password字段和password()函数&#xff1b;并在user表加了authentication_string:字段表示用户密码 #进入到mysql 安装目录下 #停止 mysql 服务 …

怎么调试python脚本

打开pycharm community 2019.1软件&#xff0c;创建一个项目。 创建一个py后缀的文件作为示范&#xff0c;文件名自己定义。 编写代码&#xff0c;然后右键点击进行运行&#xff0c;查看一下是否有问题。 点击右上角的虫子图标&#xff0c;然后下面会有控制面板出来&#xff0c…

基于C11的简单log,支持C++的‘<<’风格和C的‘可变参数’风格

基于C11的简单log&#xff0c;支持C的‘<<’风格和C的‘可变参数’风格 日志仅由richlog.h单个文件实现功能&#xff0c;软件集成简单。 支持C的std::cout的<<风格的日志打印&#xff0c;也支持C的printf风格的日志打印 日志多线程安全&#xff0c;采用C11 mute…

SpringBoot整合日志功能(slf4j+logback)详解

目录 一、日志门面与日志实现 1.1 什么是日志门面和日志实现&#xff1f; 1.2 为什么需要日志门面&#xff1f; 二、简介 三、日志格式 四、记录日志 4.1 使用日志工厂 4.2 使用Lombok的Slf4j注解 五、日志级别 5.1 日志级别介绍 5.2 配置日志级别 5.3 指定某个包下…

分类预测|基于粒子群优化核极限学习机的Adaboost集成模型数据分类预测Matlab程序 PSO-KELM-Adaboost

分类预测|基于粒子群优化核极限学习机的Adaboost集成模型数据分类预测Matlab程序 PSO-KELM-Adaboost 文章目录 前言分类预测|基于粒子群优化核极限学习机的Adaboost集成模型数据分类预测Matlab程序 PSO-KELM-Adaboost 一、PSO-KELM-Adaboost模型1. 核化极限学习机 (KELM)2. 粒子…

数据库原理面试-核心概念-问题理解

目录 1.数据库、数据库系统与数据库管理系统 2.理解数据独立性 3.数据模型 4.模式、外模式和内模式 5.关系和关系数据库 6.主键与外键 7.SQL语言 8.索引与视图 9.数据库安全 10.数据库完整性 11.数据依赖和函数依赖 12.范式&#xff1f;三范式&#xff1f;为什么要遵…

用栈访问最后若干元素——682、71、388

682. 棒球比赛&#xff08;简单&#xff09; 你现在是一场采用特殊赛制棒球比赛的记录员。这场比赛由若干回合组成&#xff0c;过去几回合的得分可能会影响以后几回合的得分。 比赛开始时&#xff0c;记录是空白的。你会得到一个记录操作的字符串列表 ops&#xff0c;其中 ops[…