突破淘宝对于 selenium 检测

From:https://blog.csdn.net/qq_42196922/article/details/89400988

多加一行代码,突破淘宝模拟登录滑块:http://www.imooc.com/article/285729

爬虫自动化:https://www.jianshu.com/p/b3b92f327374

selenium 跳过 webdriver 检测并模拟登录淘宝:https://www.cnblogs.com/cloudbird/p/10524242.html

pyppeteer 绕过 selenium 检测,实现淘宝登陆:https://blog.csdn.net/Chen_chong__/article/details/82950968

Python 使用 selenium 模拟登陆淘宝:https://mp.weixin.qq.com/s?__biz=MzI0OTc0MzAwNA==&mid=2247487680&idx=1&sn=e40947f382116ff59761f250ee45dce3

ichrome

【2021.7.26】更新: 发现一个 ichrome,直接驱动 Chrome 抓淘宝,天猫的数据没啥问题

github 地址:https://github.com/ClericPy/ichrome

这里就不放天猫、淘宝的代码了,贴一个药监局的:

( 流程:药品  --->  药品查询  --->  国产药品 ,然后就一直翻页)

import asyncio
from lxml import etree
from ichrome import AsyncChromeDaemonasync def main():async with AsyncChromeDaemon(headless=0, disable_image=False) as cd:async with cd.connect_tab(index=0, auto_close=True) as tab:url = 'https://www.nmpa.gov.cn/yaopin/index.html'wait_timeout = 5await tab.goto(url, timeout=wait_timeout)await asyncio.sleep(2)data_query_css_string = '#layer3 > div > a:nth-child(9)'await tab.wait_tag(data_query_css_string, max_wait_time=wait_timeout)await tab.click(data_query_css_string, timeout=wait_timeout)await asyncio.sleep(2)yao_query_css_string = '[title="国家局批准的药品批准文号信息"]'await tab.wait_tag(yao_query_css_string, max_wait_time=wait_timeout)await tab.click(yao_query_css_string, timeout=wait_timeout)await asyncio.sleep(2)while True:data_link_css_string = '#content table:nth-child(2) > tbody > tr:nth-child(1) > td > p > a'await tab.wait_tag(data_link_css_string, timeout=wait_timeout)html = await tab.get_html(timeout=wait_timeout)s_html = etree.HTML(text=html)s_table = s_html.xpath('//div[@id="content"]//table')[2]s_tr_list = s_table.xpath('.//tr')for s_tr in s_tr_list:tag_a = s_tr.xpath('string(.)').strip()print(tag_a)# tag_a_href = s_tr.xpath('.//a/@href')# print(tag_a_href)btn_next = '[src="images/dataanniu_07.gif"]'await tab.click(btn_next, timeout=wait_timeout)await asyncio.sleep(2)if __name__ == "__main__":asyncio.run(main())

执行结果:

chrome 多开:设置不同的 debug_port 和 user_data_dir 可以达到多开 Chrome 

import json
import asyncio
import aiomultiprocess
from loguru import logger
from ichrome import AsyncChromeDaemon
from ichrome.async_utils import Chromeasync def startup_chrome(dp_port=None):"""设置 chrome 参数,然后启动 chrome:param dp_port: 自定义 debug port:return:"""logger.info(f'dp_port ---> {dp_port}')timeout = 5# 也可以给 Chrome 添加代理proxy = '127.0.0.1:8080'udd= f'c:/chrome_user_data_dir_{dp_port}'async with AsyncChromeDaemon(port=dp_port, proxy=proxy, user_data_dir=udd) as cd:async with cd.connect_tab(index=0) as tab:url = 'https://space.bilibili.com/1904149/'await tab.set_url(url, timeout=timeout)await asyncio.sleep(5)cookie = await tab.get_cookies(url, timeout=timeout)cookie_string = json.dumps(cookie, ensure_ascii=False)logger.info(f'cookie_string ---> {cookie_string}')async def main():db_list = [9301 + offset for offset in range(5)]async with aiomultiprocess.Pool() as aio_pool:await aio_pool.map(startup_chrome, db_list)await aio_pool.join()if __name__ == "__main__":asyncio.run(main())pass

方法 1:利用 Chrome DevTools 协议

 Chrome DevTools Protocol (协议详细内容):https://chromedevtools.github.io/devtools-protocol/

之前淘宝对于 selenium 还是很友好的,后来 selenium 被检测了 window.navigator.webdriver 等参数,出滑动验证码什么的,selenium 已经很难用了,  网上大片教程都使用的 pyppeteer 修改检测 js 参数去采集,  但是发现chromium 占用内存太高,并且 pyppeteer 参数方法介绍太少,用起来不舒服。

本文介绍了另一种方法:使用 selenium 接管 chrome 浏览器

利用 Chrome DevTools 协议。它允许客户 检查 和 调试 Chrome 浏览器。

添加 chrome 的环境变量

系统环境变量 PATH 里将 chrome的路径 添加进去。

命令行下执行命令

打开cmd,在命令行中输入命令:

chrome.exe --remote-debugging-port=9999 --user-data-dir="C:\selenum\AutomationProfile"

对于-remote-debugging-port值,可以指定任何打开的端口。

      对于-user-data-dir 标记,指定创建新 Chrome 配置文件的目录。它是为了确保在单独的配置文件中启动 chrome,不会污染你的默认配置文件。

执行完命令后,会打开一个浏览器页面,我们输入淘宝网址(https://login.taobao.com/member/login.jhtml),输入用户名和密码,登录淘宝后用户信息就保存在 --user-data-dir="C:\selenum\AutomationProfile" 所指定的文件夹中。

执行 js window.open() 打不开窗口时,是因为 chrome 默认不允许弹出窗口,改下 chrome 设置就可以了
在 chrome 浏览器地址栏输入:chrome://settings/content/popups,把 已阻止(推荐)  改成 允许 即可。
或者 chrome -》设置 -》高级 -》隐私设置和安全性 -》网站设置 -》弹出式窗口和重定向,也可以设置。

不要关闭上面浏览器,然后执行 python 代码

python 代码:

在淘宝搜索 "电脑" 关键字,并打印前 5 页 所有 搜索内容

import os
import time
import random
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC# from selenium.webdriver.common.action_chains import ActionChainsdef main():        # os.system(r'C:\Users\Administrator\AppData\Local\Google\Chrome\Application/chrome.exe --remote-debugging-port=9999 --user-data-dir="C:\selenum\AutomationProfile"')chrome_debug_port = 9999chrome_options = Options()# chrome_options.add_argument('--headless')chrome_options.add_experimental_option("debuggerAddress", f"127.0.0.1:{chrome_debug_port}")browser = webdriver.Chrome(chrome_options=chrome_options)wait = WebDriverWait(browser, 5)print(browser.title)# 当前句柄current_handle = browser.current_window_handle# browser.execute_script('window.open("https://login.taobao.com/member/login.jhtml")')browser.execute_script('window.open("http://www.baidu.com")')# 所有句柄all_handle = browser.window_handlessecond_handle = all_handle[-1]# 切回firstbrowser.switch_to.window(current_handle)url = 'https://s.taobao.com/search?q=电脑'browser.get(url)produce_info_xpath = '//div[contains(@class, "J_MouserOnverReq")]//div[@class="row row-2 title"]/a'produce_info = browser.find_elements_by_xpath(produce_info_xpath)for produce in produce_info:print(produce.text.replace(' ', ''))# 这里是演示,所以只爬了前 5 页for page_num in range(2, 6):next_page_xpath = '//li[@class="item next"]'next_page = browser.find_element_by_xpath(next_page_xpath)next_page_enable = False if 'disabled' in next_page.get_attribute('class') else Trueif next_page_enable:print('*' * 100)print(f'第 {page_num} 页')next_page.click()# browser.refresh()produce_info_xpath = '//div[contains(@class, "J_MouserOnverReq")]//div[@class="row row-2 title"]/a'wait.until(EC.presence_of_all_elements_located((By.XPATH, produce_info_xpath)))time.sleep(random.randint(3, 5))produce_info = browser.find_elements_by_xpath(produce_info_xpath)for produce in produce_info:print(produce.text.replace(' ', ''))else:breakif __name__ == '__main__':main()

执行结果截图:

代码 2(根据关键字搜索,然后抓取 店铺名,店铺地址,店铺电话,):

# -*- coding: utf-8 -*-import time
import random
import parsel
import re
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC# from selenium.webdriver.common.action_chains import ActionChainsclass TaoBaoSearch(object):def __init__(self):super(TaoBaoSearch, self).__init__()self.browser = Noneself.wait = Noneself.master_handler = Noneself.slaver_handler = Noneself.temp = Noneself.browser_init()def browser_init(self):chrome_debug_port = 9999chrome_options = Options()chrome_options.add_experimental_option("debuggerAddress", f"127.0.0.1:{chrome_debug_port}")# chrome_options.add_argument('--headless')self.browser = webdriver.Chrome(chrome_options=chrome_options)self.wait = WebDriverWait(self.browser, 5)all_handler = self.browser.window_handlesif len(all_handler) >= 1:for index in all_handler[1:]:self.browser.switch_to.window(index)self.browser.close()# self.master_handler = self.browser.current_window_handleself.master_handler = self.browser.window_handles[0]self.browser.switch_to.window(self.master_handler)self.browser.execute_script('window.open()')# self.browser.execute_script('window.open("_blank")')handlers = self.browser.window_handlesself.slaver_handler = handlers[-1]# print(self.browser.title)def get_detail_info(self, shop_url=None):# 切换到 从 窗口self.browser.switch_to.window(self.slaver_handler)self.browser.get(shop_url)html = self.browser.page_sourcehtml = html.replace('&lt;', '<').replace('&gt;', '>')# print(html)s_html = parsel.Selector(text=html)shop_keeper_xpath = '//div[@class="extend"]//li[@class="shopkeeper"]//a/text()'shop_keeper = s_html.xpath(shop_keeper_xpath).extract_first()phone_reg = '联系电话:(\d+-?\d+)|联系手机:(\d+)'phone = re.findall(phone_reg, html)# 处理完后 一定要切换到 主 窗口self.browser.switch_to.window(self.master_handler)return shop_keeper, phonedef process_item(self, item):self.temp = Noneshop_xpath = './/div[@class="shop"]//a'local_xpath = './/div[@class="location"]'shop = item.find_element_by_xpath(shop_xpath).textshop_url = item.find_element_by_xpath(shop_xpath).get_attribute('href')local = item.find_element_by_xpath(local_xpath).textshop_keeper, phone = self.get_detail_info(shop_url)if phone:print(f'shop : {shop}')print(f'local : {local}')print(f'shop_url : {shop_url}')print(f'shop_keeper : {shop_keeper}')print(f'phone : {phone}')with open('./info.txt', 'a+') as f:f.write(shop + ',')f.write(local + ',')f.write(shop_url + ',')f.write(shop_keeper + ',')f.write(f'{phone}')f.write('\n')def main(self):# 切回 主 窗口self.browser.switch_to.window(self.master_handler)key_word = input('输入淘宝搜索关键字:')if not key_word:print('没有输入关键字。默认搜索 “手机”')key_word = '手机'url = f'https://s.taobao.com/search?q={key_word}'self.browser.get(url)shop_and_local_xpath = '//div[contains(@class, "J_MouserOnverReq")]//div[@class="row row-3 g-clearfix"]'shop_and_local = self.browser.find_elements_by_xpath(shop_and_local_xpath)for item in shop_and_local:self.process_item(item)# 这里是演示,所以只爬了前 5 页for page_num in range(2, 6):next_page_xpath = '//li[@class="item next"]'next_page = self.browser.find_element_by_xpath(next_page_xpath)next_page_enable = False if 'disabled' in next_page.get_attribute('class') else Trueif next_page_enable:print('*' * 100)print(f'第 {page_num} 页')next_page.click()# self.browser.refresh()self.wait.until(EC.presence_of_all_elements_located((By.XPATH, shop_and_local_xpath)))time.sleep(random.randint(3, 5))shop_and_local = self.browser.find_elements_by_xpath(shop_and_local_xpath)for item in shop_and_local:self.process_item(item)else:breakif __name__ == '__main__':tb = TaoBaoSearch()tb.main()

抓取信息保存到 info.txt ,文件截图:

改进:

上面是一直有浏览器窗口的,没法使用 无头模式,可以使用 --user-data-dir 参数,然后设置无头模式。

如果想改变 Chrome 位置,可以设置  chrome_options.binary_location 为 chrome.exe 路径即可。

from selenium import webdriver
from selenium.webdriver.chrome.options import Optionsif __name__ == '__main__':chrome_options = Options()# 不使用默认的Chrome安装版本时,可以设置binary_location 指定 Chrome 路径 。# chrome 和 Chromium 对应 chromedriver.exe 版本不一样chrome_options.binary_location = r'D:\chrome\chrome.exe'# chrome_options.binary_location = r'D:\Chromium\chrome.exe'# chrome_options.add_argument('--headless')chrome_options.add_argument("--no-sandbox")chrome_options.add_argument('disable-infobars')chrome_options.add_argument(r'--user-data-dir=D:\chrome\userdatadir')# chrome_options.add_argument(r'--user-data-dir=D:\Chromium\userdatadir')browser = webdriver.Chrome(chrome_options=chrome_options,executable_path=r'D:\chrome\chromedriver.exe'# executable_path=r'D:\Chromium\chromedriver.exe')browser.get('https://www.taobao.com/')user_name_xpath = '//div[@class="site-nav-user"]/a'user_name = browser.find_element_by_xpath(user_name_xpath).textprint(user_name)

结果截图:

可以看到 无头模式下,使用 --user-data-dir 参数,可以登录淘宝。前提需要先手动登录淘宝,拿到登录信息的文件夹。

方法 2:js 注入,修改浏览器特征

执行代码后,手动输入用户名和密码,滑动滑块,可以正常跳转到登录后个人页面。

提示:这个手动滑动滑块有一定的失败几率,有时候失败几率还很高。有时一次就可以滑过,有时好多次都过不去。

示例代码:

import asyncio
from pyppeteer import launchwidth, height = 1366, 768js1 = '''() =>{Object.defineProperties(navigator,{ webdriver:{ get: () => false}})}'''
js2 = '''() => {alert(window.navigator.webdriver)}'''
js3 = '''() => {window.navigator.chrome = {runtime: {}, }; }'''
js4 = '''() =>{Object.defineProperty(navigator, 'languages', {get: () => ['en-US', 'en']});}'''
js5 = '''() =>{Object.defineProperty(navigator, 'plugins', {get: () => [1, 2, 3, 4, 5,6],});}'''async def page_evaluate(page):# 替换淘宝在检测浏览时采集的一些参数# 需要注意,在测试的过程中发现登陆成功后页面的该属性又会变成True# 所以在每次重新加载页面后要重新设置该属性的值。await page.evaluate('''() =>{ Object.defineProperties(navigator,{ webdriver:{ get: () => false } }) }''')await page.evaluate('''() =>{ window.navigator.chrome = { runtime: {},  }; }''')await page.evaluate('''() =>{ Object.defineProperty(navigator, 'languages', { get: () => ['en-US', 'en'] }); }''')await page.evaluate('''() =>{ Object.defineProperty(navigator, 'plugins', { get: () => [1, 2, 3, 4, 5,6], }); }''')async def main():browser = await launch(headless=False,# userDataDir='./userdata',args=['--disable-infobars', f'--window-size={width},{height}', '--no-sandbox'])page = await browser.newPage()await page.setViewport({"width": width,"height": height})# url = 'https://www.taobao.com'url = 'https://login.taobao.com/member/login.jhtml'await page.goto(url=url)await page.evaluate(js1)await page.evaluate(js3)await page.evaluate(js4)await page.evaluate(js5)# await page_evaluate(page)await asyncio.sleep(100)# await browser.close()asyncio.get_event_loop().run_until_complete(main())

方法 3:将 模拟浏览器 设置为 开发者模式

好像现在这种方法不好用了。。。。。。。。

示例代码:

chrome_options = Options()# 制定 chrome.exe 路径名
# chrome_options.binary_location = f"{current_dir}\\chrome\\chrome.exe" # 此步骤很重要,设置为开发者模式,防止被各大网站识别出来使用了Selenium
chrome_options.add_experimental_option('excludeSwitches', ['enable-automation'])# chrome_options.add_argument("--headless")
chrome_options.add_argument("disable-infobars")
chrome_options.add_argument("--no-sandbox")
chrome_options.add_argument(f"--user-data-dir={current_dir}\\chrome\\userdatadir")
browser = webdriver.Chrome(chrome_options=chrome_options,executable_path=f'{current_dir}\\chrome\\chromedriver.exe'
)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/495824.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

18年你需要了解的15个人工智能统计数据

来源&#xff1a;网络大数据人工智能(AI)每天都在以惊人的速度增长&#xff0c;并且与此同时&#xff0c;围绕着各行业的统计数据也在发生变化。该技术在简化医疗保健行业工作流程方面取得了巨大成功&#xff0c;减少了教育部门行政任务的工时&#xff0c;同时也降低了制造业的…

Python GUI 开发工具

Python Tkinter教程&#xff08;GUI图形界面开发教程&#xff09;&#xff1a;http://c.biancheng.net/python/tkinter/ PyQt5教程&#xff1a;http://code.py40.com/face 作为 Pyhon 开发者&#xff0c;我们迟早都会碰到 图形用户界面&#xff08;GUI&#xff09;应用 开发任…

pandas 读写 excel

Python开发 之 Python3读写Excel文件&#xff08;较全&#xff09;&#xff1a;https://blog.csdn.net/u014597198/article/details/83104653 python读取excel&#xff08;Python处理xls&#xff09;&#xff1a;https://blog.csdn.net/chenggong2dm/article/details/44956805…

7张图了解2018物联网产业发展新趋势

来源&#xff1a;硅谷动力 作者&#xff1a;文乾摘要&#xff1a;物联网其本质上是互联网的延伸&#xff0c;利用以传感器为主的嵌入式计算机系统进行各终端之间的彼此数据交互。本篇文章用7张图片讲述了物联网应用的各个领域。随着互联网红利逐渐消失&#xff0c;“Interne…

安装 Python 包时解决 Microsoft visual c++ 14.0 is required 问题

参考&#xff1a;http://www.hongweipeng.com/index.php/archives/1532/ 在 windows 上安装 scrapy 时经常会遇到这个问题&#xff0c;安装其他组件也可能会遇到。但问题解决办法都是大致相同的。 如&#xff1a;pip install scrapy 时出现&#xff1a;error: Microsoft Visua…

硅基光电子芯片:换道超车的核心技术

来源&#xff1a;光电子先导院 作者&#xff1a;周治平2018年4月16日&#xff0c;美国商务部激活了对中兴通讯的拒绝令&#xff0c;禁止美国公司向中兴通讯销售任何零部件、商品、软件和技术&#xff0c;直到2025年3月13日。这一禁令立刻使中兴通讯业务陷入休克状态&#xff…

AI虚拟偶像:知识图谱赋予AI“生命感”

来源&#xff1a;脑极体AI是个非常有趣的词&#xff0c;不管是中文翻译的&#xff0c;还是英文的Artificial Intelligence&#xff0c;都有“生物性”的含义。一个是集结了地球顶尖智慧的“人工”&#xff0c;另一个Intelligence则专指生物拥有的智慧。不过在当今的AI风潮中&am…

PySide6、PyQt6、ui文件转py文件、Qt Designer 使用

QT 官网&#xff1a;https://www.qt.io/zh-cn/develop 用 Python 编写安卓 APK&#xff1a;https://zhuanlan.zhihu.com/p/398126847 1、PySide6、PyQt6、PyQt5 PySide6、PySide2、PyQt5 都是基于 Qt 库&#xff0c;Qt 是一组 C 库和开发工具&#xff0c;包括图形用户界面、网…

用visio反向工程画oracle数据库表的结构图

步骤: 1、数据库----反向工程 2、在反向工程向导中选择--设置--然后选择---Microsoft--ODBC-for--oracle 3、新建数据源---选择用户数据源----Microsoft--ODBC-for--oracle4、输入用户名和数据库名5、输入数据库密码---选择需要绘制的表转载于:https://www.cnblogs.com/kokyu/a…

该如何对「半监督学习算法」实际性应用进行评估?Google给出了新答案

原文来源&#xff1a;arXiv 作者&#xff1a;Avital Oliver、Augustus Odena、Colin Raffel、Ekin D. Cubuk、Ian J. Goodfellow「雷克世界」编译&#xff1a;KABUDA、EVA半监督学习&#xff08;Semi-supervised learning&#xff0c;SSL&#xff09;提供了一个强大的框架&…

Python PyQt5 教程

PyQt5教程 &#xff1a;http://code.py40.com/face 教程翻译自&#xff1a;http://zetcode.com/gui/pyqt5/ PyQt5 的 核心API 以及 扩展应用&#xff08;CSDN 学院收费视频&#xff09;&#xff1a;https://edu.csdn.net/course/play/9870/222942 pyqt5 - 对文本样式进行操作&…

Silverlight中全屏处理

Silverlight插件支持全屏模式&#xff0c;这个没什么好说的&#xff0c;只需要用设置IsFullScreen属性即可&#xff0c;问题在于全屏模式中&#xff0c;尽管屏幕变大了&#xff0c;但是页面中的控件并未相应的变大&#xff0c;下面是我在网上找到的解决这个问题的两种方式。 第…

人工智能的过去、现在和未来

来源&#xff1a; 人工智能和大数据 作者&#xff1a; 腾讯 AI Lab 主任 张潼在回答人工智能达到了什么程度这个问题之前&#xff0c;需先了解人工智能的概念是什么&#xff1f;人工智能&#xff08;Artificial Intelligence&#xff0c;AI&#xff09;是指计算机像人一样拥有智…

Dom4j完整教程~DOM4J简介

DOM4J是 dom4j.org 出品的一个开源 XML 解析包。DOM4J应用于 Java 平台&#xff0c;采用了 Java 集合框架并完全支持 DOM&#xff0c;SAX 和 JAXP。 DOM4J 使用起来非常简单。只要你了解基本的 XML-DOM 模型&#xff0c;就能使用。 Dom&#xff1a;把整个文档作为一个对象。 DO…

除了芯片 我们还应关注哪些核心技术

来源&#xff1a;传感器技术&#xff08;公众号&#xff09;最近的“中兴封杀”事件&#xff0c;让国人深深领略了缺少核心技术给企业乃至行业和国家带来的巨痛。除了我们知道的芯片技术之外&#xff0c;还有哪些核心技术需要我们重点关注呢&#xff1f;超级计算终端 超级计算终…

Python PyInstaller 安装 和 使用教程( 打包生成 exe )

From&#xff1a;http://c.biancheng.net/view/2690.html Python zipapp打包教程&#xff1a;http://c.biancheng.net/view/2687.html 在创建了独立应用&#xff08;自包含该应用的依赖包&#xff09;之后&#xff0c;还可以使用 PyInstaller 将 Python 程序生成可直接运行的程…

Yann LeCun:距离“真正的” AI,我们还缺什么?

来源&#xff1a; AI科技大本营&#xff08;ID&#xff1b;rgznai100&#xff09;GMIC Beijing 2018 大会第一天&#xff0c;首个演讲者是 Facebook 首席 AI 科学家 Yann LeCun。他讲述了关于深度学习的最新研究成果&#xff0c;同时也描述了深度学习的未来&#xff0c;以及机…

Python 使用 smtp ssl 模式 发送邮件与附件

参考 &#xff1a; 发送邮件简单入门 ( 以qq邮箱,163邮箱为例 ) &#xff1a;https://blog.csdn.net/qq_38661599/article/details/81013834 smtp ssl 模式 发送邮件 与 附件&#xff1a;https://www.cnblogs.com/SunshineKimi/p/10629342.html Python…

Unity.Interception System (2.0)

转载于:https://www.cnblogs.com/artech/archive/2010/08/27/1810010.html

卷积神经网络为什么能称霸计算机视觉领域?

来源&#xff1a;图灵人工智能摘要&#xff1a;在机器视觉和其他很多问题上&#xff0c;卷积神经网络取得了当前最好的效果&#xff0c;它的成功促使我们思考一个问题&#xff0c;卷积神经网络为什么会这么有效&#xff1f;在本文中&#xff0c;将为大家分析卷积神经网络背后的…