没有driver.quit()函数,程序执行完,浏览器页会自动关闭
问题描述:
没有driver.quit()函数,程序执行完,浏览器页会自动关闭,这是为什么?


相关代码:
# coding: utf-8
'''
1、需求:抓取订单列表中的订单信息
每条订单包含:id 订单号 单品数量 总价格 状态
每页多条订单数据,共279页数据
2、实现方式:
1)登录http://sleeve.talelin.com/#/login (该url已包含账号密码,不用再设置输入)
2)打开订单列表http://sleeve.talelin.com/#/statics/order/list
3)抓取当前页数据,存入mongoDB,并点击下一页
4)重复3)操作,直到最后一页
'''
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
from selenium.webdriver.chrome.options import Options
from pymongo import MongoClient
from lxml import etree
class CrawlProject(object):
def __init__(self, chrome_options):
self.driver = webdriver.Chrome(options=chrome_options)
self.driver.maximize_window()
myclient = MongoClient(host='192.168.0.188', port=27017)
myclient.admin.authenticate('root', 'root')
mydb = myclient['db_order']
self.mycollection = mydb['order_info']
def login(self, url):
'''
登录http://sleeve.talelin.com/#/login
:return:
'''
print('登录系统:{}'.format(url))
# 打开登录页面
self.driver.get(url)
# 判断登录表单是否加载完毕,若加载完毕则进行登录操作
if WebDriverWait(self.driver, 5, 0.5).until(EC.presence_of_element_located((By.CLASS_NAME, 'login-form'))):
self.driver.find_element(By.XPATH, "//button[@class='submit-btn']").click()
# 检查是否登录成功,并输出提示信息
if WebDriverWait(self.driver, 5, 0.5).until(EC.presence_of_element_located((By.CLASS_NAME, 'welcome'))):
print('登录成功')
return True
else:
print('登录失败')
return False
def crawl_order_info(self, url):
'''
抓取订单数据
:param url:订单页面URL
:return:无返回值,将数据直接写入mongoDB
'''
print('开始抓取数据')
self.driver.get(url)
# 循环执行翻页抓取,直到最后一页
while True:
# 判断是否进入订单列表页面,若进入则进行数据抓取
if WebDriverWait(self.driver, 5, 0.5).until(EC.presence_of_element_located((By.XPATH,"//div[@class='title']"))):
# 抓取当前页数据
self.parse_html(self.driver.page_source)
# 翻页
self.driver.find_element(By.XPATH, "//button[@class='btn-next']").click()
# 判断是否到最后一页,到的话,退出循环
if self.driver.find_element(By.XPATH,"//button[@class='btn-next']").get_attribute('disabled'):
break
# self.driver.quit()
def parse_html(self, content):
'''
解析网页数据
:param content:网页源代码
:return:
'''
html = etree.HTML(content)
orders_info = html.xpath("//tr[@class='el-table__row']")
for item in orders_info:
data={
'id':''.join(item.xpath('./td[1]/div/text()')),
'order_num':''.join(item.xpath('./td[2]/div/text()')),
'number':''.join(item.xpath('./td[3]/div/text()')),
'total_price':''.join(item.xpath('./td[4]/div/text()')),
'status':''.join(item.xpath('./td[5]//span/text()'))
}
# 将结果插入到mongoDB中
# self.mycollection.insert_one(data)
print(data)
def main():
# 定义option头部,设置浏览器参数.此时将不会弹出浏览器页面,直接在设置无头隐身抓取
# options = {
# 'headless': '--headless',
# 'no_sanddox': '--no-sandbox',
# 'gpu': '--disable-gpu'
# }
options = {}
chrome_options = Options()
for k,v in options.items():
print('设置浏览器参数:{}'.format(v))
# 设置浏览器参数
chrome_options.add_argument(v)
crawl = CrawlProject(chrome_options)
url = 'http://sleeve.talelin.com/#/login'
login_status = crawl.login(url)
if login_status:
crawl.crawl_order_info(url='http://sleeve.talelin.com/#/statics/order/list')
if __name__ == '__main__':
main()6
收起
正在回答
1回答
同学,你好!当使用 webdriver.Chrome() 创建浏览器驱动实例时,浏览器会在脚本结束后自动关闭。
如果同学没有写显式调用 driver.quit() 方法关闭浏览器驱动,则 Selenium WebDriver 会在 Python 解释器关闭时自动清理资源,并且会尝试自动关闭浏览器。所以会自动关闭浏览器的。
祝学习愉快~
Python全能工程师
- 参与学习 人
- 提交作业 16430 份
- 解答问题 4469 个
全新版本覆盖5大热门就业方向:Web全栈、爬虫、数据分析、软件测试、人工智能,零基础进击Python全能型工程师,从大厂挑人到我挑大厂,诱人薪资在前方!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星