selenium详解

一、基本使用

from selenium import webdriver
from selenium.webdriver.common.by import By#选择器
from selenium.webdriver.common.keys import Keys#按键
from selenium.webdriver.support.wait import WebDriverWait#等待页面加载完成,寻找某些元素
from selenium.webdriver.support import expected_conditions as EC#等待指定标签加载完毕
import selenium,time
#设置开发者模式
opt = webdriver.ChromeOptions()#避免被检测  配置文件对象 不需要了解 直接赋值 粘贴即可
opt.add_experimental_option('excludeSwitches',['enable-automation'])#写入参数
browser = webdriver.Chrome(options=opt)#驱动浏览器时带个参数options

url = 'https://www.baidu.com/'
browser.get(url)#请求页面  返回后的数据直接保存在browser里,不需要额外保存
text_input = browser.find_element(By.ID,'kw')#拿到输入框
text_input.send_keys('爬虫')#向输入框中写内容
text_input.send_keys(Keys.ENTER)
##等待事件
wait = WebDriverWait(browser,100)#(参数1:浏览器对象;参数2:时间(s)
time.sleep(5)
browser.close()#关闭页面

二、声明不同浏览器对象

from selenium import webdriver
browser = webdriver.Chrome()
browser = webdriver.Firefox()
browser = webdriver.PhantomJS()
browser = webdriver.Safari()

三、查找元素

方法

find_element(By.ID,"id")#根据id属性来定位
find_element(By.NAME,"name")#根据name元素来定位
find_element(By.XPATH,"xpath语法")#根据xpath语法来定位
find_element(By.TAG_NAME,"input")#根据标签名来定位
find_element(By.CLASS_NAME,"classname")#根据class名字来定位
find_element(By.CSS_SELECTOR,"#id")#根据css选择器来定位
find_element(By.LINK_TEXT,"text")#根据文本属性来定位

1、单个元素

from selenium import webdriver
from selenium.webdriver.common.by import By#选择器
url = 'https://www.taobao.com/'
browser = webdriver.Chrome()
browser.get(url)
#通过click点击链接,By.LINK_TEXT定位超链接
#browser.find_element(By.LINK_TEXT,"新闻").click()

#1、通过元素id查找
by_id = browser.find_element(By.ID,'q')
by_id.send_keys('美食')
print(by_id)
#2、通过css选择器查找
css_select = browser.find_element(By.CSS_SELECTOR,'#q')
css_select.send_keys('美食')
#3、通过XPATH寻找
xpath = browser.find_element(By.XPATH,'//*[@id="q"]')
xpath.send_keys("美食")

2、多个元素

css_select = browser.find_element(By.CSS_SELECTOR,'.service-bd li')
print(css_select)#以列表形式返回
#
# (session="b1f6c0b616d5f4ec617b0d8fb1b3d4f0", element="0E750E6A4C38471AEAA3D46448F80716_element_20")>

四、交互操作

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

from selenium import webdriver
from selenium.webdriver.common.by import By#选择器
from selenium.webdriver.common.keys import  Keys#按键
import time
browser = webdriver.Chrome()
browser.get('https://www.jd.com/')
text_input = browser.find_element(By.ID,'key')#找到首页输入框
text_input.send_keys('iphone')#输入请求信息
browser.find_element(By.CLASS_NAME,'button').click()#点击搜索
time.sleep(20)#延迟20s
text_input = browser.find_element(By.ID,'key')#找到登录页输入框
text_input.clear()#清空原来东西
text_input.send_keys('ipad')
browser.find_element(By.CLASS_NAME,'button cw-icon').click()

六、执行JavaScript

selenium不是万能的,有时候页面上操作无法实现的,这时候需要借助JS来完成

from  selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get('https://news.baidu.com/')
time.sleep(2)
#滚动到浏览器底部
js = 'window.scrollTo(0,document.body.scrollHeight)'
driver.execute_script(js)#执行js代码
time.sleep(3)
#滚动到顶部
js = 'window.scrollTo(0,document.body.scrollTop=0)'#0永远表示你当时下拉条存在的位置
driver.execute_script(js)

七、获取元素信息

1、获取文本及属性值

.text获取文本值
get_attribute()根据属性获取属性值

selenium详解_第1张图片

在这里插入图片描述

2、等待

from  selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By#选择器
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC #
import time
url = 'https://www.taobao.com/'
browser = webdriver.Chrome()
browser.get(url)
wait = WebDriverWait(browser,10)#设置等待时间
input = wait.until(EC.presence_of_element_located((By.ID,'J_Toolkit')))#等待元素是否存在于页面
print(input)#如果在规定时间内等到响应,会抛出异常Exception

3、EC模块的使用

selenium详解_第2张图片

八、前进后退

浏览器控制页面

from  selenium import webdriver
import time
browser = webdriver.Chrome()
browser.get('https://www.baidu.com/')
browser.get('https://www.taobao.com/')
browser.get('https://www.jd.com/')
browser.back()#后退 淘宝
time.sleep(2)
browser.forward() #前进 京东
time.sleep(2)

九、选项卡管理

selenium详解_第3张图片

selenium详解_第4张图片

十、异常处理

selenium详解_第5张图片
以下简单处理两个异常:最终返回No Element

from  selenium import webdriver
import time
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:#无论怎么样finally中都会执行
    browser.close()

你可能感兴趣的:(selenium,测试工具)