Selenium使用方法整理
我采用的是Python来使用selenium库,同时java也可以使用,但不如python操作起来方便。下文都会以python的操作为例子,整理我学习selenium过程中收集到的方法。
一:安装
首先python先要安装selenium:
pip install Selenium
第二步,下载对应的浏览器驱动,我这里用chrome(推荐),对应的驱动下载地址:http://chromedriver.storage.googleapis.com/index.html
驱动版本要与chrome版本对应,但是建议直接用最新版的chrome,然后驱动也下载目前最新的就可以了。然后把下载下来的chromedriver.exe文件放到环境变量的路径下,确保python能正确调用到。
二:基础用法
导入:
from selenium import webdriver
1.获取driver对象
driver = webdriver.Chrome()
如果要设置参数,则要创建一个option对象并作为参数传入构造函数中:
chromeOptions = webdriver.ChromeOptions() chromeOptions.add_argument('disable-infobars') #取消浏览器打开时显示的正在监控提示 chromeOptions.add_argument('--user-agent=Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0') #添加User-Agent chromeOptions.add_argument("--proxy-server=http://127.0.0.1") #添加代理chromeOptions.add_argument('--headless') #浏览器后台运行模式 driver = webdriver.Chrome(options=chromeOptions)
2.基本操作
driver.maximize_window() #浏览器最大化 (默认是小窗口) driver.minimize_window() #浏览器最小化 driver.set_page_load_timeout(20) #超时时间,如果设置了,超过时间会自动停止 driver.get("http://www.baidu.com") #访问网站 driver.refresh() #刷新网站 js='window.open("https://www.baidu.com");' #通过执行js,开启一个新的窗口 driver.execute_script(js) driver.switch_to.window(driver.window_handles[1])#切换浏览器中的窗口,window_handles返回当前窗口集合,这里代表切换到第二个窗口,如果不存在第二个窗口,会报错 driver.getTitle() #获取当前窗口标题名driver.current_window_handle #获得当前窗口对象driver.current_url #当前urldriver.page_source #当前页面源代码 driver.close() #关闭当前窗口 driver.quit() #关闭整个浏览器
三.查找元素
基础查找
driver.get("https://www.baidu.com") kw = find_element_by_id("kw") #通过id查找html元素, 对应百度搜索框 su = driver.find_element_by_id("su") #点击搜索按钮 kw.send_keys("搜索一下") #元素可以使用该方法自动填充输入框的内容 su.click() #元素可以使用该方法点击自身 #其他查找方法 find_element_by_name() #通过name属性查找html元素 find_element_by_class_name() #通过class属性中存在的值查找html元素 find_element_by_tag_name() #通过查找标签找到元素,如传入"p", "input"等,不推荐使用 #还有其他很多方法,以上均返回单个元素,element加上s则为返回多个符合条件的元素 find_elements_by_name()
进阶查找
一. xpath查找:
xpath是XML路径语言,它可以用来确定xml文档中的元素位置,通过元素的路径来完成对元素的查找。HTML就是XML的一种实现方式,所以xpath是一种非常强大的定位方式。
1.1 Xpath的绝对路径定位:
利用html标签名的层级关系来定位元素的绝对路径,下标数字可以在多个同样标签中选择,一般从<html>标签开始依次往下进行查找。如:
find_element_by_xpath("/html/body/div[1]/form/span[1]/input")
1.2 Xpath利用元素属性与值定位
find_element_by_xpath("//input[@id='kw']") find_element_by_xpath("//*[@name='wd']")
1.3 混合定位
find_element_by_xpath("//form[@id='form']/span/input")
二. CSS选择器
driver.find_element_by_css_selector(".btn") driver.find_element_by_css_selector("#su")
通过属性或组合方式:
driver.find_element_by_css_selector("input[name='kw']").send_keys("Python") driver.find_element_by_css_selector("span.bg.btn_default>input#su").click()
四. 鼠标键盘操作
selenium提供了ActionChains类来处理鼠标、键盘事件,如鼠标移动,点击,拖拽,键盘按下抬起等。需要导入如下
from selenium.webdriver.common.action_chains import ActionChains
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) ——拖拽到某个元素然后松开 drag_and_drop_by_offset(source, xoffset, yoffset) ——拖拽到某个坐标然后松开 key_down(value, element=None) ——按下某个键盘上的键 key_up(value, element=None) ——松开某个键 move_by_offset(xoffset, yoffset) ——鼠标从当前位置移动到某个坐标 move_to_element(to_element) ——鼠标移动到某个元素 move_to_element_with_offset(to_element, xoffset, yoffset) ——移动到距某个元素(左上角坐标)多少距离的位置 perform() ——执行链中的所有动作 release(on_element=None) ——在某个元素位置松开鼠标左键 send_keys(*keys_to_send) ——发送某个键到当前焦点的元素 send_keys_to_element(element, *keys_to_send) ——发送某个键到指定元素
- 链式写法:
su = find_element_by_id("su") ActionChains(driver).move_to_element(su).click(su).perform()
- 分步写法
su = find_element_by_id("su") actions = ActionChains(driver) actions.move_to_element(su) actions.click(su) actions.perform()
控制键盘示例:
ActionChains(driver).key_down(Keys.CONTROL, enter).key_up(Keys.CONTROL).perform() #按下Ctrl键然后松开
执行JS:
driver.execute_script("window.scrollTo(0,100)") driver.execute_script("document.getElementById(\"kw\").value=\"selenium\"")
五. 其他
禁用图片及JS加载:
from selenium import webdriver options = webdriver.ChromeOptions() prefs = { 'profile.default_content_setting_values': { 'images': 2, 'javascript': 2, } } #2是禁用, 1是允许 options.add_experimental_option('prefs', prefs) driver = webdriver.Chrome(chrome_options=options)
隐藏window.navigator.webdriver
特征参数 (有时候能反爬)
from selenium.webdriver import Chrome from selenium.webdriver import ChromeOptions option = ChromeOptions() option.add_experimental_option('excludeSwitches', ['enable-automation']) driver = Chrome(options=option)
Selenium使用方法整理的更多相关文章
- 【AS3】Flash与后台数据交换四种方法整理
随着Flash Player 9的普及,AS3编程也越来越多了,所以这次重新整理AS3下几种与后台数据交换方法.1.URLLoader(URLStream)2.FlashRemoting3.XMLSo ...
- 常用js方法整理common.js
项目中常用js方法整理成了common.js var h = {}; h.get = function (url, data, ok, error) { $.ajax({ url: url, data ...
- 在WebBrowser中执行javascript脚本的几种方法整理(execScript/InvokeScript/NavigateScript) 附完整源码
[实例简介] 涵盖了几种常用的 webBrowser执行javascript的方法,详见示例截图以及代码 [实例截图] [核心代码] execScript方式: 1 2 3 4 5 6 7 8 9 1 ...
- 项目中常用js方法整理common.js
抽空把项目中常用js方法整理成了common.js,都是网上搜集而来的,大家一起分享吧. var h = {}; h.get = function (url, data, ok, error) { $ ...
- Ruby数组方法整理
数组方法整理 方法列表: all().any().none()和one():测试数组中的所有或部分元素是否满足给定条件.条件可以是语句块中决定,也可以是参数决定 append():等价于push() ...
- Vue2.x源码学习笔记-Vue实例的属性和方法整理
还是先从浏览器直观的感受下实例属性和方法. 实例属性: 对应解释如下: vm._uid // 自增的id vm._isVue // 标示是vue对象,避免被observe vm._renderProx ...
- Tomcat 多项目部署方法整理
Tomcat 多项目部署方法整理 说明:tomcat-deploy-aaa和tomcat-deploy-bbb是两个不同的web项目,为了方便以下简称aaa和bbb,请先自行创建并跑通 导航: NO1 ...
- python+selenium安装方法
一.准备工具: 下载 python[python 开发环境] http://python.org/getit/ 下载 setuptools [python 的基础包工具] http://pypi.py ...
- Javascript Array 方法整理
Javascript Array 方法整理 Javascript 数组相关方法 说明 大多数其它编程语言不允许改变数组大小,越界访问索引会报错,但是 javascript不会报错,不过不建议直接修改a ...
随机推荐
- ArcGIS API For Javascript:新增热力图层的方法
当我们要制作一个热力图层,可以通过以下 3 步来实现: 引入类 在 require 中需引入 "esri/layers/FeatureLayer", "esri/rend ...
- django_3:url配置
浏览器url访问——url.py中正则匹配——转向对应的视图处理方法——在view.py中找到方法执行——在方法中一般会用到render渲染到.html文件——再用到.html url使用方式: 正则 ...
- 【故障公告】docker swarm 集群问题造成新版博客后台故障
非常抱歉,今天下午 16:55~17:05 左右,由于 docker swarm 集群的突发不稳定问题造成新版博客后台(目前处于灰度发布阶段)无法正常使用,由此给您带来麻烦,请您谅解. 出故障期时,新 ...
- 万恶之源-python的部分内容
1.字符串格式化输出 %占位符: 声明占位的类型%s--字符串 %d%i--整型 %%转义 成为普通的% %s ,%d, %% msg = '%s,学习进度5%%' print(msg%(in ...
- STDN: Scale-Transferrable Object Detection论文总结
概述 STDN是收录于CVPR 2018的一篇目标检测论文,提出STDN网络用于提升多尺度目标的检测效果.要点包括:(1)使用DenseNet-169作为基础网络提取特征:(2)提出Scale-tra ...
- Java快速教程步伐
Java基础在Java基础系列文章中,我将说明Java的基础内容,特别是面向对象的相关概念. Java基础01 从HelloWorld到面向对象 Java基础02 方法与数据成员 Java基础03 构 ...
- 【前端】之jQuery基础知识
jQuery 简介 在项目中引入jQuery: 去jQuery官网下载jQuery包:jquery-3.2.1.min.js 将下载的jQuery包添加到项目目录中 在标签下添加jQuery引用:&l ...
- react修改端口
react修改端口 在react官网根据文档安装好项目之后,发现新项目没有了scripst文件夹 之前版本是在scripts文件夹中的starts.js中修改 新版本修改port发现移入到了依赖里面 ...
- OSI-传输层
OSI-传输层 端口号(2字节 SYN(1bit) ACK(1bit) 会话多路复用(为什么一个IP地址可以做很多事情?) 源端口地址可以不同 五元组(世界上没有相同的2个五元组) 源IP地址-目的I ...
- OC中内存管理(转)
OC内存管理 一.基本原理 (一)为什么要进行内存管理. 由于移动设备的内存极其有限,所以每个APP所占的内存也是有限制的,当app所占用的内存较多时,系统就会发出内存警告,这时需要回收一些不需要再继 ...