Python爬虫进阶(三):Selenium模拟浏览器操作

2023-05-16

目录

关于Selenium

启动webdriver

selenium查找元素

selenium模拟用户行为

执行JS

模拟滚动条滚动

模拟鼠标操作

模拟键盘操作

其他常用函数


这一节我们来讲解使用selenium来模拟浏览器操作进而方便快捷可视化地冲破网站的“关卡”。

关于Selenium

前面我说过selenium是一套自动化测试工具,但是可以用于爬虫。通过Selenium操控浏览器执行操作,我们可以发出与真人用户行为完全一致的动作(因为它本就来自于浏览器)。更重要的是,selenium操作浏览器的过程是可以被编程者看见的,这也就是为什么我会用selenium+chrome作为例子(不用PhantomJS就是因为没有界面不方便观察)。

启动webdriver

本文用chromedriver举例。

前面说过selenium通过使用与浏览器对应的webdriver来驱动浏览器访问网站,而简单地启动浏览器只需要以下几行:

from selenium import webdriver

DRIVERPATH="chromedriver.exe"

driver=webdriver.Chrome(DRIVERPATH)

driver.get("http://www.baidu.com")

其中DRIVERPATH即是你的webdriver的路径,如果你把它写进系统的PATH里也可以不带此参数。

运行代码后,你会看到chrome启动并注明“Chrome正在受到自动测试软件的控制”,然后chrome打开百度的首页,并在几秒之后关闭。

当然,我们还可以在driver.get之前提前设置一些其他参数(本例中的options参数设置仅适用于chromedriver):

-driver.implicitly_wait(second)设置driver在查找元素时,如果元素尚未被加载则等待second秒

-ChromeOptions类的设置:

options=webdriver.ChromeOptions()

options.add_argument("-headless") #使用无头模式(也就是无窗口运行)

options.add_argument('lang=zh_CN.UTF-8') #设置语言与编码

options.add_argument('user-agent="你要设定的UA"') #给driver设置UA,可以用来模拟手机端访问

dic={"profile.managed_default_content_settings.images": 2}

options.add_experimental_option("prefs",dic) #设置driver不加载图片

options.add_argument("--proxy-server="+"代理服务器地址:端口") #添加代理IP

#如果是需要带帐号密码验证的代理服务器 需要用chrome的插件解决(据说firefox的driver可以直接带参)

driver=webdriver.Chrome(DRIVERPATH,options=options)#一切设置完之后,只要在启动driver时带上options就可以了

selenium查找元素

假设你已经对html有所了解,我们就不介绍了。

driver.find_element_by_class_name("class_name") #根据类名查找元素

driver.find_element_by_id("id") #根据id查找元素

driver.find_element_by_tag_name("tagname") #根据标签名查找元素

driver.find_element_by_xpath("xpath") #根据xpath查找元素

driver.find_element_by_css_selector("css") #根据css属性定位查找元素(写过前端推荐用这个)

driver.find_element_by_link_text("link_name") #定位文本为link_name的超链接标签(全匹配)

driver.find_element_by_partial_link_text("part_link_name") #同上,但是是部分匹配

在函数名中的element后加上一个s,会返回所有符合条件的元素的列表。

另外,还有一种查找元素的方式如下(并不是完全的例子,其他By的属性请自行学习):

from selenium.webdriver.common.by import By

driver.find_element(By.ID,"#id")

driver.find_element(By.TAG_NAME,"tagname")

driver.find_element(By.CLASS_NAME,".class")

selenium模拟用户行为

执行JS

driver.execute_script("JSscript"[,seleniumElement...]) #定义

driver.execute_script("JSscript") #最基础的用法,只要把要执行的JS填进去就行了

driver.execute_script("JSscript_arguments[0]...",seleniumElement...) #进阶用法,省去使用JS选择元素的麻烦之处。传入一系列Ele并在JS中使用argument[n]表示

#在需要Element时,你可以用selenium选择元素,然后放在后面,在JS脚本里用argument[n]表示(n为你传入的元素序号)

模拟滚动条滚动

在selenium中我们通过执行js脚本来模拟滚动。

driver.execute_script("window.scrollTo(x,y)") #其x为向右滚动的像素数,y为向下滚动的像素数(两者为负则向反方向滚动)#确定距离的滚动

driver.execute_script("ele.scrollIntoView()") #滚动到ele元素出现在视窗内 #确定目标的滚动

模拟鼠标操作

模拟鼠标操作要用到selenium的ActionChains对象。设置完动作后如果想让其执行还要调用chains.perform()方法。(有些方法也能用WebElement调用,比如ele.click())

from selenium.webdriver.common.action_chains import ActionChains

chains=ActionChains(driver) #selenium用于处理动作的类

chains.click(ele) #点击此元素

chains.click_and_hold(ele) #按住鼠标左键

chains.content_click(ele) #点击鼠标右键

chains.double_click(ele) #双击鼠标

chains.drag_and_drop(from_ele,to_ele) #拖拽from_ele到to_ele

chains.drag_and_drop_by_offset(from_ele,xoffset,yoffset) #将from_ele拖拽到(xoffset,yoffset)

chains.move_by_offset(xoffset,yoffset) #移动鼠标到(xoffset,yoffset)

chains.move_to_element(ele) #移动鼠标到元素ele

chains.perform() #执行

模拟键盘操作

同上,Keys类的属性请自行寻找资料。

from selenium.webdriver.common.keys import Keys  

chains.send_keys(Keys.key) #发送key到当前元素,其为Keys的类属性

chains.send_keys("string_to_send") #发送字符串到当前元素 #注意转义

chains.send_keys_to_element(ele,Keys.key) #发送key到el

其他常用函数

ele.submit() #提交此元素

ele.text #此元素的文本

driver.close() #关闭此窗口

driver.quit() #退出驱动 记得调用,不然chrome会撑到让你电脑死机

ele.value_of_css_property("proName") #获取元素css属性proName的值

ele. get_attribute("attrName") #获取元素属性attrName的值

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python爬虫进阶(三):Selenium模拟浏览器操作 的相关文章

  • pip使用国内源安装软件包

    pip 使用国内源安装软件包 国内常用pip源如下 xff1a 阿里云 http mirrors aliyun com pypi simple 豆瓣 http pypi douban com simple 清华大学 https pypi t
  • 嵌入式Linux移植WIFI调试工具wpa_supplicant ,wpa_cli,wpa_passphrase解决方法 NUC972 ARM9

    前言 xff1a 作者在调试ARM9板上WIFI驱动时 xff0c 发现提供的wireless tools工具下的iwconfig xff0c iwlist等等无法胜任 xff0c 无法连接到WPA WPA2等加密网络 xff0c 这怎么办
  • 单模和多模光纤的区别是什么?

    光纤是一种由挤压的玻璃或塑料制成的柔韧的透明纤维 xff0c 略粗于人的头发 光纤是两端传输光最常用的一种手段 xff0c 并广泛地应用于光纤通信中 光纤有着比有线电缆更长的传输距离和更高的带宽 光纤通常由低折射率的透明纤芯和透明包层材料组
  • 微信扫码登录、支付项目总结

    一 前期准备 项目代码https gitee com lcaicai xdvideo git 微信网站应用扫码登录官方文档 xff1a https open weixin qq com cgi bin showdocument action
  • 编译boost开源库

    编译boost库 1 打开boost库官网 xff08 https www boost org xff09 点击下图中的Download按钮 xff0c 在弹出的页面选择Windows栏中其中一个版本 xff0c 然后指定本地PC保存位置
  • Linux - 阿里云:记录一次低配 ecs 服务器在 cpu、内存打满情况下无法远程连接的解决过程...

    背景 自我学习ing 然后在 1c2g 的云服务器上起了 5 个 mysql 集群节点 xff0c 然后输入命令就开始卡了 xff0c 开始怀疑是不是系统资源爆掉了 来到阿里云后台 因为服务器已经连不上了 xff0c 没办法通过 top 等
  • AirSim无人机仿真(Ubuntu18.04)

    安装过程 xff1a xff11 xff0e 先要安装Unreal Engine 需要在官网 xff08 https www unrealengine com xff09 注册账号 xff0c 并用github拉取代码 xff0c 最后在终
  • 简化代码和Kotlin的特性-Kotlin在Android中的使用(二)

    文章目录 一 使用Kotlin来简化findViewById代码二 Kotlin特性1 不需要 xff1b 结尾2 xff1a 的使用3 没有 new 关键字4 变量 xff0c 常量定义 xff0c 类型推断5 空指针安全6 函数定义7
  • Thunderbird 里面 QQ 企业邮箱 POP3/SMTP 设置

    端口自动检测 接收邮件服务器 xff1a pop exmail qq com 发送邮件服务器 xff1a smtp exmail qq com
  • 图像细节增强(直方图均衡化,对数变换,Gamma变换(校正))

    图像细节增强 xff08 直方图均衡化 xff0c 对数变换 xff0c Gamma变换 xff08 校正 xff09 xff09 文章目录 一 直方图均衡化1 定义2 原理3 方法步骤 二 对数变换1 原理 三 Gamma校正1 原理 前
  • ubuntu20.04搭建arm交叉编译环境

    1 下载arm交叉编译程序 源码下载地址 xff1a Downloads GNU A Downloads Arm Developer 要根据目标系统选择编译器版本 xff0c 我的主板 xff1a aarch64bit体系结构 xff08
  • 【python】《多媒体技术与应用》实验报告「数字视频处理」

    多媒体技术与应用 实验报告 实验名称 数字视频处理 实验时间 2022 4 25 姓名 班级 计非201 学号 成绩 实验目的1 理解并掌握数字视频的相关概念 xff1b 2 掌握并利用 Python 读取和观察视频数据 xff1b 3 掌
  • Python GUI开发之Tkinter:详解安装和使用方法

    Python GUI开发之Tkinter 详解安装和使用方法 Tkinter是Python中最常用的GUI图形库之一 它是Python自带的标准库 所以不需要额外安装 在Python的标准库中 Tkinter模块被用来创建桌面GUI应用程序
  • windows下ssh免密登录ubuntu

    一 先查看要登录的服务器是否安装ssh server服务 dpkg l grep ssh 若没有则需要安装 apt span class token operator span get install openssh span class
  • CentOS 7下安装MPICH3.2过程详解

    最近由于专业需要 xff0c 需要在CentOS 7平台下安装并行计算包MPICH 由于我才接触Linux xff0c 鸟哥的基础入门书也才看了四分之一不到 xff0c 所以安装也一步一步按照官方给的文档安装 官方安装方法 首先附上官网给出
  • 洛谷 P3366 【模板】最小生成树

    洛谷 P3366 模板 最小生成树 题目 给出一个无向图 xff0c 求出最小生成树 xff0c 如果该图不连通 xff0c 则输出orz 题目链接 模板 最小生成树 洛谷 输入 第一行包含两个整数N M xff0c 表示该图共有N个结点和
  • 2019 计蒜之道 复赛 D “星云系统”

    2019 计蒜之道 复赛 D 星云系统 题目 现在给定你一个字符串s以及一个整数k xff0c 请求出s的字典序最小的长度为k的子序列 题目链接https nanti jisuanke com t 39614 输入格式 第一行一个由小写英文
  • Linux mysql 配置

    一 数据库处室化密码 刚刚装好的数据库需要重置密码 alter user user identified by 39 12345678 39 如果是测试环境 或者自己玩的环境 设置密码过于简单 可以通过一下命令修改关于密码的校验 set g
  • 二进制安装Kubernetes(k8s) v1.26.0 IPv4/IPv6双栈

    二进制安装Kubernetes xff08 k8s xff09 v1 26 0 IPv4 IPv6双栈 https github com cby chen Kubernetes 开源不易 xff0c 帮忙点个star xff0c 谢谢了 介
  • ThinkPad E430 蓝牙驱动 BCM43142A0

    最近我意外发现公司的 ThinkPad E430 笔记本竟然是带有蓝牙的 D 查看蓝牙设备标识 ID 利用 lsusb 命令找到蓝牙模块信息 Bus 001 Device 004 ID 105b e065 Foxconn Internati

随机推荐

  • cephadm 安装部署 ceph 集群

    介绍 手册 xff1a https access redhat com documentation zh cn red hat ceph storage 5 html architecture guide index http docs c
  • PVE Cloud-INIT 模板配置

    PVE Cloud INIT 模板配置 Cloud init是什么 Cloud init是开源的云初始化程序 xff0c 能够对新创建弹性云服务器中指定的自定义信息 xff08 主机名 密钥和用户数据等 xff09 进行初始化配置 通过Cl
  • openstack 环境部署

    22 1 了解云计算 人类基于千年的物种衍变基础 xff0c 在这个世纪终于有了爆发式的科技成果 xff0c 尤其这二十年内互联网的发展 xff0c 更像是一种催化剂 xff0c 让原本已经热闹的地球更加的沸腾 xff0c 互联网经济泡沫破
  • C语言,计算圆的面积程序

    C语言 xff0c 计算圆的面积程序 span class token comment 计算圆的面积程序 日期 xff1a 2020 8 29 姓名 xff1a 张倩峰 span span class token macro propert
  • 博图软件搜索不到网卡

  • 台达伺服手动调试

  • 博途V15.1激活工具出错。

    博图V15 1激活 xff0c 软件出错 出现以下报错信息 解决方法 xff1a 下载新版本激活工具 再次激活
  • winCC正常运行,不显示画面。

    winCC正常运行 xff0c 不显示画面 解决方法 xff1a 需要重装系统 xff0c 重新安装博途
  • S7-1500PLC仿真

    S7 1500PLC仿真
  • 一些已安装产品需要许可证,请启动Automation License Manager

    更新系统版本号 完成更新 xff0c 再次安装即可解决该问题
  • ubuntu 硬盘管理工具

    就我目前所用的系统举例说明吧 xff0c 应该都大同小异的 有图形界面的 xff0c 也有命令行的 xff1a 首先是 ubuntu 系统自带的 Disk Utility 工具集 利用该工具可以对硬盘进行 Format Drive View
  • MCS-51单片机,定时1分钟,汇编程序

    MCS 51单片机 xff0c 定时1分钟 xff0c 汇编程序 去博客设置页面 xff0c 选择一款你喜欢的代码片高亮样式 xff0c 下面展示同样高亮的 代码片 span class token constant ORG span 00
  • c++枚举字符串转换工具

    为什么会需要这样一个枚举转字符串 xff0c 字符串转枚举的工具 xff1f 在太多的工程中 xff0c 我们可能都需要将一些枚举 整形标记打到日志中去 xff0c 如果只打印数组 xff0c 那也不行啊 xff0c 出问题翻看日志 xff
  • AD16在PCB布局的时候如何批量复制布局布线!!

    本人也是看了很多博主的帖子反反复复推敲 xff0c 最后发现有的博主没讲到关键部分所以在批量复制布局的时候总是事与愿违 话不多说请看招 xff01 第一步选中需要复制的布局 xff01 如图所示 第二步 复制选中布局的 offset Cha
  • Atcoder abc250 题解 (A~G)

    A Adjacent Squares xff08 枚举 xff09 枚举一下 xff0c 满足题意则ans 43 43 即可 cin span class token operator gt gt span h span class tok
  • 简单理解epoll

    epoll系列系统调用 epoll是Linux特有的I O复用函数 epoll使用一组函数来完成任务 epoll把用户关心的文件描述符上的事件放在内核里的一个事件表中 epoll需要使用一个额外的文件描述符 xff0c 来唯一标识内核中的事
  • glibc-2.23 puts源码分析

    在分析puts代码之前先看一些基本的知识 一些flag span class token macro property span class token directive hash span span class token direct
  • Sublime Text 搭建 C++ 环境

    一 下载MinGW文件 1 下载mingw get setup xff1a 网址 xff1a https sourceforge net projects mingw 由于这是境外网站 xff0c 请自行解决连接问题 xff08 下载的文件
  • PlayFair加密方法原理及C+ +实现

    普莱费尔密码 xff08 英文 xff1a Playfair cipher 或 Playfair square xff09 是一种使用一个关键词方格来加密字符对的加密法 xff0c 1854年由一位名叫查尔斯 惠斯通 xff08 Charl
  • Python爬虫进阶(三):Selenium模拟浏览器操作

    目录 关于Selenium 启动webdriver selenium查找元素 selenium模拟用户行为 执行JS 模拟滚动条滚动 模拟鼠标操作 模拟键盘操作 其他常用函数 这一节我们来讲解使用selenium来模拟浏览器操作进而方便快捷