Selenium的使用

Selenium除了在爬虫的时候,可以模拟登陆操作,在自动化测试中也有一定的使用价值。下面列举常用操作。

Selenium的准备工作

相关名词解释,点击此处

安装selenium

pip install selenium

配置chromedriver

1.下载chromedriver,下载地址
根据Chrome浏览器版本(查看版本:在浏览器中输入:chrome://version/)下载对应的chromedriver,没找到就找最近的版本。
2.解压安装包,得到exe文件。
3.把exe文件放到Chrome目录下,我的是:C:\Users\YYX\AppData\Local\Google\Chrome\Application
4.把exe文件放到python目录下,我的是:F:\Python\Python37
5.添加环境变量

Selenium的常用操作

声明浏览器对象

from selenium import webdriver

driver = webdriver.Chrome()  #谷歌 需要配合:ChromeDriver驱动
driver = webdriver.PhantomJS() #无界面浏览器
driver = webdriver.FireFox() #火狐 需要配合:GeckoDriver驱动
driver = webdriver.Edge()  
driver = webdriver.Safari()  

访问页面

from selenium import webdriver

#driver = webdriver.PhantomJS()
driver = webdriver.Chrome()
driver.get("http://www.taobao.com")
# 输出页面
print(driver.page_source)
#driver.close()

运行后,会自动弹出Chrome浏览器,运行结果。

查找节点(元素定位)

获取单个节点的方法:

  • find_element(By.ID,“kw”) #找到id属性为kw的节点
  • find_element_by_id(“kw”) #找到id属性为kw的节点
  • find_element_by_name(“kw”) #找到name属性为kw的节点
  • find_element_by_xpath("//*[@id=‘q’]") #找到符合xpath格式的节点
  • find_element_by_link_text(“kw”) #找到超链接文字为kw的节点
  • find_element_by_partial_link_text(“kw”)#找到超链接文字含有kw的节点
  • find_element_by_tag_name(“kw”) #找到tag属性为kw的节点(最好不用)
  • find_element_by_class_name(“kw”) #找到class属性为kw的节点
  • find_element_by_css_selector(“span.bg.s_btn_wr>input#su”)#定位到一个class名为bg s_btn_wr的span标签,在这个标签下面有一个id为su的input标签

获取节点信息:

#获取id属性值为aa的节点(logo)
object1= driver.find_element_by_id("aa")
print(object1) #输出节点对象
print(object1.get_attribute('class')) #节点的class属性值
print(object1.text) #获取节点间内容
print(object1.id)  #获取id属性值
print(object1.location) #节点在页面中的相对位置
print(object1.tag_name) #节点标签名称
print(object1.size)     #获取节点的大小

控制节点(交互)

from selenium import webdriver
import time

#创建浏览器对象
driver = webdriver.Chrome()
driver.get("http://www.taobao.com")
#获取id属性值等于q的节点对象
input = driver.find_element_by_id("q")
#模拟键盘输入python
input.send_keys('python')
time.sleep(1)
#清空输入框
input.clear()
#模拟键盘输入css
input.send_keys('css')
#获取搜索按钮节点,触发点击动作
driver.find_element_by_class_name("btn-search").click()
#driver.close()

执行js

#执行javascript程序将页面滚动移至底部
driver.execute_script('window.scrollTo(0,document.body.scrollHeight)')
#执行javascript实现一个弹框操作
driver.execute_script('window.alert("Hello Selenium!")')

切换Frame

有一种节点叫做iframe,可以将一个页面分成多个子父界面。
我们可以使用switch_to.frame()来切换Frame界面。

driver.switch_to.frame('iframeResult')

动态链(模拟操作)

ActionChains是一种自动化低级别交互的方法,如鼠标移动,鼠标按钮操作,按键操作和上下文菜单交互。
这对于执行更复杂的操作(如悬停和拖放)很有用.

  • move_to_element(to_element )-- 将鼠标移到元素的中间
  • move_by_offset(xoffset,yoffset )-- 将鼠标移至当前鼠标位置的偏移量
  • drag_and_drop(源,目标)-- 然后移动到目标元素并释放鼠标按钮。
  • pause(秒)-- 以秒为单位暂停指定持续时间的所有输入
  • perform()-- 执行所有存储的操作。
  • release(on_element = None )释放元素上的一个持有鼠标按钮。
  • reset_actions()-- 清除已存储在远程端的操作。
  • send_keys(* keys_to_send )–将键发送到当前的焦点元素。
  • send_keys_to_element(element,* keys_to_send )-- 将键发送到一个元素
    例子:
#获取两个div节点对象
source = driver.find_element_by_css_selector("#draggable")
target = driver.find_element_by_css_selector("#droppable")
#创建一个动作链对象
actions = ActionChains(driver)
#将一个拖拽操作添加到动作链队列中
actions.drag_and_drop(source,target)
time.sleep(3)
#执行所有存储的操作(顺序被触发)
actions.perform()
#driver.close()

延迟等待

浏览器加载需要时间的,Selenium也不例外,若要获取完整网页内容,就要延时等待。
在Selenium中延迟等待方式有两种:一种是隐式等待,一种是显式等待(推荐)。
隐式等待:

driver.implicitly_wait(2) 

显式等待:

#显式等待,最长10秒
wait = WebDriverWait(driver,10)
#等待条件:10秒内必须有个id属性值为zu-top-add-question的节点加载出来,否则抛异常。
input = wait.until(EC.presence_of_element_located((By.ID,'zu-top-add-question')))
print(input.text) #获取节点间内容

前进和后退

用于返回上一步或者跳到下一步,类似浏览器的返回上一界面下一界面。

driver.back() #后退

driver.forward() #前进

Cookies

from selenium import webdriver
from selenium.webdriver import ActionChains

#创建浏览器对象
driver = webdriver.Chrome()
#加载请求指定url地址
driver.get("https://www.zhihu.com/explore")
print(driver.get_cookies())#得到所有的cookies
#添加cookies
driver.add_cookie({'name':'namne','domain':'www.zhihu.com','value':'zhangsan'})
print(driver.get_cookies())
driver.delete_all_cookies()#删除所有的cookies
print(driver.get_cookies())
#driver.close()

选项卡操作

driver.get("https://www.baidu.com")
#使用JavaScript开启一个新的选型卡
driver.execute_script('window.open()')

#切换到第二个选项卡,并打开url地址
driver.switch_to_window(driver.window_handles[1])
driver.get("https://www.jd.com")

#切回到第一个选项卡,并打开url地址
driver.switch_to_window(driver.window_handles[0])
driver.get("https://www.taobao.com")

异常处理

from selenium import webdriver
from selenium.common.exceptions import TimeoutException,NoSuchElementException

driver = webdriver.Chrome()
# 超时错误
try:
    driver.get("https://www.baidu.com")
except TimeoutException:
    print('Time Out')
# 未找到节点错误
try:
    #加载请求指定url地址
    driver.find_element_by_id("demo")
except NoSuchElementException:
    print('No Element')
finally:
    pass
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yyuanyuxin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值