selenium模块可以自动控制谷歌,火狐等浏览器,可以用于稳定爬虫,缺陷在于性能较差
from selenium import webdriver
#指定谷歌浏览器驱动程序路径
driver_path = r"D:\chromedriver_win32\chromedriver.exe"
#实例化一个谷歌浏览器驱动对象,传入参数为驱动程序路径
driver = webdriver.Chrome(executable_path=driver_path)
#驱动谷歌浏览器访问百度首页
driver.get("https://www.baidu.com/")
#打印访问页html源码
print(driver.page_source)
输出结果为百度首页html源码,并且会自动控制谷歌浏览器真正的去访问百度首页
driver.close() 关闭浏览器当前页面
driver.quit() 关闭整个浏览器
定位元素
- 根据id查找某个元素
input_tag = driver.find_element_by_id(“kw”)将查找到百度首页搜索输入框 - 根据name查找某个元素
input_tag = driver.find_element_by_name(“wd”)将查找到百度首页搜索输入框 - 根据class查找某个元素
input_tag = driver.find_element_by_class_name(“s_ipt”)将查找到百度首页搜索输入框 - 根据xpath语法查找元素
input_tag = driver.find_element_by_xpath("//input[@id=“kw”]")将查找到百度首页搜索输入框 - 根据css选择器查找元素
input_tag = driver.find_element_by_css_selector(".quickdelete-wrap > input")将查找到百度首页搜索输入框
注:find_element是获取符合条件的第一个元素,而find_elements是获取符合条件的全部元素,以列表返回
操作表单元素
- input_tag.send_keys(“python”) 将在表单中填充字符串"python"
- input_tag.clear()将情况表单中的字符串
- button = driver.find_element_by_id(“su”)
button.click() 将获取百度一下按钮,并点击该按钮 - 选中下拉列表
from selenium.webdriver.support.ui import Select
selectbtn = Select(driver.find_element_by_id(“下拉列表id”))
selectbtn.select_by_index(1)将获取到该下拉表单,并通过索引选中其第一项或通过值by_value()或可见文本by_visible_text()选中
selectbtn.deselect_all()将取消所有选中项
行为链
from selenium import webdriver
import time
from selenium.webdriver.common.action_chains import ActionChains
#指定谷歌浏览器驱动路径
driver_path = r"D:\chromedriver_win32\chromedriver.exe"
#实例化一个谷歌浏览器驱动对象
driver = webdriver.Chrome(executable_path=driver_path)
#访问百度首页
driver.get("https://www.baidu.com/")
#获取搜索框和百度一下按钮元素
input_tag = driver.find_element_by_id("kw")
submitBtn = driver.find_element_by_id("su")
#实例化一个行为链对象
actions = ActionChains(driver)
#鼠标移动到搜索框
actions.move_to_element(input_tag)
#发送文本到搜索框
actions.send_keys_to_element(input_tag, "python")
#鼠标移动到百度一下按钮
actions.move_to_element(submitBtn)
#点击按钮
actions.click(submitBtn)
#执行行为链
actions.perform()
cookie操作
#打印所有cookie信息
for cookie in driver.get_cookies():
print(cookie)
print("*" * 100)
#打印指定cookie信息
print(driver.get_cookie("PSTM"))
print("*" * 100)
#删除指定cookie信息
driver.delete_cookie("PSTM")
print(driver.get_cookie("PSTM"))
#删除全部cookie信息
driver.delete_all_cookies()
隐式等待
from selenium import webdriver
#指定谷歌浏览器驱动路径
driver_path = r"D:\chromedriver_win32\chromedriver.exe"
#实例化一个谷歌浏览器驱动对象
driver = webdriver.Chrome(executable_path=driver_path)
#访问豆瓣首页
driver.get("https://www.douban.com/")
#指定隐式等待20秒
driver.implicitly_wait(20)
ele_null = driver.find_element_by_id("不存在的id")
显式等待
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
#指定谷歌浏览器驱动路径
driver_path = r"D:\chromedriver_win32\chromedriver.exe"
#实例化一个谷歌浏览器驱动对象
driver = webdriver.Chrome(executable_path=driver_path)
#访问豆瓣首页
driver.get("https://www.douban.com/")
#显式等待10秒
WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "不存在的id"))
)
所谓隐式等待即在获取某个元素前指定浏览器强制等待一定时间
而显式等待即在获取某个元素时等待一定时间,但当获取到该元素时则立即停止等待
打开多窗口和切换窗口
from selenium import webdriver
driver_path = r"D:/chromedriver_win32/chromedriver.exe"
driver = webdriver.Chrome(driver_path)
driver.get("https://www.baidu.com")
#打开多窗口访问豆瓣首页
driver.execute_script("window.open('https://www.douban.com')")
#切换到豆瓣页的窗口上
driver.switch_to_window(driver.window_handles[1])
#打印当前窗口的url
print(driver.current_url)
输出结果为
https://www.douban.com/
Process finished with exit code 0
使用代理
from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_argument("--proxy-server=https://36.248.133.247:9999")
driver = webdriver.Chrome(executable_path=r"D:/chromedriver_win32/chromedriver.exe", chrome_options=options)
获取元素的属性
from selenium import webdriver
driver = webdriver.Chrome(executable_path=r"D:/chromedriver_win32/chromedriver.exe")
driver.get("http://www.baidu.com")
submit = driver.find_element_by_id("su")
print(submit.get_attribute("value"))
#获取元素的html代码
html = submit.get_attribute("outerHTML")
输出结果为
百度一下
Process finished with exit code 0
保存当前页面的截图
from selenium import webdriver
driver = webdriver.Chrome(executable_path=r"D:/chromedriver_win32/chromedriver.exe")
driver.get("http://www.baidu.com")
driver.save_screenshot("./data/baidu.png")
运行结果将在当前目录的data目录下保存一个名为baidu.png的截图文件