selenium模块,浏览器自动化
1、简介
selenium是基于浏览器自动化的一个模块
selenium模块和爬虫之间的关联
- 便捷的获取网站中动态加载的数据
- 便捷实现模拟登陆
2、使用
selenium环境安装
pip3 install selenium
下载一个浏览器的驱动程序
https://chromedriver.storage.googleapis.com/index.html
http://npm.taobao.org/mirrors/chromedriver/
任意一个网站,根据浏览器版本选择
然后就可以使用selenium实例化一个浏览器对象,
from selenium import webdriver
bro = webdriver.Chrome(executable_path='./chromedriver')
运行之后会打开一个浏览器窗口,提示Chrome正受到自动测试软件的控制。
#!/usr/bin/env python3
# -*- coding:utf8 -*-
from selenium import webdriver
from lxml import etree
bro = webdriver.Chrome(executable_path='./chromedriver')
bro.get('http://scxk.nmpa.gov.cn:81/xk/')
page_text = bro.page_source
tree = etree.HTML(page_text)
li_list = tree.xpath('//ul[@id="gzlist"]/li')
names = []
for li in li_list:
name = li.xpath('./dl/@title')[0]
names.append(name)
print(names)
# 关闭浏览器
bro.quit()
3、其他常用操作
Demo:
from selenium import webdriver
from lxml import etree
import time
bro = webdriver.Chrome(executable_path='./chromedriver')
bro.get('https://www.taobao.com/')
# 标签定位 定位淘宝的搜索框
search_input = bro.find_element_by_id('q')
# 标签交互 给搜索框赋值
search_input.send_keys('mac')
# 执行js代码
bro.execute_script('alert(1)')
# 点击搜索按钮
btn = bro.find_element_by_class_name('btn-search')
btn.click()
time.sleep(5)
bro.quit()
3.1 标签定位的方法
bro.find_element_by_class_name()
bro.find_element_by_id()
bro.find_element_by_xpath()
bro.find_element_by_css_selector()
bro.find_element_by_link_text()
bro.find_element_by_name()
bro.find_element()
bro.find_element_by_tag_name()
3.2 执行js代码
如demo:
bro.execute_script('alert(1)')
# 里面可以放任意的js代码
3.3 执行事件
如demo:
btn.click()
也可以通过js代码执行
# 滚动一屏的高度
bro.execute_script('window.scrollTo(0, document.body.scrollHeight)')
# 可以执行一些其他的事件 如:回退
bro.back()
# 前进
bro.forward()
# 关闭浏览器
bro.quit()
3.4 iframe处理
页面中也嵌套的iframe就会找不到,需要切换浏览器标签定位的作用域
bro.switch_to.frame('iframeID')
3.5 动作链
一系列的连续动作
# 引入对应的模块
from selenium.webdriver import ActionChains
bro = webdriver.Chrome(executable_path='./chromedriver')
div = bro.find_element_by_id('divid')
# 动作链
action = ActionChains(bro)
# 点击且长按
action.click_and_hold(div)
# 拖动
for i in range(5):
action.move_by_offset(20,0).perform()
sleep(0.3)
# 释放动作链
action.release()
bro.quit()
4、无头浏览器
把浏览器弹窗取消,但是动作照常执行。
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
bro = webdriver.Chrome(executable_path='./chromedriver',chrome_options=chrome_options )
5、规避监测
from selenium.webdriver import ChromeOptions
option = ChromeOptions()
option.add_experimental_option('excludeSwitches', ['enable-automation'])
bro = webdriver.Chrome(executable_path='./chromedriver', options=option )