一、安装相关包和软件
1、安装Selenium包
Pip3 install Selenium
2、安装chromedriver
访问chromedriver镜像站,下载对应版本的chromedriver,例如我的浏览器版本为
安装的的chromdriver为v2.38(其支持的浏览器版本为v65-67,在其支持范围内,下载后将其加入系统环境变量)
3、对之前的安装进行测试
执行以下代码,如果能正确弹出chrome浏览器窗口,则正常(不正常的情况下重点检查chromedriver版本)
from selenium import webdriver
browser=webdriver.Chrome()
二、Selenium的相关功能
1、初始化
from selenium import webdriver
browser=webdriver.Chrome()
该代码完成了浏览器对象的初始化,调用了Chrome浏览器(Selenium同样支持其他浏览器,如browser=webdriver.Firefox(),browser=webdriver.Safari())
2、访问页面
browser.get('https://www.baidu.com') #执行了打开百度网页操作
print(browser.page_source) #输出了网页源代码
Browser.close()#关闭了浏览器
3、查找节点
这里以淘宝网为例,查看淘宝首页源码
发现淘宝首页搜索框部分的id和name均为q
from selenium import webdriver
browser=webdriver.Chrome()
browser.get('https://www.taobao.com') #打开淘宝网页
input_first=browser.find_element_by_id('q') #根据id进行选择
input_second=browser.find_element_by_css_selector('#q') #根据css选择器进行选择
input_third=browser.find_element_by_xpath('//*[@id="q"]') #Xpath进行获取
print(input_first)
print(input_second)
print(input_third)
browser.close()
执行以上代码,输出结果为
三种方式结果完全相同
4、简单交互
From selenium import webdriver
Import time
browser=webdriver.Chrome()
browser.get('https://www.taobao.com') #打开淘宝
input=browser.find_element_by_id('q') #找到id为q的节点,也就是搜索框
input.send_keys('Ipad') #输入ipad
time.sleep(1) #暂停1秒
input.clear() #清空之前输入的内容
input.send_keys('MI6') #输入MI 6
button=browser.find_element_by_class_name('btn-search') #找到搜索按钮
button.click() #点击搜索
以上代码中包含了输入,清空内容,点击三种常用动作
5、执行JavaScript
使用execute_script()方法可以执行JavaScript,从而实现API没有实现的功能
例如以下代码
from selenium import webdriver
Import time
browser=webdriver.Chrome()
url=('https://www.zhihu.com/explore')
browser.get(url)
time.sleep(3)
browser.execute_script('window.scrollTo(0,document.body.scrollHeight)')
browser.execute_script('alert("ToBottom")')
该代码打开了知乎的explore页面,并且调用JavaScript语句window.scrollTo(0,document.body.scrollHeight)翻页到页面最底部,
然后调用alert("ToBottom")输出To Bottom
6、获取节点信息(需要选选中节点)
获取属性(get_attribute())
Test= browser.find_element_by_id('p') #选中了id为P的节点
Print(test.get_attribute('class')) #输出该节点的class
获取文本(.text),获取id(.id),获取位置(.location),获取标签名(.tag_name),获取大小(.size)
Test= browser.find_element_by_id('p') #选中了id为P的节点
Print(test.text)
7、延时等待(等待网页加载出想要的内容,免得网速太慢跟不上节奏)
隐式等待(implicitly_wait())——如果没有想要找的节点,等待固定长的一段时间,时间完了再查找
from selenium import webdriver
browser=webdriver.Chrome()
browser.implicitly_wait(5)
browser.get('https://www.zhihu.com/explore')
input=browser.find_element_by_class_name('zu-top-question')
print(input)
隐式等待5秒,五秒后没找到报错
显式等待——指定最长时间,该时间内找到就返回值,到了最长时间仍没有找到就报错
代码略
8、前进和后退
访问多个网页时,使用back()方法后退,forward()方法前进
from selenium import webdriver
browser=webdriver.Chrome()
browser.get('https://www.zhihu.com')
browser.get('https://www.mi.com')
browser.get('http://www.taobao.com')
browser.back()
browser.forward()
9、对cookie操作
from selenium import webdriver
browser=webdriver.Chrome()
browser.get('https://www.zhihu.com/explore')
print(browser.get_cookies()) #获取cookie值
browser.add_cookie({'name':'test','domain':'www.zhihu.com','value':'germey'}) #添加cookie
print(browser.get_cookies())
browser.delete_all_cookies() #删除所有cookie
print(browser.get_cookies())
8、对选项卡进行操作
import time
from selenium import webdriver
browser=webdriver.Chrome()
browser.get('https://www.baidu.com')
browser.execute_script('window.open()') #调用JavaScript打开新窗口
print(browser.window_handles) #输出选项卡序号
browser.switch_to_window(browser.window_handles[1]) #切换到标号为1的选项卡(也即是第二个创建的)
browser.get('https://www.taobao.com')
time.sleep(1)
browser.switch_to_window(browser.window_handles[0]) #切换到编号为1的选项卡(第一个打开的选项卡)
browser.get('https://www.zhihu.com')
ps:本文为《python3网络爬虫实战》学习笔记,原作者崔庆才,文中多处代码为该作者书中提供,侵删
代码为python3编写,注意与python区别。笔记采用OneNote记录,部分地方有首字母自动大写,可能漏掉修改,注意区别
联系方式:[email protected]