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()

  

posted @ 2018-11-21 14:45  醉梦小子  阅读(175)  评论(0)    收藏  举报