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入门的主要内容,如果未能解决你的问题,请参考以下文章

推荐net开发cad入门阅读代码片段

Selenium | 基础入门 | 截屏并保存于本地

Selenium JavascriptExecutor 详解

2018年《selenium+python3.6课程》3月31号开学- 零基础入门包教会

Selenium JavascriptExecutor 详解

有没有办法关闭代码片段中的命名建议?