from selenium import webdriver
driver = webdriver.Edge()
driver.get('http://www.toutiao.com/')
- 向前
driver.forward()
- 向后
driver.back()
- 更新
driver.refresh()
- 关闭
driver.quit()
get_all_cookies()
: 获取所有cookie的信息delete_all_cookies()
:删除所有的cookieget_cookie([name])
:返回字典的key为[name]的cookieadd_cookie([cookie_dict]
):添加cookiedelect_cookie([name],[optionsString])
:删除cookie信息
JS='window.open ("https : //www.sogou.com")
driver.execute script (JS)
Selenium提供了如下8种定位方式:
#在输入框输入selenium并且按下搜索键
driver.find_element_by_id("kw") .send_keys ("selenium")
driver.find_element_by_id("su") .click()
在输入框输入selenium并且按下搜索键
driver.find_element_by_name('wd').send_key('selenuim')
`driver.find_element_by_name(‘su’).click()
- //*[@id=‘kw’]。
- //*[@name=‘wd’]。
- //input[@class=‘s ipt’]
- /html/body/form/span/input。
- //span[@class=‘soutu-btn’]/input。
- //form[@id=‘form’] /span/input。
- //input[@id=‘kw’ and @name=‘wd’]
通过名字查找并且输入搜索词
driver.find element by xpath(r'//*[@id="kw"]') .send keys ("selenium")
#1. 通过selenium访问python 的官网
from selenium import webdriver
import time
from selenium.webdriver.common.by import By
#实例化浏览器对象
driver = webdriver.Edge()
# 打开对应的页面
driver.get('https://cn.bing.com/')
driver.maximize_window()
driver.find_element(By.ID,'sb_form_q').send_keys('天气网')
driver.find_element(By.TAG_NAME,'svg').click()
time.sleep(2)
driver.get('http://www.weather.com.cn/')
driver.find_element(By.TAG_NAME,'h2').click()
# 判断元素的大小
time.sleep(2)
result = driver.find_element(By.CLASS_NAME,'picShowOne')
print(result.size)
# 获取元素的文本
result2= driver.find_element(By.TAG_NAME,'a')
print(result.text)
# 获取元素的属性
result3= driver.find_element(By.TAG_NAME,'a')
print(result3.get_attribute('class'))
# 睡眠几秒钟
time.sleep(2)
# 退出界面
driver.quit()
输出结果为:
说明:在Seleium中,将操作鼠标的方法封装在ActionChains类中
操作步骤:
首先实例化对象:
action= ActionChains(drivers)
然后使用方法:
#1. 通过selenium访问python 的官网
from selenium import webdriver
import time
from selenium.webdriver.common.by import By
# 导入包
from selenium.webdriver import ActionChains
# 打开对应的页面
#实例化浏览器对象
driver = webdriver.Edge()
driver.get('https://cn.bing.com/')
driver.maximize_window()
element = driver.find_element(By.ID,'sb_form')
#实例化ActionChains对象
action = ActionChains(driver)
# 调用右键
action.context_click(element)
# 执行
action.perform()
# 睡眠几秒钟
time.sleep(2)
# 退出界面
driver.quit()
实例:打开bing 界面,输入天气,暂停三秒,双击鼠标左键然后选中天气
打开bing 界面,输入天气,暂停三秒,双击鼠标左键然后选中天气
#1. 通过selenium访问python 的官网
from selenium import webdriver
import time
from selenium.webdriver.common.by import By
# 导入包
from selenium.webdriver import ActionChains
# 打开对应的页面
#实例化浏览器对象
driver = webdriver.Edge()
driver.get('https://cn.bing.com/')
driver.maximize_window()
element = driver.find_element(By.ID,'sb_form_q')
element.send_keys('天气')
time.sleep(3)
#实例化ActionChains对象
action = ActionChains(driver)
# 调用右键
action.double_click(element)
# 执行
action.perform()
# 睡眠几秒钟
time.sleep(2)
# 退出界面
driver.quit()
鼠标拖拽操作步骤
鼠标悬停操作:将鼠标悬停在搜索按钮上
#打开bing 界面,输入天气,暂停三秒,双击鼠标左键然后选中天气
#1. 通过selenium访问python 的官网
from selenium import webdriver
import time
from selenium.webdriver.common.by import By
# 导入包
from selenium.webdriver import ActionChains
# 打开对应的页面
#实例化浏览器对象
driver = webdriver.Edge()
driver.get('https://cn.bing.com/')
driver.maximize_window()
element = driver.find_element(By.ID,'sb_form_q')
element.send_keys('天气')
time.sleep(3)
#实例化ActionChains对象
action = ActionChains(driver)
element2 = driver.find_element(By.TAG_NAME,'svg')
# 鼠标悬停
action.move_to_element(element2)
# 执行
action.perform()
# 睡眠几秒钟
time.sleep(2)
# 退出界面
driver.quit()
- send_keys(Keys.BACK_SPACE) 删除键
- send_keys(Keys.SPACE) 空格键
- send_keys(Keys.TAB) 制表键
- send_keys(Keys.ESCAPE) 回退键
- send_keys(Keys.ENTEN) 回车键
- send_keys(Keys.CONTROL.‘a’) 全选键
- send_keys(Keys.CONTROL.‘c’) 复制
定位页面的时候如果没有找到,会在指定的时间内进行一直等待
网速慢,电脑配置低,服务器请求慢
- 隐式等待:
- 定位元素的时候,如果能够定位到则返回元素,如果不能定位到,则间隔一定的时 间进行等待,等待一定的时间后,还是没有找到元素的话就抛出没有找到元素异常现象。
- 使用方法: driver.implicitly_wait(timeout) :timeout:等待的最大时间
- 显式等待:
- 定位指定元素时,如果能定位到元素直接返回该元素,不触发等待,如果不能定位到该元素,则间隔一段时间后再去定位该元素,如果达到最大的时间长度还没有定位该元素,则抛出超时异常(TimeoutException)(时间短,与隐式的不同是:隐式只能控制等待时长,不能控制间隔时间,而显式能够控制间隔时间和等待时长)
- 实现方法:
- 导入相应的包 :
from selenium.webdriver.support.wait import webDriverWait
WebDriverWait(driver,timeout,poll_frequency=0.5)
- driver: 浏览器驱动对象
- timeout: 超时时长
- poll_frequency: 检测时间间隔
nutill(method)
直到----才element = WeDriverWait(driver,10 ,1 ).nutill(lambda x : x.find_element(By.ID,'userA'))
- 导入包: from selenuim.webdirver.suppport.select import Select
- 实例化对象
select = Select(element) :element表示选择的下拉框的元素
- 操作方法
select_by_index(index)
-----> 根据option索引来定位,从零开始select_by_value(value)
-----> 根据option 的value来定位,select_by_visible_text(text)
-----> 根据option 的文本来定位,
- alert.text() ----> 返回alert/confirm/prompt 中的文字信息
- alert.accept() ----> 接受对话框选项
- alert.dismiss() -----> 取消对话框选项
实例代码:
# 定位alert按钮
driver.find_element(By.ID,'alerta').click()
# 获取警告框
alert = driver.switch_to_alert
# 打印警告框文本
print(alert.text)
# 接受警告框
alert.accept()
# 取消警告框
alert.dismiss()
- 在Html 页面中,由于前端技术框架原因,页面元素为动态显示,元素根据滚动条的下拉而被加载.
- 页面注册同意条款,需要滚动条到最底层,才能点击同意
设置javascript脚本控制滚动条
js = ''window.scrollTo(0,10000)''
使用js代码的方法driver.execute_script(js)
frame切换,多窗口切换
1 , selenium 中没有对验证码的处理方式,
2. 去掉验证码:(测试环境下—采用)
3. 设置万能验证码: (生产环境下采用)
4. 验证码识别技术(用python-tesseract识别图形)
5. 记录cookie (通过记录cookie进行跳过登陆)
- cookie是web服务器生成的,并且保存在用户浏览器中的小文本文件,包含用户相关信息
- cookie数据格式:键值对组成形式
- cookie产生:客户端请求服务器,如果服务器需要记录改用户状态,就像客户端浏览器颁发cookie数据
- cookie使用:当浏览器再次请求网站时,浏览器将请求的数据和cookie数据一同提交给服务器,服务器检查cookie信息用来判断用户的状态
- 首次客户端发送请求——————>客户端
- 客户端发送响应和设置的cookie值---------->服务器
- 下次客户端发送请求和cookie值------------->服务器
- 客户端发送响应
客户端登陆账号后,将登陆状态相关的cookie信息发送给服务器保存,在发送请求,携带的cookie信息如果和服务器保留一致,则服务器认为客户端为登陆状态
操作步骤:百度————》网络——————》application ----->BDUSS(取其值和value)
方法:1.get_cookie(name) 获取指定的cookie
2. get_cookies() 获取网站上面的所有的本地的cookie
3. add_cookie(cookie_dict) 添加cookie