selenium phantomjs/Chrome
selenium
web自动测试化工具
Anaconda Prompt >>>conda install selenium
phantomjs
无界面浏览器
把网站在内存进行页面加载
chromedrive
https://chromedriver.storage.googleapis.com/index.html
selenium使用
from selenium import webdriver
from selenium import webdriver
# 创建phantom.js浏览器对象
driver = webdriver.PhantomJS()
# 用get发送请求
driver.get('http://www.baidu.com/')
# 获取响应内容
print(driver.page_source)
# 获取屏幕截图
driver.save_screenshot('百度.png')
# 关闭浏览器
driver.quit()
常用方法
driver.get(url) | 发送请求 |
---|---|
driver.page_source | 获取响应的html |
driver.page_source.find(‘字符串’) | 从html源码中搜索指定的字符串(返回-1表示未找到内容) |
节点对象.send_keys(‘内容’) | 发送到搜索框 |
节点对象.click() | 模拟点击 |
driver.quit() | 退出浏览器 |
driver.execute_script(‘window.scrollTo(0,document.body.scrollHeight)’) | 把下拉菜单拉到最底部 |
单元素查找
driver.find_element_by_id(‘’)
driver.find_element_by_name(‘’)
driver.find_element_by_class_name(‘’)
driver.find_element_by_xpath('')
多元素查找
driver.find_elements_by_id(‘’)
driver.find_elements_by_name(‘’)
driver.find_elements_by_class_name(‘’)
driver.find_elements_by_xpath('')
返回节点对象的列表
from selenium import webdriver
import time
# 创建phantom.js浏览器对象
driver = webdriver.PhantomJS()
# 打开百度
driver.get('http://www.baidu.com/')
# 接受终端输入内容发送到搜索框
key = input('search >>>')
kw = driver.find_element_by_id('kw')
kw.send_keys(key)
# 点击百度一下
su = driver.find_element_by_id('su')
su.click()
time.sleep(1)
# 获取屏幕截图
driver.save_screenshot('百度.png')
# 关闭浏览器
driver.quit()
chromedriver设置无界面模式
opt = webdriver.ChromeOptins()
opt.set_headless()
driver = webdriver.Chrome(options=opt)
例子-京东商品信息
from selenium import webdriver
import time
import csv
# 创建浏览器对象
driver = webdriver.Chrome()
# 向京东首页发请求
driver.get('https://www.jd.com/')
# 发送文字到搜索框
key = input('请输入商品:')
driver.find_element_by_class_name('text').send_keys(key)
# 点击搜索按钮
driver.find_element_by_class_name('button').click()
time.sleep(2)
n = 1
# while True:
for i in range(3):
# 执行JS脚本,进度条拉到最下面
driver.execute_script(
'window.scrollTo(0,document.body.scrollHeight)'
)
# 给页面加载留出时间
time.sleep(3)
# 基准xpath,每个商品的节点对象列表
rList = driver.find_elements_by_xpath('//div[@id="J_goodsList"]/ul/li')
for r in rList:
info = r.text.split('\n')
# ¥52.80
# Python编程从入门到实践python3.0绝技核心编程基础教程网络爬虫入门书籍
# 500 + 条评价
# 润知天下图书专营店
price = info[0]
if info[1] != '拍拍':
name = info[1]
commit = info[2]
market = info[3]
else:
name = info[2]
commit = info[3]
market = info[4]
L = [price, commit, market, name]
# 存入csv文件
with open('京东.csv','a',newline='',encoding='gb18030') as f:
writer = csv.writer(f)
writer.writerow(L)
print('第%d页爬取成功' % n)
n += 1
# 点击下一页
if driver.page_source.find('pn-next disabled') == -1:
driver.find_element_by_class_name('pn-next').click()
time.sleep(2)
else:
break
博主个人能力有限,错误在所难免.
如发现错误请不要吝啬,发邮件给博主更正内容,在此提前鸣谢.
Email: JentChang@163.com (来信请注明文章标题,如果附带链接就更方便了)
你也可以在下方的留言板留下你宝贵的意见.