千家信息网

Selenium2相关知识最全总结

发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,1. 定位元素的几种方法find_element_by_id(优先,常用),对应的是id属性find_element_by_name(优先,常用),对应的是name属性find_element_by_
千家信息网最后更新 2025年02月02日Selenium2相关知识最全总结

1. 定位元素的几种方法

find_element_by_id(优先,常用),对应的是id属性

find_element_by_name(优先,常用),对应的是name属性

find_element_by_class_name,对应的是class属性的值

find_element_by_tag_name,对应的是标签名称,如input,p,span,title,body....

find_element_by_link_text,对应的是超链接的文本内容

find_element_by_partial_link_text,对应的是部分超链接的文本内容

find_element_by_xpath,对应的是元素的path,可通过firebug工具获得

find_element_by_css_selector,通过css属性定位,class用. id用#,

示例:

driver.find_element_by_css_selector(".s_ipt").send_keys("selenium")

driver.find_element_by_css_selector("#su").click()


2.By定位

find_element(By.ID,"kw")

find_element(By.NAME,"wd")

find_element(By.CLASS_NAME,"s_ipt")

find_element(By.TAG_NAME,"input")

find_element(By.LINK_TEXT,u"新闻")

find_element(By.PARTIAL_LINK_TEXT,u"新")

find_element(By.XPATH,"//*[@class='bg s_btn']")

find_element(By.CSS_SELECTOR,"span.bg s_btn_wr>input#su")


3.几种浏览器操作

说明:操作浏览器需要将浏览器插件目录放入环境变量中,不然找不到

from selenium import webdriver

driver = webdriver.Ie() --IE浏览器,插件名为 IEDriverServer.exe

driver = webdriver.Firefox() -- 火狐浏览器,插件名为 geckodriver.exe

driver = webdriver.Chrome() -- 谷歌浏览器,插件名为 chromedriver.exe

driver = webdriver.Edge() --Edge浏览器(windows10系统自带), 无需插件

操作360浏览器:

360浏览器内核基于chrome浏览器,因此插件用的也是chromedriver.exe,不过得配置下

chrome_options = webdriver.ChromeOptions()

chrome_options.binary_location = r"C:\Users\kevin\AppData\Roaming\360se6\Application\360se.exe" #这里是360安全浏览器的路径

chrome_options.add_argument(r'--lang=zh-CN') # 这里添加一些启动的参数

d = webdriver.Chrome(chrome_options=chrome_options)

4.控制浏览器

设置宽高:driver.set_window_size(400,500), ------设置宽400,高500

设置全屏:driver.maximize_windows()

前进:driver.forward()

后退: driver.back()

刷新当前页面:driver.refresh()

5.定位到的元素操作

driver.find_element_by_xx('xx').click() --点击操作

driver.find_element_by_xx('xx').clear() --清除操作,清除文本框中的内容

driver.find_element_by_xx('xx').send_keys('123') --输入数据到文本框

driver.find_element_by_xx('xx').submit() --提交操作,相当于回车,如在搜索框中输入内容后,执行此方法,可直接执行搜索动作

driver.find_element_by_xx('xx').size() --获取元素的尺寸

driver.find_element_by_xx('xx').text --获取元素的文本

driver.find_element_by_xx('xx').get_attribute('id') --获取id属性,只要是属性都可通过此方法获取,如name,id,type,class.

driver.find_element_by_xx('xx').is_displayed() --获取元素是否可见,可见返回True,否则False

6.鼠标事件

Actions类中提供了鼠标操作的常用方法

perform() --执行所有Actions类中存储的行为

context_click() --右击

double_click() --双击

drap_and_drop() --拖动

move_to_element --悬停


调用示例:

context_click()

from selenium.webdriver.common.action_chains ActionChainsdriver = webdriver.Ie()right_click = driver.find_element_by_id()ActionChains(driver).context_click(right_click).perform()

其他的方法调用同上,只是改下方法而已


7.键盘操作

模拟组合键 CTRL+A,CTRL+C等等

from selenium.webdriver.common.keys import Keys

退格键 Keys.BACK_SPACE --- driver.find_elemennt_by_id('').send_keys(Keys.BACK_SPACE)

空格键Keys.SPACE --- driver.find_elemennt_by_id('').send_keys(Keys.SPACE)

输入CTRL+A --- driver.find_elemennt_by_id('').send_keys(Keys.CONTROL,'a')

回车键 --- driver.find_elemennt_by_id('').send_keys(Keys.ENTER)


8.设置元素等待

显式等待:

一直检测并等待某个元素出现或消失,达到最大时长条件还未成立则抛出超时异常

from selenium import webdriver

from selenium.webdriver.support.ui import WebDriverWait

from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Ie()
driver.get("https://www.baidu.com")

element = WebDriverWait(driver,5,0.5).until(

EC.presence_of_ element_located((By.id,"kw"))

)

element.send_keys('hello')

5:表示最长等待时间

0.5:检测间隔时间,也就是隔多长时间检测一次,单位秒

until:直到括号中条件成立,也存在until not

隐式等待:

driver.implicitly_wait(10),单位为秒,不设置默认为0,一般写在用例开头,针对整条用例有效,在定位一个元素时,如果元素未加载出来,则定位不到。此方 法会在设定时间内一直检测,检测到了就向下进行,否则就抛出超时异常

sleep休眠:

强制等待一段时间

import time

time.sleep(10)


9.定位一组元素

find_elements_by_xx,同定位单个元素一样,不过element是elements

示例:勾选全部checkbox

checkboxs = driver.find_elements_by_tag_name("input")

for checkbox in checkboxs:

if checkbox.get_attribute("type") == "checkbox":

checkbox.click()


10.操作下拉选择框

方法:

选择:

select_by_index() --通过索引

select_by_value() --通过value值

select_by_visiable_text() --通过显示的文本

反选:

deselect_by_index() --通过索引

deselect_by_value() --通过value值

deselect_by_visiable_text() --通过显示的文本

deselect_all() --取消选择所有

示例:

选择示例:

select_by_index(1) --通过索引

select_by_value('o2' ) --通过value值

select_by_visiable_text('显示文本2') --通过显示的文本

完整示例:

from selenium.webdriver.support.ui import Select

select = Select(driver.find_element_by_id("sid"))

select.select_by_index(1)

11. 多表单切换

许多页面存在表单嵌套情况,从一个表单是无法直接定位到其他表单中元素的,需要进行表单切换

f = driver.find_element_by_id("fr") --定位到id为fr的表单,定位方法通用

driver.switch_to.frame(f) ---切换到id为fr的表单中

操作完成后跳到最外层表单: driver.switch_to.default_content()

12.多窗口切换

获取当前窗口的handle: current_handle = driver.current_window_handle

获取所有窗口handle: handles = driver.window_handles

切换到其他窗口

for hand in handles:

if hand != current_handle:

driver.swith_to.window(hand) --切换窗口

13.弹窗处理

针对alert,prompt,confirm出现的弹窗,可使用driver.switch_to_alert()进行捕获并处理

方法:

text --返回弹窗的文本信息

accept(), --接受弹窗,也就是点击确定

dismiss() --取消弹窗

调用示例:

driver.switch_to_alert().accept() --点击确定

14.上传文件

方法一:直接通过send_keys()方法输入文件路径到文本框中,点击提交按钮

方法二:通过AutoIt工具,将操作过程打包成exe文件,然后通过python进行调用

15.操作cookie

获取所有cookie: driver.get_cookies()

获取名为xx的cookie: driver.get_cookie('xx')

添加cookie: driver.add_cookie(dict) -- 参数为字典对象

删除所有cookie: driver.delete_all_cookies()

16.调用JavaScript

js = "window.scrollTo(100,450);"

driver.execute_script(js)

17.处理HTM5视频播放

示例:

video = driver.find_element_by_xpath("body/Section[1]/div/video")

driver.execute_script("return arguments[0].play()",video) --播放

driver.execute_script("return arguments[0].pause()",video) --暂停


18.窗口截图


driver.get_screenshot_as_file("D:\xxx\xx.png")


19.关闭窗口


driver.close() ---关闭当前窗口

driver.quit() ---关闭所有窗口


20.验证码处理

1.去掉验证码

2.设置万能验证码

3.使用cookie

4.验证码识别

5.验证码存放在cookie中


21.操作已经打开的浏览器,下面以chrome为例

1.手动启动浏览器,以debug模式启动

C:\Program Files (x86)>chrome.exe --remote-debugging-port=9222

2.添加selenium配置

options = webdriver.ChromeOptions()

options.debugger_address(options)

driver = webdriver.Chrome(options)

剩下的按照之前正常操作就可以了




遇到的问题及解决方法:

1.报如下错误

selenium.common.exceptions.WebDriverException: Message: unknown error: call function result missing 'value'

(Session info: chrome=75.0.3770.142)

(Driver info: chromedriver=2.33.506120 (e3e53437346286c0bc2d2dc9aa4915ba81d9023f),platform=Windows NT 10.0.17134 x86_64)

解决方案:

这是由于chromedriver和chrome浏览器版本不匹配导致的,匹配信息如下:

chromedriver版本支持的Chrome版本
v2.41v67-69
v2.40v66-68
v2.39v66-68
v2.38v65-67
v2.37v64-66
v2.36v63-65
v2.35v62-64
v2.34v61-63
v2.33v60-62
v2.32v59-61
v2.31v58-60
v2.30v58-60
v2.29v56-58
v2.28v55-57
v2.27v54-56
v2.26v53-55
v2.25v53-55
v2.24v52-54
v2.23v51-53
v2.22v49-52
v2.21v46-50
v2.20v43-48
v2.19v43-47
v2.18v43-46
v2.17v42-43
v2.13v42-45
v2.15v40-43
v2.14v39-42
v2.13v38-41
v2.12v36-40
v2.11v36-40
v2.10v33-36
v2.9v31-34
v2.8v30-33
v2.7v30-33
v2.6v29-32
v2.5v29-32
v2.4v29-32

下载地址:http://npm.taobao.org/mirrors/chromedriver/

http://chromedriver.storage.googleapis.com/index.html

如果chrome版本太高,建议使用IE浏览器代替

0