Selenium自动化的使用

2019-03-22  本文已影响0人  leoryzhu

1、准备

下载chrome版本对就的对应的驱动chromedriver,放在python 安装目录下的Scripts目录下

2、安装selenium

pip install selenium

3、使用

声明浏览器对象

selenium支持很多浏览器,下面调用了Chrome浏览器,运行python 文件,将会打开Chrome浏览器

from selenium import webdriver

browser = webdriver.Chrome()

访问页面

打开百度页面

from selenium import webdriver

browser = webdriver.Chrome()

browser.get("http://www.baidu.com")
image.png

查找元素

单个元素查找

查找元素的方法有

find_element_by_name
find_element_by_id
find_element_by_xpath
find_element_by_link_text
find_element_by_partial_link_text
find_element_by_tag_name
find_element_by_class_name
find_element_by_css_selector
from selenium import webdriver

browser = webdriver.Chrome()

browser.get("http://www.baidu.com")

su_id=browser.find_element_by_id('su')
su_css=browser.find_element_by_css_selector("#su")
su_xpath=browser.find_element_by_xpath("//*[@id='su']")
print(su_id)
print(su_css)
print(su_xpath)
image.png
多元素查找

同样的在单个元素中查找的方法在多个元素查找中同样存在:

find_elements_by_name
find_elements_by_id
find_elements_by_xpath
find_elements_by_link_text
find_elements_by_partial_link_text
find_elements_by_tag_name
find_elements_by_class_name
find_elements_by_css_selector

元素交互操作

对获取到的元素调用交互方法

from selenium import webdriver
import time

browser=webdriver.Chrome()
browser.get("https://www.taobao.com")
input=browser.find_element_by_id('q')
input.send_keys("手机")
time.sleep(10)
input.clear()
input.send_keys("小米")
button=browser.find_element_by_class_name('btn-search')
button.click()
time.sleep(10)
browser.close()

把动作附加到交互链中

from selenium import webdriver
from selenium.webdriver import ActionChains
import time

browser=webdriver.Chrome()
# browser.get("https://www.taobao.com")
# input=browser.find_element_by_id('q')
# input.send_keys("手机")
# time.sleep(10)
# input.clear()
# input.send_keys("小米")
# button=browser.find_element_by_class_name('btn-search')
# button.click()
# time.sleep(10)
# browser.close()

url="http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable"

browser.get(url)
#切换到目标元素所在的frame
browser.switch_to_frame("iframeResult")

#确定拖拽目标的起点
source=browser.find_element_by_id("draggable")

#确定拖拽目标的终点
target=browser.find_element_by_id("droppable")

#形成动作链
actions=ActionChains(browser)
actions.drag_and_drop(source,target)

#执行
actions.perform()
'''
1.先用switch_to_alert()方法切换到alert弹出框上
2.可以用text方法获取弹出的文本 信息
3.accept()点击确认按钮
4.dismiss()相当于点右上角x,取消弹出框
'''
t=browser.switch_to_alert()
print(t.text)
time.sleep(2)
t.accept()
time.sleep(10)
browser.close()

执行JavaScript

可以直接调用js方法实现一些操作
比如拖动页面、弹框显示

from selenium import webdriver
browser=webdriver.Chrome()
browser.get("https://www.zhihu.com/explore")
browser.execute_script("window.scrollTo(0,document.body.scrollHeight)")
browser.execute_script("alert('To Button')")
browser.close()

切换Frame

通过switch_to.frame()和switch_to.parent_frame()进入和退出frame

等待

当使用了隐式等待执行测试的时候,如果 WebDriver没有在 DOM中找到元素,将继续等待,超出设定时间后则抛出找不到元素的异常, 换句话说,当查找元素或元素并没有立即出现的时候,隐式等待将等待一段时间再查找 DOM,默认的时间是0

隐式等待

到了一定的时间发现元素还没有加载,则继续等待我们指定的时间,如果超过了我们指定的时间还没有加载就会抛出异常,如果没有需要等待的时候就已经加载完毕就会立即执行

from selenium import webdriver

browser = webdriver.Chrome()
browser.implicitly_wait(10)
browser.get('https://www.zhihu.com/explore')
input = browser.find_element_by_class_name('zu-top-add-question')
print(input)

浏览器的前进和后退

back()
forward()

cookie

get_cookies()
delete_all_cookes()
add_cookie()

选项卡操作

通过执行js命令实现新开选项卡window.open()
不同的选项卡是存在列表里browser.window_handles
通过browser.window_handles[0]就可以操作第一个选项卡

import time
from selenium import webdriver

browser = webdriver.Chrome()
browser.get('https://www.baidu.com')
browser.execute_script('window.open()')
print(browser.window_handles)
browser.switch_to_window(browser.window_handles[1])
browser.get('https://www.taobao.com')
time.sleep(1)
browser.switch_to_window(browser.window_handles[0])
browser.get('https://python.org')

异常处理

这里的异常比较复杂,这里只进行简单的演示,查找一个不存在的元素

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

browser = webdriver.Chrome()
try:
    browser.get('https://www.baidu.com')
except TimeoutException:
    print('Time Out')
try:
    browser.find_element_by_id('hello')
except NoSuchElementException:
    print('No Element')
finally:
    browser.close()
上一篇下一篇

猜你喜欢

热点阅读