Python—selenium模块(浏览器自动化工具)
2024-08-31 23:11:45
selenium可以用来完成浏览器自动化相关的操作,写一些代码制定一些基于浏览器自动化的相关操作(行为动作),当代码执行后,浏览器就会自动触发相关的事件
安装方法:
- pip install selenium
- 下载对应浏览器的驱动程序
- 谷歌浏览器驱动下载地址:
https://chromedriver.storage.googleapis.com/index.html
- 根据浏览器版本选择对应的驱动版本(网上查)
代码流程:
- 导入模块:from selenium import webdriver
- 实例化一个浏览器对象:webdriver.Chrome(executable_path='./chromedriver.exe') ,参数为浏览器驱动路径;
- 写上要访问的网址:bro.get("https://xueqiu.com/")
浏览器相关操作:
执行js实现滚轮向下
移动到页面最底部(如果是动态加载的数据及第一次加载完成的地方):
js = "window.scrollTo(0,document.body.scrollHeight)"
定位标签,向标签里写参数
tag_input = bro.find_element_by_id('kw')
tag_input.send_keys('人民币')
截屏
bro.save_screenshot('1.png')
获取页面数据
获取动态加载的数据:bro.page_source
基于xpath获取标签:a_tag = bro.find_element_by_xpath("xpath表达式")
点击事件:a_tag.click() 单击鼠标左键一下
网页的前进和后退
bro.back() 后退
bro.forward() 前进
网页前进后退代码
谷歌无头浏览器
如不想感知到浏览器操作,可让浏览器在后台操作
#谷歌无头浏览器
from selenium import webdriver
from time import sleep
from selenium.webdriver.chrome.options import Options
# 创建一个参数对象,用来控制chrome以无界面模式打开
chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu') bro = webdriver.Chrome(executable_path='./chromedriver.exe',options=chrome_options)
bro.get('https://www.baidu.com')
sleep(2)
bro.save_screenshot('1.png')
#标签定位
tag_input = bro.find_element_by_id('kw')
tag_input.send_keys('人民币')
sleep(2) btn = bro.find_element_by_id('su')
btn.click()
sleep(2) print(bro.page_source)
bro.quit()
谷歌无头浏览器代码
动作链
如果定位的标签存在于iframe标签之中,则必须经过switch_to操作在进行标签定位
#动作链
from selenium import webdriver
from time import sleep
from selenium.webdriver import ChromeOptions
from selenium.webdriver import ActionChains option = ChromeOptions()
option.add_experimental_option('excludeSwitches', ['enable-automation']) bro = webdriver.Chrome(executable_path='./chromedriver.exe',options=option)
url = 'https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable'
bro.get(url=url)
#如果定位的标签存在于iframe标签之中,则必须经过switch_to操作在进行标签定位
bro.switch_to.frame('iframeResult')
source_tag = bro.find_element_by_id('draggable')
taget_tag = bro.find_element_by_id('droppable')
#创建一个动作连的对象
action = ActionChains(bro)
action.drag_and_drop(source_tag,taget_tag)
action.perform()
sleep(3)
# bro.quit()
动作链代码展示
最新文章
- CodeForces - 261B Maxim and Restaurant
- JQuery中$.each 和$(selector).each()的区别详解
- 微信开发之移动手机WEB页面(HTML5)Javascript实现一键拨号及短信发送功能
- yii学习笔记
- localStorage兼容ie6/7 用addBehavior 实现
- suse linux修改hostname
- windows API 实现截图
- python smtplib.SMTPDataError: (554
- 济南清北学堂游记 Day 7.
- C语言文件 "w+"与"wb+"区别
- Asp.Net 将HTML中通过dom-to-image.js标签div内的内容转化为图片保存到本地
- C#中使用JavaScriptSerializer类实现序列化与反序列化
- Sublime Text3 调色板 ColorPicker插件安装及快捷键
- robotframework添加自定义的API,在Lib\site-packages路径下放入写好的py文件。
- html5的理解
- capwap学习笔记——初识capwap(三)
- Variational Approximate Inference
- .Net在线编辑器:KindEditor及CkEditor+CkFinder配置说明
- bind9配置转发服务
- 去除Xcode6创建工程时自带的storyboard
热门文章
- 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_1-4.在线教育后台数据库设计
- vue组件命名和传值 and 父子组件传值
- ssm整合用到的依赖jar包(不充足)
- 改进后的socket轮子,欢迎挑战
- Vue 子组件与子组件之间传值
- CentOS8 使用 aliyun 阿里云 镜像站点的方法
- linux下正确卸载rpm包
- SpreadJS V13.0发布,聚焦表单设计与数据交互,让您的工作效率突飞猛进!
- The import javax.websocket cannot be resolved的解决问题
- VC++2017关于项目出现";const char *"; 类型的实参与 ";char *"; 类型的形参不兼容错误的解决方法