selenium的使用
快速体验
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# 0. pip install selenium
# 下载对应的驱动chromedriver
# 安装对应的浏览器
import time
# 1. 导入模块
from selenium import webdriver
# 2. 创建浏览器对象
# 2.1> 指定驱动文件路径(推荐使用)
browser = webdriver.Chrome('./chromedriver')
# 2.2> 把驱动文件拷贝到 PATH 路径中
# browser = webdriver.Chrome()
# 3. 操作浏览
browser.get("https:/www.baidu.com")
# 获取输入元素对象
input_element = browser.find_element_by_id('kw')
# 输入内容
input_element.send_keys('itcast')
button = browser.find_element_by_id('su')
button.click()
time.sleep(1)
link = browser.find_element_by_class_name("favurl")
link.click()
time.sleep(5)
# 4. 浏览器退出
browser.quit()
基本操作
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# 0. pip install selenium
# 下载对应的驱动chromedriver
# 安装对应的浏览器
import time
# 1. 导入模块
from selenium import webdriver
# 2. 创建浏览器对象
# 2.1> 指定驱动文件路径(推荐使用)
browser = webdriver.Chrome('./chromedriver')
# 2.2> 把驱动文件拷贝到 PATH 路径中
# browser = webdriver.Chrome()
# 3. 操作浏览
browser.get("https:/www.baidu.com")
# 3.1> 定位元素
# find_element_xx 获取符合条件的第一个元素
# find_elements_xx 获取符合条件所有元素
'''
find_element(s)_by_class_name 通过 class name寻找元素
find_element(s)_by_id 通过ID寻找
find_element(s)_by_xpath 通过xpath寻找
find_element(s)_by_link_text 通过链接内容查找
find_element(s)_by_partial_link_text 通过链接内容中包含的内容查找(模糊查询)
find_element(s)_by_name 通过name查找
find_element(s)_by_css_selector 通过css样式选择器查找
find_element(s)_by_tag_name 通过标签名称查找
'''
# 注意find_element(s)_by_xpath,不支持直接获取元素内容和属性值,xpath只能获取元素对象
a_element = browser.find_element_by_xpath('//a[@class="mnav"]/@href')
# 3.2> 获取元素内容
print(a_element.text)
# 3.3> 获取属性
print(a_element.get_attribute("href"))
time.sleep(5)
# 4. 浏览器退出
browser.quit()
常用的方法
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# 0. pip install selenium
# 下载对应的驱动chromedriver
# 安装对应的浏览器
import time
from pprint import pprint
# 1. 导入模块
from selenium import webdriver
# 2. 创建浏览器对象
# 2.1> 指定驱动文件路径(推荐使用)
browser = webdriver.Chrome('./chromedriver')
# 2.2> 把驱动文件拷贝到 PATH 路径中
# browser = webdriver.Chrome()
# 3. 操作浏览
browser.get("http://baidu.com")
# 1. 获取selenium 网页源码
# page_source 是 获取js渲染后代码也就是网页中能看到的网页源码,Elements中的源码
print(browser.page_source)
# 2. 获取网页地址,当前最终的网页地址,获取得到这个网页所执行的url
print(browser.current_url)
# 3. 向百度输入框填充输入内容 send_keys
# browser.find_element('').send_keys("")
# 4. 获取cookies
pprint(browser.get_cookies())
print(browser.get_cookie("H_PS_PSSID"))
browser.delete_cookie()
# 5. 让浏览器执行js
browser.execute_script("input = document.getElementById('kw');input.style.border = '2px solid red';")
time.sleep(5)
# 4. 浏览器退出
browser.quit()
无界面设置
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# 0. pip install selenium
# 下载对应的驱动chromedriver
# 安装对应的浏览器
import time
from pprint import pprint
# 1. 导入模块
from selenium import webdriver
# 2. 创建浏览器对象
# 2.1> 指定驱动文件路径(推荐使用)
# chrome 无界面设置
options = webdriver.ChromeOptions()
# 设置无界面参数
options.add_argument('--headless') # 开启无界面模式
options.add_argument('--disable-gpu') # 禁用gpu,解决一些莫名的问题
browser = webdriver.Chrome('./chromedriver',chrome_options=options)
# 无界面浏览器 PhantomJS
# browser = webdriver.PhantomJS('./phantomjs')
# 2.2> 把驱动文件拷贝到 PATH 路径中
# browser = webdriver.Chrome()
# 3. 操作浏览
browser.get("http://baidu.com")
# 6. 截图
browser.save_screenshot('10-test.png')
time.sleep(5)
# 4. 浏览器退出
browser.quit()
跟换User-Agent
options = webdriver.ChromeOptions() # 创建配置对象
options.add_argument('--user-agent=UA内容') # 切换User-Agent
driver = webdriver.Chrome('驱动路径',chrome_options=options)
使用代理
options = webdriver.ChromeOptions() # 创建配置对象
options.add_argument('--proxy-server=代理服务器地址') # 设置代理
driver = webdriver.Chrome('驱动路径',chrome_options=options)
iframe切换
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# 0. pip install selenium
# 下载对应的驱动chromedriver
# 安装对应的浏览器
import time
# 1. 导入模块
from selenium import webdriver
# 2. 创建浏览器对象
# 2.1> 指定驱动文件路径(推荐使用)
browser = webdriver.Chrome('./chromedriver')
# 2.2> 把驱动文件拷贝到 PATH 路径中
# browser = webdriver.Chrome()
browser.get("http://books.czwblog.com/iframe1.html")
# 让浏览器切换到 iframe 上
# 获取 iframe 对象
iframe = browser.find_element_by_id("iframe2")
browser.switch_to.frame(iframe)
print(browser.page_source)
# 把 browser 切换会当前网页
browser.switch_to.default_content()
print(browser.page_source)
time.sleep(5)
# 4. 浏览器退出
browser.quit()
selenium显示等待,隐形等待,强制等待
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# 0. pip install selenium
# 下载对应的驱动chromedriver
# 安装对应的浏览器
import time
# 1. 导入模块
from selenium import webdriver
# 导入等待模块
from selenium.webdriver.support.wait import WebDriverWait
# 导入等待条件模块
from selenium.webdriver.support import expected_conditions as EC
# 导入搜索条件模块
from selenium.webdriver.common.by import By
# 2. 创建浏览器对象
# 2.1> 指定驱动文件路径(推荐使用)
browser = webdriver.Chrome('./chromedriver')
# 2.2> 把驱动文件拷贝到 PATH 路径中
# browser = webdriver.Chrome()
# 3. 操作浏览
browser.get("https:/www.baidu.com")
# 获取输入元素对象
input_element = browser.find_element_by_id('kw')
# 输入内容
input_element.send_keys('itcast')
button = browser.find_element_by_id('su')
button.click()
# 1. 强制等待
# time.sleep(1)
# 2. 隐性等待
# browser.implicitly_wait(3)
# 3. 显性等待
#创建等待对象
# 2个参数
# 第三个浏览器对象
# 第二个参数表示超时时间
# 第三个参数表示每个多少秒检测一次
wait = WebDriverWait(browser,10,0.5)
# EC.presence_of_element_located((查询元素条件,查询参数)) 检测元素是否存在,
# EC.visibility_of_element_located 检测元素是否可见
link = wait.until(EC.presence_of_element_located((By.CLASS_NAME,"favurl")))
link.click()
time.sleep(5)
# 4. 浏览器退出
browser.quit()
案例练习-斗鱼爬虫
#!/usr/bin/python3
# -*- coding: utf-8 -*-
from selenium import webdriver
import time
browser = webdriver.Chrome('./chromedriver')
browser.get("https://www.douyu.com/directory/all")
while True:
time.sleep(1)
# 获取房间元素列表
li_elements = browser.find_elements_by_xpath('//ul[@id="live-list-contentbox"]/li')
for li_element in li_elements:
item = {}
item["room_name"] = li_element.find_element_by_class_name("ellipsis").text
item["author"] = li_element.find_element_by_css_selector(".dy-name.ellipsis.fl").text
item["src"] = li_element.find_element_by_class_name("JS_listthumb").get_attribute("data-original")
print(item)
# 获取下一页
try:
next_url_element = browser.find_element_by_link_text('下一页')
next_url_element.click()
except:
break
time.sleep(3)
browser.quit()
浙公网安备 33010602011771号