在学习爬虫的时候,我接触了selenium,发现其强大功能,可以模拟真实情况操纵浏览器,其实也是相当于一个第三方的包。
selenium十分好用 特别在面对一些有针对反爬虫设计的网站时,能达到用时间换数据的效果
安装
在控制台下用PIP操作可以下载,不过在使用的时候要多下载一个webdriver的,我是用的是Chorme浏览器70版本,所以下载的是对应的chormedriver2.43版本,具体的对照关系可以参照chromedriver与镀铬对应的表关系这篇博客。将webdriver的下载解压并将其目录放入环境变量路径中后,就可以方便的使用硒了。下载地址可以去http://npm.taobao.org/mirrors/chromedriver/
操作
打开浏览器并得到返回结果,在3秒后关闭
注意要用qiut()而不是靠近()不然有可能关闭不完全造成下一次打开错误。
from selenium import webdriver
#用来控制操作的时间
import time
# selenium访问页面
# 创建浏览器对象
browser = webdriver.Chrome()
# 发起请求
browser.get('https://www.taobao.com')
# 获取返回结果
#当前网址
print(browser.current_url)
#网址内资源
print(browser.page_source)
time.sleep(3)
# 关闭浏览器
browser.quit()
获取节点属性
from selenium import webdriver
import time
browser = webdriver.Chrome()
browser.get('https://www.zhihu.com/explore')
logo = browser.find_element_by_id('zh-top-link-logo')
print(logo)
# 获取节点属性值
print(logo.get_attribute('class'))
print(logo.get_attribute('href'))
btn = browser.find_element_by_class_name('zu-top-search-button')
# 获取文本值
print(btn.text)
time.sleep(5)
browser.quit()
节点交互页面操作
from selenium import webdriver
import time
browser = webdriver.Chrome()
browser.get('https://www.taobao.com')
# 节点交互
# 找到input输入框
input_first = browser.find_element_by_id('q')
# 输入要查询的关键字
input_first.send_keys('小米')
time.sleep(2)
# 清空输入框
input_first.clear()
input_first.send_keys('华为')
# 找到查询按钮
button = browser.find_element_by_class_name('btn-search')
# 点击查询
button.click()
time.sleep(3)
browser.quit()
有些元素需要一段时间才会加载出来因此有隐式等待和显式等待两种方式
## 延时等待
#使用selenium去请求网页获取资源的时候,可能会有些ajax请求资源还没有返回,这时候需要等待一段时间,等待页面完全加载。
### 隐式等待
#使用隐式等待,如果浏览器没有找到DOM节点,会等待一段时间,再去查找节点,超出时间会抛出异常。
from selenium import webdriver
browser = webdriver.Chrome()
# 隐式等待
browser.implicitly_wait(10)
browser.get('https://www.zhihu.com/explore')
logo = browser.find_element_by_id('zh-top-link-logo')
print(logo)
browser.quit()
### 显式等待
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
browser = webdriver.Chrome()
browser.get('https://www.taobao.com')
# 创建一个wait对象,指定最长等待时间是10秒
wait = WebDriverWait(browser,10)
# expected_conditions EC是指的等待的条件对象
# presence_of_element_located 指等待指定节点加载出来
# element_to_be_clickable 指等待节点可点击
in_put = wait.until(EC.presence_of_element_located((By.ID,'q')))
btn = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,'.btn-search')))
print(in_put.tag_name) # input
print(btn.tag_name) # button
browser.quit()