一、Selenium基础
1.Selenium简介
Selenium是一个用于测试网站的自动化测试工具,支持各种浏览器包括Chrome、Firefox、Safari等主流界面浏览器,同时也支持phantomJS无界面浏览器。
2、安装selenium
pip install selenium
3、安装浏览器驱动
Selenium3.x调用浏览器必须有一个webdriver驱动文件
Chrome
淘宝镜像: https://npm.taobao.org/mirrors/chromedriver
不同的Chrome的版本对应的chromedriver.exe 版本也不一样,下载时不要搞错了。如果是最新的Chrome, 下载最新的chromedriver.exe 就可以了。
把chromedriver的路径也加到环境变量里。
Firefox
Firefox驱动下载地址为: https://github.com/mozilla/geckodriver/releases
根据自己的操作系统下载对应的驱动即可,使用的话,需要把驱动的路径和火狐浏览器的路径加入到环境变量里面才可以
IE
IE浏览器驱动下载地址为: http://selenium-release.storage.googleapis.com/index.html
二、Selenium入门–基本使用
1.导入相关模块
from selenium import webdriver
2.获取浏览器对象
driver=webdriver.Firefox() #该行代码将会打开火狐浏览器
3.打开指定网址的网页
driver.get(url="http://www.baidu.com") #该行代码将会自动打开百度首页
4、获取浏览器对象
driver=webdriver.Chrome() driver.maximize_window() #设置浏览器大小 最大化
三、元素定位的八种方式
定位元素在爬虫领域十分常用并重要,因此掌握基本的定位知识会帮你大大降低学习爬虫的难度,selenium在定位元素方面提供了八种定位方式:
定位单个元素 | 定位多个元素(以列表形式返回) | 含义 |
find_element_by_id | find_elements_by_id | 通过元素id定位 |
find_element_by_name | find_elements_by_name | 通过元素name定位 |
find_element_by_xpath | find_elements_by_xpath | 通过xpath表达式定位 |
find_element_by_link_text | find_elements_by_link_text | 通过完整文本值定位 |
find_element_by_partial_link_text | find_elements_by_partial_link_text | 通过部分文本值定位 |
find_element_by_tag_name | find_elements_by_tag_name | 通过标签定位 |
find_element_by_class_name | find_elements_by_class_name | 通过类名进行定位 |
find_elements_by_css_selector | find_elements_by_css_selector | 通过css选择器进行定位 |
注:F12大法好!!!!!
四、控制浏览器
方法 | 说明 |
set_window_size() | 设置浏览器的大小 |
back() | 控制浏览器后退 |
forward() | 控制浏览器前进 |
refresh() | 刷新当前页面 |
clear() | 清除文本 |
send_keys (value) | 模拟按键输入 |
click() | 单击元素 |
submit() | 用于提交表单 |
get_attribute(name) | 获取元素属性值 |
is_displayed() | 设置该元素是否用户可见 |
size | 返回元素的尺寸 |
text | 获取元素的文本 |
from selenium import webdriver driver=webdriver.Chrome()# 获取Chrome浏览器对象 #driver=webdriver.Firefox() 获取火狐浏览器对象 driver.set_window_size(300,300) #设置窗口大小为300px*300px time.sleep(2) #睡2秒,防止加载速度跟不上代码执行速度而报错 user=driver.find_element_by_xpath('//*[@id="TANGRAM__PSP_11__userName"]') user.send_keys("想要输入的内容") denglu=driver.find_element_by_xpath('//*[@id="s-top-loginbtn"]') #通过xpath定位到登录按钮,用denglu接收元素对象 denglu.click() #进行对登录按钮的点击
五、窗口与irame切换
方法 | 说明 |
current_window_handle | 获得当前窗口句柄 |
window_handles | 返回所有窗口的句柄到当前会话 |
switch_to.window() | 用于切换到相应的窗口,与上一节的switch_to.frame()类似,前者用于不同窗口的切换,后者用于不同表单之间的切换。 |
1.获取当前窗口句柄使用属性:current_window_handle
2.返回所有窗口的句柄使用属性:window_handles
3.切换窗口使用属性:switch_to.window()
from selenium import webdriver from selenium.webdriver.common.keys import Keys import time driver=webdriver.Chrome() #获取浏览器对象 driver.get("http://www.baidu.com") #加载百度首页 time.sleep(2) #睡眠两秒 print(driver.current_window_handle) #打印当前窗口句柄 input=driver.find_element_by_xpath('//*[@id="kw"]')#定位百度搜索框 time.sleep(1) input.send_keys("python爬虫") #搜索框输入内容 time.sleep(1) driver.find_element_by_xpath('//*[@id="su"]').click()#定位百度一下按钮进行点击搜索 time.sleep(1) driver.find_element_by_xpath('//*[@id="2"]/h3/a').click()#定位并点击链接 print(driver.current_window_handle)#打印当前窗口句柄比对上一次 print(driver.window_handles) #打印当前全部窗口句柄,两个 driver.switch_to.window(driver.window_handles[-1])#切换到最后一个窗口,因为就两个窗口 print(driver.current_window_handle)#打印切换后的当前窗口句柄
六、番外篇之截图
网页截图(或指定元素截图)
方法 | 说明 |
get_screenshot_as_file(self, filename) | 用于截取当前窗口,并把图片保存到本地 |
screenshot(self,filename) | 用于指定元素截图,并保存到本地 |
关闭网页(单个和多个)
方法 | 说明 |
close() | 关闭单个窗口 |
quit() | 关闭所有窗口 |
from selenium import webdriver import time driver=webdriver.Chrome() driver.get("http://baidu.com") time.sleep(1) driver.get_screenshot_as_file("bd.png")#截取当前窗口 time.sleep(1) bd=driver.find_element_by_xpath('//*[@id="lg"]/map/area')#定位元素 time.sleep(1) bd.screenshot("bd1.png") #截取bd元素图像png格式