一、为什么要使用selenium
1-1、什么是selenium?
1、Selenium最初是一个Web的自动化测试工具,开始是为了网站的自动化测试开发的。
2、它可以按照指定的命令自动操作。可以直接运行在浏览器上,支持所有的主流浏览器。
1-2、它的优点?
1、直观简单,可以直接模拟用户的行为
2、可以根据我们的指令,让浏览器自动加载页面获取需要的数据,方便。
3、可以与scrapy结合,scrapy是强大的静态网页爬取库。
4、多种web-driver支持。支持众多浏览器
1-3、它的缺点?
1、自己不带浏览器,不支持浏览器功能,需要与第三方浏览器结合才能一起使用。
2、容易崩溃。
3、容易被发现。
二、配置、操作selenium的方法
2-1、安装selenium的前置操作
1、因为selenium不带浏览器,所以需要首先安装浏览器,这里以谷歌浏览器为例。
2、下载安装谷歌浏览器,以及对应版本的驱动器ChromeDriver,并且配置好环境变量。
3、浏览器直接搜索https:
4、查看版本方式 打开谷歌浏览器点击右上角三点-》帮助-》关于Google Chrome
5、配置环境变量:我的电脑-》属性-》高级系统设置-》环境变量-》系统变量-》找到Path-》编辑-》新建-》将谷歌的文件Application路径加入,我的是在(C:\Users\My PC\AppData\Local\Google\Chrome\Application)
6、注意将ChromeDriver安装到python安装的根目录。
2-2、安装selenium并且测试是否安装成功。
# 使用命令安装
# 这里使用镜像源下载可以快很多
pip install selenium -i https:
# 在pycharm中进行测试
from selenium import webdriver
driver = webdriver.Chrome()
driver.maximize_window()
driver.get('http://www.baidu.com')
# 如果成功打开链接,则代表配置完成。
三、selenium基本API
import time
from selenium import webdriver
import selenium
from selenium.webdriver.common.by import By
# from selenium.webdriver import ChromeOptions
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
def practice():
""""
selenium 的常用操作
"""
# 1、打开浏览器
driver = webdriver.Chrome()
# 2、最大化浏览器窗口
driver.maximize_window()
# 设置浏览器大小
# driver.set_window_size(800,600)
# 3、打开百度网页
driver.get('http://www.baidu.com')
# 设置停留时间
time.sleep(5)
driver.get('https://www.csdn.net/')
time.sleep(2)
# 退回到上一个网页——百度
driver.back()
time.sleep(2)
# 前进到网页csdn
driver.forward()
time.sleep(2)
# 页面刷新
driver.refresh()
# 4、关闭浏览器
# driver.close()
# 5、网页元素定位
# selenium提供了8种网页元素定位的方式
# 根据ID定位,加s是寻找多节点,其他方式类似,多节点的话,需要使用for循环来遍历每一个节点
# find_element_by_id()
# find_elements_by_id()
# 根据class定位
# find_elements_by_class_name()
# 根据标签名定位
# find_elements_by_tag_name()
# 根据CSS选择器定位
# find_element_by_css_selector()
# 根据name定位
# find_elements_by_name()
# 根据XPath定位
# find_element_by_xpath()
# 根据链接文本定位
# find_element_by_link_text()
# 根据部分链接文本定位
# find_element_by_partial_link_text()
# 获取到元素之后,一些常用属性, 调用一些常用属性
# get_attribute 获取属性值
# text 获取文本值
# id 获取节点id
# location 获取节点在页面中的相对位置
# tag_name 获取标签名称
# size 获取节点大小(宽和高)
# 注意:现在的版本上述方法已经弃用,现在统统使用新方法替代
# 需要首先导入方法
from selenium.webdriver.common.by import By
# 使用By来调用具体使用哪个方法,第二个参数是所要搜索的标签。
driver.find_element(By.ID, 'q')
# 6、获取网页源码
# driver.page_source
# 7、打印url
# driver.current_url
# 8、打印cookie
# driver.get_cookies()
# # 防止被网站识别
# # 需要首先进行设置
# chrome_options = Options()
# chrome_options.add_experimental_option('excludeSwitches', ['enable-automation'])
# browser = webdriver.Chrome(chrome_options=chrome_options)
# 其他方法:
# 将进度条下拉到最底部
# driver.execute_script("window.scrollTo(0,document.body.scrollHeight)")
# 弹出alert提示窗
# driver.execute_script("alert('hello word')")
# 加入隐式等待,防止网页崩溃
# driver.implicitly_wait(3)
四、selenium爬取动态网页小项目
4-1、打开简书并且搜索内容
def jianshu():
"""
以打开简书为例,分析定位, 输入搜索内容:东南亚的Paul
:return:
"""
browers = webdriver.Chrome()
browers.maximize_window()
browers.get("http://www.jianshu.com")
# send_keys()表示向目标元素中输入数据,click()表示点击操作
# 其他方法:clear(): 文字清空
# 弃用方法
# browers.find_element_by_id('q').send_keys('东南亚的Paul')
browers.find_element(By.ID, 'q').send_keys('东南亚的Paul')
time.sleep(2)
# 弃用方法
# link = browers.find_element_by_class_name('search-btn').click()
browers.find_element(By.CLASS_NAME, 'search-btn').click()
time.sleep(2)
# 窗口切换:当我们点击按钮跳转到新页面的时候,我们是无法操作的,比如说获取url
# 获取网页源代码都是做不到的,所以我们需要切换窗口!
# 获取所有页面,至今为止的所有跳转页面都在一个列表里,通过browers.window_handles
# 来获取到这个列表
print(browers.window_handles)
# 跳转到指定window页面,参数为所要切换到的窗口
# browers.switch_to.window(browers.window_handles[1])
# print(browers.current_url)
# 根据获取到的源码来进行进一步的操作。
更多爬虫基础内容请查看我的另一篇文章——爬虫基础项目从入门到实战.
参考文章: selenium安装—谷歌(from selenium import webdriver报错). b站视频(【爬虫入门】selenium爬取动态网页,以及常见的问题). Selenium详细介绍(推荐)——Selenium浏览器自动化测试框架 . CSDN文档. 官方文档.
爬虫selenium:selenium基本操作 . 基于selenium实现爬虫 .
总结
|