安装selenium
pip install selenium
selenium的脚本可以控制所有常见浏览器的操作,在使用之前,需要安装浏览器的驱动
这里使用的是Chrome浏览器
下载驱动及安装方法:
https://localprod.pandateacher.com/python-manuscript/crawler-html/chromedriver/ChromeDriver.html
设置浏览器引擎
from selenium import webdriver #从selenium库中调用webdriver模块
impot time
driver = webdriver.Chrome() # 设置引擎为Chrome,真实地打开一个Chrome浏览器
driver.get('https://h5.ele.me/login/#redirect=https%3A%2F%2Fwww.ele.me%2F') # 访问页面
time.sleep(2) #等待2秒让页面加载完
driver.close() # 关闭浏览器
解析与提取数据
driver是实例化浏览器会自动解析数据。
提取数据方法如下:
# 以下方法都可以从网页中提取出'你好,蜘蛛侠!'这段文字
find_element_by_tag_name:通过元素的名称选择
# 如<h1>你好,蜘蛛侠!</h1>
# 可以使用find_element_by_tag_name('h1')
find_element_by_class_name:通过元素的class属性选择
# 如<h1 class="title">你好,蜘蛛侠!</h1>
# 可以使用find_element_by_class_name('title')
find_element_by_id:通过元素的id选择
# 如<h1 id="title">你好,蜘蛛侠!</h1>
# 可以使用find_element_by_id('title')
find_element_by_name:通过元素的name属性选择
# 如<h1 name="hello">你好,蜘蛛侠!</h1>
# 可以使用find_element_by_name('hello')
#以下两个方法可以提取出超链接
find_element_by_link_text:通过链接文本获取超链接
# 如<a href="spidermen.html">你好,蜘蛛侠!</a>
# 可以使用find_element_by_link_text('你好,蜘蛛侠!')
find_element_by_partial_link_text:通过链接的部分文本获取超链接
# 如<a href="https://localprod.pandateacher.com/python-manuscript/hello-spiderman/">你好,蜘蛛侠!</a>
# 可以使用find_element_by_partial_link_text('你好')
提取出的数据属于WebElement类对象
WebElement类对象与Tag对象类似对比如下:
selenium所解析提取的,是Elements中的所有数据,而BeautifulSoup所解析的则只是Network中第0个请求的响应。
driver.page_source # 获取完整渲染的网页源代码,类型是str,可以和BeautifulSoup配合使用。
自动操作浏览器
.send_keys() # 模拟按键输入,自动填写表单
.click() # 点击元素
from selenium.webdriver.chrome.options import Options #引用模块
options = Options()
options.add_argument('--log-level=3') #放止报错ERROR:platform_sensor_reader_win.cc(244)] NOT IMPLEMENTED
driver = webdriver.Chrome(options = Options()) # 在引擎里添加配置
配置 | 作用 |
---|---|
chrome_options.add_argument(’–headless’) | # 无头模式 |
chrome_options.add_argument(’–disable-gpu’) | # 禁用GPU加速 |
chrome_options.add_argument(’–start-maximized’) | #浏览器最大化 |
chrome_options.add_argument(’–window-size=1280x1024’) | # 设置浏览器分辨率(窗口大小) |
chrome_options.add_argument(‘log-level=3’) | #防报错 |
chrome_options.add_argument(’–user-agent=""’) | # 设置请求头的User-Agent |
chrome_options.add_argument(’–disable-infobars’) | # 禁用浏览器正在被自动化程序控制的提示 |
chrome_options.add_argument(’–incognito’) | # 隐身模式(无痕模式) |
chrome_options.add_argument(’–hide-scrollbars’) | # 隐藏滚动条, 应对一些特殊页面 |
chrome_options.add_argument(’–disable-javascript’) | # 禁用javascript |
chrome_options.add_argument(’–blink-settings=imagesEnabled=false’) | # 不加载图片, 提升速度 |
chrome_options.add_argument(’–ignore-certificate-errors’) | # 禁用扩展插件并实现窗口最大化 |
更多地址:https://peter.sh/experiments/chromium-command-line-switches/
from selenium import webdriver
import time
from bs4 import BeautifulSoup
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument('--log-level=3')
driver = webdriver.Chrome(options = Options()) # 设置引擎为Chrome,真实地打开一个Chrome浏览器
driver.get('https://h5.ele.me/login/#redirect=https%3A%2F%2Fwww.ele.me%2F') # 访问页面
time.sleep(2)
tag=driver.find_elements_by_tag_name('input')[0]
nb=input('请输入手机号\n')
tag.send_keys('nb')
time.sleep(1)
yzm=driver.find_element_by_tag_name("button")
yzm.click()
c=input('请输入验证码\n')
code=driver.find_elements_by_tag_name('input')[1]
code.send_keys(c)
log=driver.find_element_by_class_name('SubmitButton-2wG4T')
log.click()
time.sleep(2)
st=driver.page_source # 获取完整渲染的网页源代码,类型是str,可以和BeautifulSoup配合使用。
bs=BeautifulSoup(st,'html.parser')
li=bs.find_all('div',class_="rstblock-content")
for i in li:
name=i.find('div').text
print(name)
driver.close()