selenium入门
Posted wheelcode
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了selenium入门相关的知识,希望对你有一定的参考价值。
Selenium入门
本篇主要介绍了selenium常用的元素选择以及对应的元素操作句柄,同时介绍了一些如键盘操作、选择框、页面操作,键盘输入等常用方法。
另介绍了CSS Selector的基本语法
selenium元素选择
id选择
from selenuium import webdriver
wd = webdriver.Firefox(executable_path=r‘xxx‘)
wd.get(‘http://www.baidu.com‘)
id_element = wd.find_element_by_id(‘kw‘)
id_element.send_keys(‘selenium‘)
使用了 WebDriver 对象 的方法 find_element_by_id,
这行代码运行是,就会发起一个请求通过 浏览器驱动 转发给浏览器,告诉它,需要选择一个id为 kw 的元素。
浏览器,找到id为kw的元素后,将结果通过 浏览器驱动 返回给 自动化程序, 所以 find_element_by_id 方法会 返回一个 WebElement 类型的对象。
class选择
from selenium import webdriver
wd = webdriver.Firefox(executable_path=r‘xxx‘)
wd.get(‘http://cdn1.python3.vip/files/selenium/sample1.html‘)
# 根据 class name 选择元素,返回的是 一个列表
# 里面 都是class 属性值为 animal的元素对应的 WebElement对象
elements = wd.find_elements_by_class_name(‘animal‘)
for element in elements:
print(element.text)
元素也可以有 多个class类型 ,多个class类型的值之间用 空格 隔开,比如
<span class="chinese student">张三</span>
注意,这里 span元素 有两个class属性,分别 是 chinese 和 student, 而不是一个 名为 chinese student 的属性。我们要用代码选择这个元素,可以指定任意一个class 属性值,都可以选择到这个元素,如下element = wd.find_elements_by_class_name(‘chinese‘)
或者element = wd.find_elements_by_class_name(‘student‘)
而不能这样写element = wd.find_elements_by_class_name(‘chinese student‘)
tag_name选择
基本用法与class_name大致相同
WebElement对象选择元素
from selenium import webdriver
wd = webdriver.Firefox(executable_path=r‘xx‘)
wd.get(‘http://cdn1.python3.vip/files/selenium/sample1.html‘)
element = wd.find_element_by_id(‘container‘)
# 限制 选择元素的范围是 id 为 container 元素的内部。
spans = element.find_elements_by_tag_name(‘span‘)
for span in spans:
print(span.text)
Selenium周期性寻找元素
Selenium 的 Webdriver 对象 有个方法叫 implicitly_wait
该方法接受一个参数, 用来指定 最大等待时长。
如果我们 加入如下代码wd.implicitly_wait(10)
那么后续所有的 find_element
或者 find_elements
之类的方法调用 都会采用上面的策略:
如果找不到元素, 每隔 半秒钟 再去界面上查看一次, 直到找到该元素, 或者 过了10秒 最大时长。
selenium操作
element元素操作
# 清除输入框已有的字符串
element.clear()
# 输入新字符串
element.send_keys(‘xxx‘)
# 获取元素属性值
element = wd.find_element_by_id(‘input‘)
print(element.get_attribute(‘class‘))
# 获取输入框里的文字
print(element.get_attribute(‘value‘))
# 获取元素标签中的文本
print(element.get_attribute(‘innerText‘))
print(elemnet.get_attribute(‘textContent‘))
# 获取整个html文本
print(element.get_attribute(‘outerHTML‘))
# 获取元素内部的HTML
print(element.get_attribute(‘innerHTML‘)
keyboard键盘操作
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
driver = webdriver.Firefox(executable_path=r‘xx‘)
driver.get(‘http://www.baidu.com‘)
element = driver.find_element(By.ID,‘kw‘)
element.send_keys(‘selenium‘)
element.send_keys(Keys.BACK_SPACE)
element.send_keys(Keys.SPACE)
element.send_keys(Keys.ENTER)
键值 | 解释 |
---|---|
send_keys(Keys.BACK_SPACE) | 删除键BackSpace |
send_keys(Keys.SPACE) | 空格键Space |
send_keys(Keys.TAB) | 制表键Tab |
send_keys(Keys.ESPACE) | 回退键Esc |
send_keys(Keys.ENTER) | 回车键Enter |
send_keys(Keys.CONTROL,‘a’) | 全选Ctrl+A |
send_keys(Keys.CONTROL,‘c’) | 复制CTRL+C |
send_keys(Keys.CONTROL,‘x’) | 剪切CTRL+X |
send_keys(Keys.CONTROL,‘v’) | 粘贴Ctrl+V |
send_keys(Keys.F1) | 键盘F1 |
send_keys(Keys.F12) | 键盘F12 |
selenium页面操作
# 最小化窗口
driver.minimize_window()
# 最大化窗口
driver.maximize_window()
# 设置窗口尺寸
driver.set_window_size(1920,1080)
# 获取窗口位置
driver.get_window_position() #driver.get_window_position()[‘x‘] or [‘y‘]
# 获取窗口尺寸
driver.get_window_size() #driver.get_window_size()[‘width‘] or [‘height‘]
# 获取浏览器名
driver.name
# 获取网页源码
driver.page_source()
# 前进
driver.forward()
# 后退
driver.back()
# 刷新
driver.refresh()
# 设置编码
driver.page_source.encode(‘utf-8‘)
selenium 选择框
-
radio框,直接选择元素click即可
-
checkbox:可以先遍历多选框取消选中状态,再直接选择元素单击
-
select下拉框
from selenium.webdriver.support.select import Select select = Select(wd.find_element_by_id("ss_single")) select.select_by_value(‘xxx‘)
code descritption select_by_value value值选择 select_by_index 索引值选择 select_by_visible_text 可视化文本选择 deselect_by_value/index 删除选中元素 deselect_all 去除所有选中元素
selenium frame及窗口切换
wd.switch_to.frame(frame_reference)
wd.switch_to.default_content()
其中, frame_reference 可以是 frame 元素的属性 name 或者 ID 。
wd.find_element_by_tag_name(‘a‘).click()
mainWindow = wd.current_window_handle
# 必须等待页面加载完成
time.sleep(3)
handles = wd.window_handles
# 返回句柄列表
wd.switch_to.window(handles[1])
print(wd.title)
wd.switch_to_window(mainWindow)
Selenium其他操作
selenium处理弹出框
WEB端共有三种弹出框Alert、confirm、prompt
driver.switch_to.alert.accept() #弹出框确定
driver.switch_to.alert.text #弹出框的文本内容
driver.switch_to.alert.dismiss() #弹出框取消
# Prompt 弹出框提交内容
driver.switch_to.alert.send_keys(‘xxx‘)
driver.switch_to.alert.accept()
# 同理dismiss()为取消
CSS Selector
CSS基本元素与属性选择
code | description |
---|---|
.animal | class selector |
#id | id selector |
element1>element2 | 直接子元素 |
element1 element2 | 后代元素 |
a[href*=‘xxx‘] | a节点href属性包含xxx |
a[href^=‘http‘] | a节点href属性以http开头 |
a[href$=‘.com‘] | a节点href属性以.com结尾 |
div[class=misc][ctype=gun] | 一元素多属性 |
ep:
<div id=‘bottom‘>
<div class=‘footer1‘>
<span class=‘copyright‘>版权</span>
<span class=‘date‘>发布日期:2018-03-03</span>
</div>
<div class=‘footer2‘>
<span>备案号
<a href="http://www.miitbeian.gov.cn">苏ICP备88885574号</a>
</span>
</div>
</div>
选择版权: div.footer1 > span.copyright
or .footer1>.copyright
or .footer .copyright
CSS 组选择
code | description |
---|---|
.plant,.animal | 同时选择两种class |
#t1>span , #t1>p | t1里所有span和p |
span:nth-child(2) | 父元素中第二个子元素,且为span |
p:nth-last-child(1) | 倒数第一个,且为p元素 |
span:nth-of-type(1) | 第一个span元素 |
p:nth-last-of-type(2) | 倒数第二个为p元素的节点 |
p:nth-child(even) | 偶数节点,且为p元素 |
p:nth-child(odd) | 奇数节点,且为p元素 |
code | description |
---|---|
h3+span | 兄弟节点 |
h3~span | h3后的所有兄弟节点span |
以上是关于selenium入门的主要内容,如果未能解决你的问题,请参考以下文章
Selenium JavascriptExecutor 详解
2018年《selenium+python3.6课程》3月31号开学- 零基础入门包教会