Selenium介绍和基本使用

1什么是Selenium

- Selenium是一个用于web应用程序测试的工具。
- Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。
- Selenium支持通过各种driver(FirfoxDriver,IternetExplorerDriver,ChromeDriver)驱动真实浏览器完成测试。
- Selenium支持无界面浏览器操作。

2 为什么使用Selenium

模拟浏览器功能,自动执行网页中的js代码,实现动态加载。

3 如何安装Selenium

- 谷歌浏览器驱动下载地址
http://chromedriver.storage.googleapis.com/index.html
http://npm.taobao.org/mirrors/chromedriver/
按照chrome版本对应的driver,直接按照浏览器版本去找对应的driver(只对应大版本就行)。

- 查看谷歌浏览器版本
谷歌浏览器右上角‐‐>帮助‐‐>关于 Chrome

- selenium安装
pip install selenium

- 确认selenium是否安装成功
pip show selenium

4 Selenium基本使用

# 查看Selenium.Webdriver支持哪些浏览器

from selenium import webdriver
help(webdriver)

执行结果:
Help on package selenium.webdriver in selenium:

NAME
    selenium.webdriver

PACKAGE CONTENTS
    chrome (package)
    chromium (package)
    common (package)
    edge (package)
    firefox (package)
    ie (package)
    remote (package)
    safari (package)
    support (package)
    webkitgtk (package)
    wpewebkit (package)
    
从结果中,可以看出常见的浏览器基本都支持。
4.1 Selenium使用步骤
- 导入模块
from selenium import webdriver

- 创建谷歌浏览器操作对象
path = 谷歌浏览器驱动文件路径
browser = webdriver.Chrome(path)

- 访问网址
url = 要访问的网址
browser.get(url)

- page_source 获取网页源码
content = browser.page_source
print(content)

- 关闭浏览器
browser.close()

# 案例:
from selenium import webdriver

path = 'chromedriver.exe'
browser = webdriver.Chrome(path)

url = 'https://www.baidu.com'
browser.get(url)

content = browser.page_source
print(content)

browser.close()
4.2 Selenium元素定位
元素定位:自动化要做的就是模拟鼠标和键盘来操作来操作这些元素,点击、输入等等。操作这些元素前首先
要找到它们,WebDriver提供很多定位元素的方法。

注:通过webdriver对象的find_element_by_xx(" "),在selenium的4.0版本中此种用法已经抛弃。

方法1:通过webdriver对象的find_element("属性名","属性值")

# 案例:
from selenium import webdriver

path = 'chromedriver.exe'
browser = webdriver.Chrome(path)

url = 'https://www.baidu.com'
browser.get(url)

# 根据id来查找对象
button = browser.find_element('id','su')
print(button)

# 根据name来查找对象
button = browser.find_element('name','wd')
print(button)

# 根据xpath来查找对象
button = browser.find_element('xpath','//input[@id="su"]')
print(button)


方法2:通过webdriver模块中的By,以指定方式定位元素
      导入模块:from selenium.webdriver.common.by import By

# 案例:
from selenium import webdriver
from selenium.webdriver.common.by import By

path = 'chromedriver.exe'
browser = webdriver.Chrome(path)

url = 'https://www.baidu.com'
browser.get(url)
# 根据By.TAG_NAME来查找对象
button = browser.find_element(By.TAG_NAME,'input')
print(button)

# 使用bs4的语法来获取对象
button = browser.find_element(By.CSS_SELECTOR,'#su')
print(button)

# 根据By.LINK_TEXT来查找对象
button = browser.find_element(By.LINK_TEXT,'新闻')
print(button)
4.3 Selenium元素信息
# 访问元素信息
1.获取元素属性
		.get_attribute('class')
2.获取元素文本
		.text
3.获取标签名
		.tag_name

# 案例1:
from selenium import webdriver
from selenium.webdriver.common.by import By

path = 'chromedriver.exe'
browser = webdriver.Chrome(path)
url = 'https://www.baidu.com'
browser.get(url)

input = browser.find_element(By.ID,'su')
# 获取元素属性
print(input.get_attribute('class'))
# 获取标签名
print(input.tag_name)

input = browser.find_element(By.LINK_TEXT,'新闻')
#  获取元素文本
print(input.text)

# 案例2:
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.common.exceptions import NoSuchElementException

browser = webdriver.Chrome()
url = 'http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable'
browser.get(url)
browser.switch_to.frame('iframeResult')
source = browser.find_element(By.CSS_SELECTOR,'#draggable')
print(source)
try:
    logo = browser.find_element(By.CLASS_NAME,'logo')
except NoSuchElementException:
    print('NO LOGO')
browser.switch_to.parent_frame()
logo = browser.find_element(By.CLASS_NAME,'logo')
print(logo)
print(logo.text)
4.4 Selenium交互动作
点击:click()
输入:send_keys()
后退操作:browser.back()
前进操作:browser.forword()
模拟JS滚动:
        js='document.documentElement.scrollTop=100000'
        browser.execute_script(js) 执行js代码
获取网页代码:page_source 
退出:browser.quit()


# 案例1:
from selenium import webdriver
from selenium.webdriver.common.by import By
import time

path = 'chromedriver.exe'
browser = webdriver.Chrome(path)
url = 'https://www.baidu.com'
browser.get(url)
time.sleep(2)

input = browser.find_element(By.ID,'kw')
input.send_keys('周杰伦')
time.sleep(2)

button = browser.find_element(By.ID,'su')
button.click()
time.sleep(2)

# 滑到底部
js_bottom = 'document.documentElement.scrollTop=100000'
browser.execute_script(js_bottom)
time.sleep(2)

# 获取下一页按钮
next = browser.find_element(By.XPATH,'//a[@class="n"]')
next.click()
time.sleep(2)

# 返回上一页
browser.back()
time.sleep(2)

# 回到下一页
browser.forward()
time.sleep(2)

# 退出
browser.quit()

# 案例2:
from selenium import webdriver
from selenium.webdriver.common.by import By
import time

browser = webdriver.Chrome()
browser.get("http://www.taobao.com")
input_str = browser.find_element(By.ID,'q')
input_str.send_keys("ipad")
time.sleep(2)

input_str.clear()

input_str.send_keys("MakBook pro")
button = browser.find_element(By.CLASS_NAME,'btn-search')
button.click()

运行的结果可以看出程序会自动打开Chrome浏览器并打开淘宝输入ipad,然后删除,重新输入MakBook pro,并点击搜索。

# 案例3:
from selenium import webdriver
browser = webdriver.Chrome()
browser.get("http://www.zhihu.com/explore")
browser.execute_script('window.scrollTo(0, document.body.scrollHeight)')
browser.execute_script('alert("To Bottom")')
4.5 Chrome handless
Chrome-headless模式,Google针对Chrome浏览器59版新增加的一种模式,可以让你不打开UI界面的情况下使用Chrome浏览器,所以运行效果与Chrome保持完美一致。

1.系统要求:
Chrome 
       Unix\Linux 系统需要 chrome >= 59 
       Windows 系统需要 chrome >= 60
Python3.6
Selenium==3.4.*
ChromeDriver==2.31

2.配置封装
from selenium import webdriver
# 这个是浏览器自带的,不需要再做额外的操作
from selenium.webdriver.chrome.options import Options

def share_browser():
    # 初始化
    chrome_options = Options()
    chrome_options.add_argument('--headless')
    chrome_options.add_argument('--disable-gpu')

    # path是自己的chrome浏览器的文件路径
    path = r'C:\Users\95423\AppData\Local\Google\Chrome\Application\chrome.exe'
    chrome_options.binary_location = path
    # 创建对象
    browser = webdriver.Chrome(chrome_options= chrome_options)
    return browser

# 封装调用:
browser= share_browser()
#发起访问
browser.get('https://www.baidu.com/')
# 拍摄快照
browser.save_screenshot('baidu.png')
4.6 选项卡管理
通过执行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')
4.7 异常处理
from selenium import webdriver
from selenium.webdriver.common.by import By
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()

参考链接:https://selenium-python.readthedocs.io/installation.html#installing-python-bindings-for-selenium

你可能感兴趣的:(selenium,chrome,python)