selenium的使用

本文详细介绍了如何使用Selenium进行网页元素定位,包括id、name、class_name、tag_name、link_text、XPath和CSS选择器,以及元素操作、鼠标键盘模拟、等待、下拉选择框和警告框处理等内容。
摘要由CSDN通过智能技术生成

selenium的使用

from selenium import webdriver
from time import sleep
import os

一、webdriver 元素定位

get()直接访问某个网址(传参输入网址)
back() 返回上一个页面
forward()进入下一个页面
close()关闭当前标签页
quit()关闭浏览器
url = os.getcwd() + os.sep + '注册A.html'

driver = webdriver.Chrome()
driver.get(url)

# id
userA = driver.find_element_by_id("userA")
userA.send_keys("123")
# name
driver.find_element_by_name("passwordA").send_keys("123456")
# class_name
driver.find_element_by_class_name("telA")
# tag_name
driver.find_element_by_tag_name("input").send_keys("123456")
# link_text
driver.find_element_by_link_text("访问 新浪 网站").click()
# 返回上一页
driver.back()
# partial.link_text
driver.find_element_by_partial_link_text("网站").click()

"""
    以上每一个方法都可以在element元素后面加上s,返回一个数组,可以用数组下标进行选择元素
    tem = driver.find_elements_by_tag_name("input")
    for i in range(16):
        print(tem[i].get_attribute("id"))
"""

driver.back()

二、Xpath、CSS定位

find_element_by_xpath
绝对路径:/html/body/div/p[2]
相对路径://input[@id='userA']
# 使用绝对路径
driver.find_element_by_xpath("/html/body/form/div/fieldset/p[3]/input").send_keys("123")
# 使用相对路径
driver.find_element_by_xpath("//div[@id='zc']/fieldset/p[3]/input").send_keys("123")

# css定位 (也有elements,可以返回数组)
driver.find_element_by_css_selector('input')
driver.find_element_by_css_selector('#userA')
driver.find_element_by_css_selector('.telA')
driver.find_element_by_css_selector("input[type^='p']")
补充知识,通过By查找元素
导包:from selenium.webdriver.common.by import By
from selenium.webdriver.common.by import By
driver.find_element(By.CSS_SELECTOR, "#userA").send_keys("liuyaohui")
driver.find_element(By.ID, "passwordA").send_keys('123')
driver.find_element(By.NAME, 'telA').send_keys('15537003170')
driver.find_element(By.XPATH, "//*[@id='emailA']").send_keys('1783933592@qq.com')

三、元素操作方法

1. clear() 清除文本
2. send_keys() 模拟输入
3. click() 单击元素
4. maximize_window() 最大化 --> 模拟浏览器最大化按钮
5. set_window_position(0, 0) -->设置窗口位置
6. driver.set_window_size(300, 400)
7. refresh() 刷新 --> 模拟浏览器F5刷新
8. close() 关闭 --> 模拟浏览器关闭按钮(关闭单个窗口)
9. back() 返回上一个页面
10. forward()进入下一个页面
11. quit() 关闭 --> 关闭所有WebDriver启动的窗口

1. size 返回元素大小
2. text 获取元素的文本
3. title 获取页面title
4. current_url 获取当前页面URL
5. get_attribute("xxx") 获取属性值;xxx:要获取的属性

四、WebDriver鼠标、键盘操作

鼠标导包:from selenium.webdriver.common.action_chains import ActionChains
1. context_click()    右击 --> 此方法模拟鼠标右键点击效果
2. double_click()     双击 --> 此方法模拟鼠标双击效果
3. drag_and_drop()    拖动 --> 此方法模拟鼠标拖动效果
4. move_to_element()  悬停 --> 此方法模拟鼠标悬停效果
5. perform() 执行 -->  此方法用来执行以上所有鼠标方法
from selenium.webdriver.common.action_chains import ActionChains
action = ActionChains(driver)
userA = driver.find_element_by_id("userA")
action.double_click(userA).perform()    // 双击并执行
键盘导包:from selenium.webdriver.common
1. send_keys(Keys.BACK_SPACE)删除键(BackSpace)
2. send_keys(Keys.SPACE)空格键(Space) 
3. send_keys(Keys.TAB)制表键(Tab) 
4. send_keys(Keys.ESCAPE)回退键(Esc)
5. send_keys(Keys.ENTER)回车键(Enter)
6. send_keys(Keys.CONTROL,'a') 全选(Ctrl+A)
7. send_keys(Keys.CONTROL,'c')复制(Ctrl+C)
from selenium.webdriver.common.keys import Keys
# sleep(1)
userA.click()
userA.send_keys(Keys.CONTROL, 'a')

五、设置元素等待

方法:implicitly_wait(timeout)     (timeout:为等待最大时长,单位:秒)
调用:driver.implicitly_wait(10)   (driver:为浏览器实例化对象名称)
driver.implicitly_wait(10)

六、下拉选择框、警告框、滚动条操作

选择框(select)
1.实现方式:
    1.定位option选项 (找到该元素,然后直接选择)
    2.通过Select类实现(导包:from selenium.webdriver.support.select import Select)
# 1.定位option选项,然后直接选择
driver.find_element_by_css_selector("[value='sh']").click()     // 上海
sleep(2)
driver.find_element_by_css_selector("[value='gz']").click()     // 广州
sleep(2)
driver.find_element_by_css_selector("[value='bj']").click()     // 北京
sleep(2)
# 2.通过Select类实现(导包:from selenium.webdriver.support.select import Select)
from selenium.webdriver.support.select import Select
select = Select(driver.find_element_by_css_selector("#selectA"))
#  根据索引实现
select.select_by_index(1)
select.select_by_index(3)
select.select_by_index(2)
#  根据文本值实现
select.select_by_visible_text("A上海")
select.select_by_visible_text("A重庆")
select.select_by_visible_text("A广州")
#  根据value属性实现
select.select_by_value("sh")
select.select_by_value("cq")
select.select_by_value("gz")
警告框(alert、confirm、prompt)
1. text --> 返回alert/confirm/prompt中的文字信息
2. accept() --> 接受对话框选项
3. dismiss() --> 取消对话框选项
driver.find_element_by_css_selector("#alerta").click()
alert = driver.switch_to.alert
print(alert.text)
alert.accept()
滚动条(使用js代码实现)
js="window.scrollTo(0,1000)"
driver.execute_script(js)
js = "window.scrollTo(0,1000)"
driver.execute_script(js)

sleep(2)
# driver.find_element_by_link_text("访问 新浪 网站").click()
driver.quit()

七、frame表单切换、多窗口切换

1).driver.switch_to.frame("myframe1") --> 切换表单方法
 (myframe1:为frame表单的name或id)
2). driver.switch_to.default_content() --> 恢复默认页面方法
 (在frame表单中操作其他页面,必须先回到默认页面,才能进一步操作)
url = os.getcwd() + os.sep + '注册实例.html'
driver = webdriver.Chrome()
driver.get(url)
# 获得当前界面的句柄
current_handle = driver.current_window_handle
# 点击切换界面的链接
driver.find_element_by_css_selector("#ZCA").click()

for handle in driver.window_handles:
    if handle != current_handle:
        driver.switch_to.window(handle)
        driver.find_element_by_id('userA').send_keys('123456')
        driver.find_element_by_id('passwordA').send_keys('123456')

# driver.switch_to.default_content() 不知道是干啥用的
driver.switch_to.window(current_handle)
driver.find_element_by_css_selector("#user").send_keys("123456")

八、窗口截图、验证码处理(验证码处理了解即可->cookie)

窗口截图:
get_screenshot_as_file(imgpath) --> 截取当前窗口
driver.get_screenshot_as_file('file.png')

sleep(1)
driver.quit()

全代码

from selenium import webdriver
from time import sleep
import os
"""
selenium的使用
-------------------------------------------------------------------------------
    一、webdriver 元素定位
    
    get()直接访问某个网址(传参输入网址)
    back() 返回上一个页面
    forward()进入下一个页面
    close()关闭当前标签页
    quit()关闭浏览器
"""


url = os.getcwd() + os.sep + '注册A.html'
url1 = 'ftp://192.168.0.6'

driver = webdriver.Chrome()
driver.get(url)

# id
userA = driver.find_element_by_id("userA")
userA.send_keys("123")
# name
driver.find_element_by_name("passwordA").send_keys("123456")
# class_name
driver.find_element_by_class_name("telA")
# tag_name
driver.find_element_by_tag_name("input").send_keys("123456")
# link_text
driver.find_element_by_link_text("访问 新浪 网站").click()
# 返回上一页
driver.back()
# partial.link_text
driver.find_element_by_partial_link_text("网站").click()
"""
    以上每一个方法都可以在element元素后面加上s,返回一个数组,可以用数组下标进行选择元素
    tem = driver.find_elements_by_tag_name("input")
    for i in range(16):
        print(tem[i].get_attribute("id"))
"""

driver.back()

"""
-------------------------------------------------------------------------------
    二、Xpath、CSS定位
    
    find_element_by_xpath
    绝对路径:/html/body/div/p[2]
    相对路径://input[@id='userA']
"""
# 使用绝对路径
driver.find_element_by_xpath("/html/body/form/div/fieldset/p[3]/input").send_keys("123")
# 使用相对路径
driver.find_element_by_xpath("//div[@id='zc']/fieldset/p[3]/input").send_keys("123")

# css定位 (也有elements)
driver.find_element_by_css_selector('input')
driver.find_element_by_css_selector('#userA')
driver.find_element_by_css_selector('.telA')
driver.find_element_by_css_selector("input[type^='p']")
"""
    补充知识,通过By查找元素

    导包:from selenium.webdriver.common.by import By
"""
from selenium.webdriver.common.by import By
driver.find_element(By.CSS_SELECTOR, "#userA").send_keys("liuyaohui")
driver.find_element(By.ID, "passwordA").send_keys('123')
driver.find_element(By.NAME, 'telA').send_keys('15537003170')
driver.find_element(By.XPATH, "//*[@id='emailA']").send_keys('1783933592@qq.com')


"""
-------------------------------------------------------------------------------
    三、元素操作方法

    1. clear() 清除文本
    2. send_keys() 模拟输入
    3. click() 单击元素
    4. maximize_window() 最大化 --> 模拟浏览器最大化按钮
    5. set_window_position(0, 0) -->设置窗口位置
    6. driver.set_window_size(300, 400)
    7. refresh() 刷新 --> 模拟浏览器F5刷新
    8. close() 关闭 --> 模拟浏览器关闭按钮(关闭单个窗口)
    9. back() 返回上一个页面
    10. forward()进入下一个页面
    11. quit() 关闭 --> 关闭所有WebDriver启动的窗口
    
    1. size 返回元素大小
    2. text 获取元素的文本
    3. title 获取页面title
    4. current_url 获取当前页面URL
    5. get_attribute("xxx") 获取属性值;xxx:要获取的属性
"""

"""
-------------------------------------------------------------------------------
    四、WebDriver鼠标、键盘操作

    鼠标导包:from selenium.webdriver.common.action_chains import ActionChains
    1. context_click()    右击 --> 此方法模拟鼠标右键点击效果
    2. double_click()     双击 --> 此方法模拟鼠标双击效果
    3. drag_and_drop()    拖动 --> 此方法模拟鼠标拖动效果
    4. move_to_element()  悬停 --> 此方法模拟鼠标悬停效果
    5. perform() 执行 -->  此方法用来执行以上所有鼠标方法
"""
from selenium.webdriver.common.action_chains import ActionChains
action = ActionChains(driver)
userA = driver.find_element_by_id("userA")
action.double_click(userA).perform()    # 双击并执行
"""
    键盘导包:from selenium.webdriver.common
    1. send_keys(Keys.BACK_SPACE)删除键(BackSpace)
    2. send_keys(Keys.SPACE)空格键(Space) 
    3. send_keys(Keys.TAB)制表键(Tab) 
    4. send_keys(Keys.ESCAPE)回退键(Esc)
    5. send_keys(Keys.ENTER)回车键(Enter)
    6. send_keys(Keys.CONTROL,'a') 全选(Ctrl+A)
    7. send_keys(Keys.CONTROL,'c')复制(Ctrl+C)
"""
from selenium.webdriver.common.keys import Keys
# sleep(1)
userA.click()
userA.send_keys(Keys.CONTROL, 'a')

"""
-------------------------------------------------------------------------------
    五、设置元素等待

    方法:implicitly_wait(timeout)     (timeout:为等待最大时长,单位:秒)
    调用:driver.implicitly_wait(10)   (driver:为浏览器实例化对象名称)
"""
driver.implicitly_wait(10)


"""
-------------------------------------------------------------------------------
    六、下拉选择框、警告框、滚动条操作

    选择框(select)
    1.实现方式:
        1.定位option选项 (找到该元素,然后直接选择)
        2.通过Select类实现(导包:from selenium.webdriver.support.select import Select)
"""
# 1.定位option选项,然后直接选择
driver.find_element_by_css_selector("[value='sh']").click()     # 上海
sleep(2)
driver.find_element_by_css_selector("[value='gz']").click()     # 广州
sleep(2)
driver.find_element_by_css_selector("[value='bj']").click()     # 北京
sleep(2)
# 2.通过Select类实现(导包:from selenium.webdriver.support.select import Select)
from selenium.webdriver.support.select import Select
select = Select(driver.find_element_by_css_selector("#selectA"))
#  根据索引实现
select.select_by_index(1)
select.select_by_index(3)
select.select_by_index(2)
#  根据文本值实现
select.select_by_visible_text("A上海")
select.select_by_visible_text("A重庆")
select.select_by_visible_text("A广州")
#  根据value属性实现
select.select_by_value("sh")
select.select_by_value("cq")
select.select_by_value("gz")
"""
    警告框(alert、confirm、prompt)
    
    1. text --> 返回alert/confirm/prompt中的文字信息
    2. accept() --> 接受对话框选项
    3. dismiss() --> 取消对话框选项
"""
driver.find_element_by_css_selector("#alerta").click()
alert = driver.switch_to.alert
print(alert.text)
alert.accept()
"""
    滚动条(使用js代码实现)

    js="window.scrollTo(0,1000)"
    driver.execute_script(js)
"""
js = "window.scrollTo(0,1000)"
driver.execute_script(js)


sleep(2)
# driver.find_element_by_link_text("访问 新浪 网站").click()
driver.quit()


"""
-------------------------------------------------------------------------------
    七、frame表单切换、多窗口切换

    1).driver.switch_to.frame("myframe1") --> 切换表单方法
     (myframe1:为frame表单的name或id)
    2). driver.switch_to.default_content() --> 恢复默认页面方法
     (在frame表单中操作其他页面,必须先回到默认页面,才能进一步操作)
"""
url = os.getcwd() + os.sep + '注册实例.html'
driver = webdriver.Chrome()
driver.get(url)
# 获得当前界面的句柄
current_handle = driver.current_window_handle
# 点击切换界面的链接
driver.find_element_by_css_selector("#ZCA").click()

for handle in driver.window_handles:
    if handle != current_handle:
        driver.switch_to.window(handle)
        driver.find_element_by_id('userA').send_keys('123456')
        driver.find_element_by_id('passwordA').send_keys('123456')

# driver.switch_to.default_content() 不知道是干啥用的
driver.switch_to.window(current_handle)
driver.find_element_by_css_selector("#user").send_keys("123456")


"""
-------------------------------------------------------------------------------
    八、窗口截图、验证码处理(验证码处理了解即可->cookie)
    
    窗口截图:
    get_screenshot_as_file(imgpath) --> 截取当前窗口
"""
driver.get_screenshot_as_file('file.png')

sleep(1)
driver.quit()
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值