一、selenium的基本使用
加载网页
selenium通过控制浏览器,所以对应的获取的数据都是elements中的内容。例如
from selenium import webdriver
from selenium.webdriver.common.by import By
driver =webdriver.Chrome()
#.访问百度
driver.get("http://www.baidu.com/")
#.截图
driver.save_screenshot("baidu.png")
定位和操作。例如
#.搜索关键词
driver.find_element(By.ID,"kw").send_keys("杜卡迪") # send_keys() 给输入框赋值
#.点击ID为su的按钮
driver.find_element(By.ID,"su").click()
查看请求信息。例如
driver.page_source #.获取页面内容
driver.get_cookies()
driver.current_url
退出
driver.close() # 退出当前页面
driver.quit() # 退出浏览器
二、元素的定位方法
selenium的定位操作
△元素定位的两种写法
a) 直接调用型。例如
el = driver.find_element_by_xxx(value) # xxx 是定位方式;value为该方式下的值
b) 导入By类型。例如
from selenium.webdriver.common.by import By
driver.find_element(By.xxx,value) # xxx 是定位方式;value为该方式下的值
△元素定位的两种方式。
a) 精确定位一个element。例如
driver.find_element_by_xxx(value)
dirver.find_element(By.xxx,value)
b) 定位一组element。例如
driver.find_elements_by_xxx(value)
dirver.find_elements(By.xxx,value)
△元素定位的八种方法
a) By.ID使用id值定位。例如
el = driver.find_element_by_id()
el = driver.find_element(By.ID,' ')
b) By. XPATH使用xpath定位。例如
el = driver.find_element_by_xpath()
el = driver.find_element(By.XPATH,' ')
c) By.TAG_NAME使用标签定位。例如
el = driver.find_element_by_tag_name()
el = driver.find_element(By.TAG_NAME,' ')
d) By.LINK_TEXT使用链接文本定位。例如
el = driver.find_element_by_link_text()
el = driver.find_element(By.LINK_TEXT,' ')
e) By.PARTIAL_LINK_TEXT使用链接部分文本定位。例如
el = driver.find_element_by_partial_link_text()
el = driver.find_element(By.PARTIAL_LINK_TEXT,' ')
f) By.NAME使用name属性值定位。例如
el = driver.find_element_by_name()
el = driver.find_element(By.NAME,' ')
g) By.CLASS_NAME 使用class属性值定位。例如
el = driver.find_element_by_class_name()
el = driver.find_element(By.CLASS_NAME,' ')
h) By.CSS_SELECTOR使用css选择器定位。例如
el = driver.find_element_by_tag_name()
el = driver.find_element(By_TAG_NAME,' ')
△元素的操作 (以下假设el 是定位到的元素)
a) 从定位到的元素中获取数据。例如
el.get_attribute(key) # 获取key属性名对应的属性值
el.text # 获取el的文本
b) 对定位到的元素的操作。例如
el.click() # 对元素执行点击操作
el.submit() # 对元素执行提交操作
el.clear() # 对清空元素中的数据
el.send_keys(data) # 对可输入元素el你输入数据data
三、selenium的其它操作
a) 让浏览器在后台跑。例如
from selenium.webdriver import Chrome
from selenium.webdriver.chrome.options import Options
opt = Options()
opt.add_argument("--headless")
opt.add_argument("--disable-gpu")
opt.add_argument("--window--size = 4000,1600")
web = Chrome(options = opt)
b) selenium处理cookie
获取cookie
dictCookies = driver.get_cookies()
设置cookie
driver.add_cookie(dictCookies)
删除cookie
driver.delete_cookie("cookieName") # 删除一条cookie
driver.delete_all_cookies() # 删除所有的cookie
c) 页面等待
强制等待
import time
time.sleep(n) # 强制等待n秒
显式等待(自动化 web测试使用,爬虫基本不用)
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
WebDriverWait(driver,10,0.5).until(EC.presence_of_element_located((By.ID,"myDynamicElement"))
隐式等待
driver.implicitly_wait(n) # 在指定的n秒内每隔一段时间尝试定位元素。如果n秒结束后还未定位出来则报错
注意:显式等待,就是一直等待到元素出现才去操作,如果超时则报异常;隐式等待,为浏览器对象创建一个等待时间,如果得不到就等待一段时间,直到拿到某个元素位置。浏览器会在设置的时间段内不断刷新。
d)页面 switch_to 方法切换的操作
页面切换。通常结合 windows_handles 例如
#. 获取当前所有窗口
current_windows = driver.window_handles
#. 根据窗口索引进行切换
driver.switch_to.window(current_windows[1])
driver.switch_to.window(web.current_windows[-1]) #. 跳转到最后一个窗口
driver.switch_to.window(current_windows[0]) #. 回到第一个窗口
切换iframe 。selenium默认是访问不了iframe中内容的,对应的解决思路是
driver.switch_to.frame(name/el/id) #. 传入的参数可以使iframe对应的id值,也可以是用元素定位之后的元素对象
driver.switch_to.default_content() #. 切换到主框架
切换弹窗。例如
alter = driver.switch_to_alter()
页面其它操作。例如
driver.forward() #.前进
driver.back() #.后退
driver.refresh() #. 刷新
driver.close() #. 关闭当前窗口
driver.maximize_window() #. 最大化浏览器
e) 执行JavaScript脚本.例如
driver.execute_script("window.scrollTo(0,document.body.scrollHeight);")