selenium模块和webdriver常用命令

selenium模块和webdriver常用命令

一、selenium安装:

pip install -u selenium

二、下载浏览器驱动

谷歌浏览器chromedriver下载地址:http://chromedriver.storage.googleapis.com/index.html

火狐浏览器geckodriver下载地址:https://ftp.mozilla.org/pub/firefox/releases/

IE浏览器IEDriverServer下载地址:http://selenium-release.storage.googleapis.com/index.html

三、selenium使用
(一)、webdriver调用

from selenium import webdriver   # 导入webdriver模块
driverDir='C:\\Users\\Administrator\\AppData\\Local\\Google\\Chrome\\Application\\chromedriver.exe'                                     #chromedriver路径
chrome_options = webdriver.ChromeOptions()    #参数设置
#chrome_options.add_argument('--headless')
driver = webdriver.Chrome(driverDir ,options=chrome_options)   #打开Google浏览器
'''
#火狐浏览器
fireFoxOptions = webdriver.FirefoxOptions()
driver= webdriver.Firefox(firefox_options=fireFoxOptions)
#IE浏览器
driver = webdriver.Ie()
'''
driver.get("https://www.baidu.com")      # 打开网页
driver.get(r"C:\text.html")       # 打开本地 html页面
print(driver.title)               # 打印网页的标题 
print(driver.current_url)         # 输出当前的链接
driver.close()                    #关闭浏览器窗口
driver.quit()                     #退出浏览器

(二)、定位标签方法

label = driver.find_element_by_id("kw")
label = driver.find_element_by_name("wd")
label = driver.find_element_by_class_name("s_ipt")
label = driver.find_element_by_tag_name("imput")
label = driver.find_element_by_link_text("a标签中的内容 准确定位")  
label = driver.find_element_by_partial_link_text("a标签中的内容 模糊定位 ")
label = driver.find_element_by_xpath(“放入标签中的css路径,可以在浏览器复制”)
label = driver.find_element_by_css_selector(“input[id='id_name'/name='name_name'/……/]")

xpath 标签定位复杂元素:

# 绝对路径
label = driver.find_element_by_xpath("html/boday/p/input")   # 绝对路径 导航
label = driver.find_element_by_xpath("html/boday/p/input[1]") # 绝对路径导航,多个input框,确定第一个input框
#相对路径
label = driver.find_element_by_xpath("//input")  # 相对路径导航  表示 整个文档当中的 input标签 默认为第一个  * 第一个“//” 表示 在整个文档中
label = driver.find_element_by_xpath("//input[2]") # 指定页面中的第二个 input框 没有就报错 
 
# 父节点下找子节点
label = driver.find_element_by_xpath("//form//input")  # // 父节点//子节点  * 返回子节点 input
label = driver.find_element_by_xpath("//form//input[2]") # // 父节点//子节点 [2] * 指定 父节点下的 第二个 input子节点
 
# 通过子节点 定位父节点
label = driver.find_element_by_xpath("//form//input/..")  # 返回input的父节点 form 标签
label = driver.find_element_by_xpath("//form//input/.")   # 当前节点
 
# 通过属性查找节点
label = driver.find_element_by_xpath("//input[@id]")  # 相对路径导航  找到所有的 input标签 其中有 id属性的标签
label = driver.find_element_by_xpath("//input[@id='1']")  # 属性查找 在所有的input标签中 找到 具有 id=1 的input标签 
label = driver.find_element_by_xpath("//input[@name='xiahua']")  
 
 
# 标签统计 countains
label = driver.find_element_by_xpath("//*[countains(input)=1]")  # //* 表示 整个文档中 的所有标签,[count(input)=1] 表示 父标签下只有 一个input子标签 的 input标签
label = driver.find_element_by_xpath("//*[countains(input)=2]")  # //* 表示 整个文档中 的所有标签,[count(input)=1] 表示 父标签下有 两个input子标签 的 input标签
 
# local-name 模糊查找  
label = driver.find_element_by _xpath("//*[local-name()='input']")  # 查找当前文档中 的所有input标签 默认返回第一个
label = driver.find_element_by _xpath("//*input")      # 查找当前文档中 的所有input标签 默认返回第一个
 
label = driver.find_element_by _xpath("//*[local-name(),'i']")  # 查找当前文档中 标签名字中 包含字母 i的标签,比如 input title
label = driver.find_element_by _xpath("//*[local-name(),'i']")  # 查找当前文档中 的所有input标签 默认返回第一个
 
label = driver.find_element_by _xpath("//*[countains(local-name(),'i')] [last()])  # 查找当前文档中 所有包含 字母“i”的 标签 的子标签 的 最后一个元素
label = driver.find_element_by _xpath("//*[strint-length(local-name()=3)] [last()])  # 查找当前文档中 所有 标签字符个数为5的标签,并且制定返回 最后一个标签。 title input(5个str)

(三)、模拟操作

label.get_attribute("type") # 显示标签的type属性 name type id placeholder
label.tag_name()  #获取标签名字  input p form ……
driver.maximize_window()# 窗口最大化 
label.click() # 模拟a标签  点击事件
label.send_keys("模拟搜索内容")  # 模拟input框 输入内容label.clear() # 清除input标签中 输入的内容chrome_obj.back() # 模拟浏览器 返回上一个浏览页面

 1、模拟鼠标操作

from selenium.webdriver.common.action_chains import ActionChains #导入模块
label = driver.find_element_by_link_text("点我 悬浮 显示其他 a标签")
ActionChains(driver).move_to_element(label).perform()    # 模拟用户悬浮
"""  ActionChains(driver) 用于生成模拟用户行为 ;perform()  执行存储行为  """
label_bel = driver.find_element_by_link_text("我是 a标签,点我页面跳转")
label_bel.click()   # 模拟用户点击
 
''' 
其他鼠标操作
label.countext_lick() # 右击
label.double_click() # 双击
label.drag_and_drop() # 拖动
label.move_to_element  # 悬浮
label.click_and_hold  # 按鼠标左键一直不动
'''

2、模拟键盘操作

from selenium.webdriver.common.keys import Keys  #  引入模块
 
label.send_keys("input输入的内容")
 
label.send_keys(Keys.BACK_SPANCE)  # 退格键
 
label.send_keys(Keys.CONTRL,'a')  # 全选
 
label.send_keys(Keys.CONTRL,'v')  # 粘贴
 
label.send_keys(Keys.CONTRL,'c')  # 复制
 
label.send_keys(Keys.CONTRL,'x‘’) # 剪切
 
label.send_keys(Keys.ENTER)   # 回车

 3、处理对话框,模拟登录

from selenium import webdriver
import time
def auto_login(name,pwd,url):
    driver = webdriver.driver()
    driver.get(url)
    time.sleep(1)
    driver.maximize_window()
    time.sleep(2)
    name_label = driver.find_element_by_id("account")     #登录用户名输入框
    name_label.clear()
    name_label.send_keys(name)
    pwd_label = driver.find_element_by_id("password")   #登录密码输入框
    pwd_label.clear()
    pwd_label.send_keys(pwd)
    time.sleep(3)
    login_label = driver.find_element_by_id("login_btn")   #登录按钮
    login_label.click()
    time.sleep(5)
    #driver.close()   #关闭浏览器
 
if __name__  == "__main__":
    name = ""
    pwd = ""
    url = ""
    auto_login(name,pwd,url)

4、控制标签页

frome selenium import webdrive
 
driver  = webdrive.driver()
 
driver.get("https://www.baidu.com")
 
driver.find_element_by_id("kw").send_keys("菊花")
 
driver.find_element_by_id("su").click()   # 打开百度搜索的第一个窗口
 
driver.find_element_by_partial_link_text("百度百科").click() # 打开第二个窗口
 
driver.window_handles  # 查看当前 打开窗口
 
driver.switch_to_window(driver.window_handles[1])  # 使用索引切换到第二个窗
 
driver.current_url()  # 查看当前url

5、获取元素的属性

label.text在属性可见时是可以获取的,但当属性不可见时,需要使用label.get_attribute(‘innerText’)

input.get_attribute('value')                                      #获取输入框的值

aElement.get_attribute('href')                                 #获取a标签的链接

分享到 :

Leave a Reply

Your email address will not be published. Required fields are marked *