Scrapy第十一(①)篇:selenium4模拟器中间件

这篇具有很好参考价值的文章主要介绍了Scrapy第十一(①)篇:selenium4模拟器中间件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

为什么要使用模拟器?

在使用request的时候,大型网站都有很多的反爬机制,典型比如滑动验证码、弹窗广告、弹窗验证、登录认证、Ajax异步加载...等等,这些是request很难绕过去的。这时候可以使用selenium模拟器来模拟用户操作:Selenium可以根据的指令,让浏览器自动加载页面,获取需要的数据,甚至页面截屏,或者判断网站上某些动作是否发生等.

目录

1.安装依赖(已经安装过的,请先卸载再安装,确保是最新版本)

2.验证版本

3.下载驱动(两种方式二选一)

4.测试Selenium4:访问百度并搜索

5.编写中间件:打开middlewares.py文件,新建中间件SeleniumMiddleware

6.开启中间件:打开settings.py

7.selenium反屏蔽


1.安装依赖(已经安装过的,请先卸载再安装,确保是最新版本)

pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple

2.验证版本

pip list

Scrapy第十一(①)篇:selenium4模拟器中间件

3.下载驱动(两种方式二选一)

① 使用SergeyPirogov (Sergey Pirogov) · GitHub自动下载驱动管理器(推荐)

pip install webdriver-manager -i https://pypi.tuna.tsinghua.edu.cn/simple

②手动下载并指定驱动

selenium3.0环境搭建_苍穹之跃的博客-CSDN博客_selenium3版本单独创建一个目录,如:D:/drivers/,把不同浏览器的驱动都放到该目录。geckodriver.exe第一步:单独创建一个目录,如:D:/drivers/bin ,把不同浏览器的驱动都放到该目录。geckodriver.exe(Firefox)、chromedriver.exe(Chrome)、MicrosoftWebDriver.exe(Edge)、IEDriverServer.exe(IE)、operadriver.exe(Opera)等。然后,将D:/drivers/bin添加到系统环境.https://blog.csdn.net/wenxingchen/article/details/118105591

4.测试Selenium4:访问百度并搜索

Scrapy第十一(①)篇:selenium4模拟器中间件

import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager

if __name__ == '__main__':
    # 初始化驱动
    service = ChromeService(executable_path=ChromeDriverManager().install())
    # 配置
    options = webdriver.ChromeOptions()
    # 实例化驱动
    driver = webdriver.Chrome(service=service, options=options)
    # 访问百度
    driver.get("https://www.baidu.com/")
    # 获取当前页面
    html = driver.page_source
    # 在页面上执行JS:基本上 API 没有提供的所有功能都可以用执行 JavaScript 的方式来实现
    driver.execute_script('alert("弹个框试试")')
    # 页面停留
    time.sleep(10)
    # 销毁实例
    driver.quit()

5.编写中间件:打开middlewares.py文件,新建中间件SeleniumMiddleware

from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager

class SeleniumMiddleware(object):
        def process_response(self, request, response, spider):
        # 初始化驱动
        service = ChromeService(executable_path=ChromeDriverManager().install())
        # 配置
        options = webdriver.ChromeOptions()
        # 无头模式
        # options.add_argument('--headless')
        # 获取浏览器实例
        driver = webdriver.Chrome(service=service, options=options)

        # 访问网页
        driver.get(request.url)
        # 全屏
        # driver.maximize_window()
        # 一般用于异步加载-等待特定元素出现:driver就是浏览器驱动,timeout就是等待的时长,until后是判断元素是否出现的
        wdw = WebDriverWait(driver, timeout=10).until(lambda d: d.find_element(By.CLASS_NAME, "lm_tabe"))
        # network记录,这里可以获得所有ajax请求的结果
        # logs = get_xhr_logs(driver)
        # 动态加载后的网页
        html = driver.page_source
        # 退出浏览器
        driver.quit()
        return scrapy.http.HtmlResponse(url=request.url, body=html.encode('utf-8'), encoding='utf-8', request=request)

6.开启中间件:打开settings.py

DOWNLOADER_MIDDLEWARES = {
    'announcement.middlewares.SeleniumMiddleware': 543,
}

7.selenium反屏蔽

有些网站加了一层对selenium 的检测来防止一些爬虫。基本都是对window.navigator.webdriver属性的检测,只要将此属性置成undefined即可。但是driver.execute_script()方法是在页面加载后执行的。而反屏蔽检测是在页面渲染之前就执行了。我们可以使用本地代理的方式来绕过(后面几章会讲到),但这里我们使用更简便的方式:使用CDP(Chrome Devtools-Protocol,Chrome 开发工具协议)来解决。

典型的selenium反屏蔽网站:Scrape | Movie

Scrapy第十一(①)篇:selenium4模拟器中间件文章来源地址https://www.toymoban.com/news/detail-478486.html

import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager
if __name__ == '__main__':

    # 初始浏览器驱动
    options = webdriver.ChromeOptions()
    # 隐藏提示条
    options.add_experimental_option('excludeSwitches', ['enable-automation'])
    # 隐藏自动化扩展信息
    options.add_experimental_option('useAutomationExtension', False)
    # 初始化驱动
    service = ChromeService(executable_path=ChromeDriverManager().install())
    # 浏览器实例化
    driver = webdriver.Chrome(service=service, options=options)

    # 隐藏window.navigator.webdriver
    driver.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument', {
        'source': 'Object.defineProperty(navigator, "webdriver", {get: () => undefined})'
    })

    # 访问
    driver.get("https://antispider1.scrape.center/")
    driver.execute_script('alert("弹个框试试")')
    time.sleep(10)
    # 退出驱动实例
    driver.quit()

到了这里,关于Scrapy第十一(①)篇:selenium4模拟器中间件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • mac使用Simulator打开IOS模拟器(不使用Xcode打开IOS模拟器)

    提示:打开模拟器的前提必须是安装了Xcode。 在mac电脑上有Xcode可以用来模拟不同类型的手机进行来解决ios兼容问题,这里记录一下不使用Xcode打开ios模拟器的方法 快捷键:command+空格。搜索simulator,第一个就是模拟器 使用以下命令打开模拟器 结果如下图

    2024年02月15日
    浏览(54)
  • 苹果IOS模拟器电脑版用哪个好 逍遥模拟器玩部分苹果账号互通

    苹果IOS模拟器电脑版用哪个好 逍遥模拟器玩部分苹果账号互通 网上有IOS模拟器PC版,但是这个是IOS的SDK开发者方便在WINDOWS环境里开发调试IOS应用的,不是用这个模拟器就能直接安装IOS的应用或者游戏来玩了,这个直接运行不了,必须是源代码才能运行。 很多IOS的玩家想要在

    2024年02月04日
    浏览(54)
  • viple模拟器使用(四):unity模拟器中实现两距离局部最优迷宫算法

    两距离:指的是左侧距离和右侧距离 局部最优: 对当前状态来说最好的选择 ,至于整体能不能达到最优,是无法确定的。 从节点1到节点5,一共有3条路 第1条路线:1→2→4→5,对应的花销是:2+3+4=9; 第2条路线:1→3→4→5,对应的花销是:1+5+4=10; 第3条路线:1→3→5,对

    2024年02月05日
    浏览(88)
  • M芯片Mac上最好用的安卓模拟器「MuMu模拟器Pro」正式发布!

    MuMu模拟器 Pro: MuMu模拟器 Pro是网 易专为Mac电脑用户开发的一款安卓模拟器产品,致力于为用户提供流畅的安卓应用和游戏体验。针对Apple M系列芯片进行了优化,为Mac用户带来更加顺畅的安卓系统使用体验。本文将全面从获取流程、使用 场景、性能、功能界面等方面对 MuM

    2024年02月20日
    浏览(65)
  • 使用Android自带模拟器模拟车载多屏显示

    由于车机设备资源不够,可采用 Android Studio 自带模拟器来模拟车机多屏显示,如下图所示模拟一个Activity在不同屏幕显示 更新Android Studio: 配置AVD参数 Android SDK:12 开启第二块屏幕 按如下截图4个步骤,设置Second Display的分辨率和屏幕密度 查看当前屏幕ID信息,用下面adb命令

    2024年02月16日
    浏览(100)
  • Android Studio改变模拟器默认安装在C盘路径,将模拟器安装于自定义路径

     直接点击下载配置,安装在默认位置即可  我这里的路径是 D:PathASphone  打开编辑文件夹中的.ini文件 将path=后的路径更换为自己之前移动后的文件夹路劲即可  本文为作者独立编写  本BLOG上所有的原创文章未经本人许可,不得用于商业用途及传统媒体。网络媒体转载请注

    2024年02月16日
    浏览(51)
  • Android 使用模拟器模拟Linux操作系统

    在Android手机上使用模拟器模拟ubuntu等操作系统,便于测试 Termux:是一款 Android 终端模拟器和 Linux 环境应用程序,无需 root 或设置即可直接运行。虽然酷安和谷歌菜市场都能下载,但这些渠道都很久没更新了,建议到 F - Droid 下载。 下载链接: https://f-droid.org/packages/com.termu

    2024年02月07日
    浏览(43)
  • 自动驾驶模拟器

    目录 Carla 自动驾驶模拟器 Udacity自动驾驶模拟器 pip install carla 需要下载地图

    2024年01月20日
    浏览(48)
  • Android 模拟器检测

    最近看到某客户端有一个检测模拟器的方法,我正常手机结果被判断是模拟器了,很好奇,于是找了一下原因。 这个代码检测模拟器有两个问题: 1、拨号检测,Android10.0及以上均为false 2、Build.SERIAL,Android8.0以上均为unknown 这导致8.0以上系统均会被误判 设备信息检测代码:

    2024年02月03日
    浏览(51)
  • 华为模拟器实验

    在sw1和sw2之间配置链路聚合,并采用静态lacp模式,以增加核心交换机之间的转发速度 创建vlan以控制广播,提高安全与性能 在两个三层交换机上配置路由转发,以实现内部vlan之间的通信 在核心交换机与路由器之间配置ospf 在公司路由器上创建loopback接口模拟主机并配置rip 在

    2024年04月16日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包