发布于 2026-01-06 1 阅读
0

隆重推出 Bose Framework:🚀 你的瑞士军刀,化身忍者爬虫 ✨ 由 Mux 呈现的 DEV 全球展示挑战赛:展示你的项目!

隆重推出 Bose Framework:🚀 你的瑞士军刀,化身忍者刮刀 ✨

由 Mux 赞助的 DEV 全球展示挑战赛:展示你的项目!

💡 什么是 Bose Framework?

Bose Framework 是一个专为 Selenium 开发者打造的框架,它汇集了经验丰富的机器人开发者的最佳实践,旨在帮助开发者创建难以检测代码量少易于调试的机器人。🤖

它能帮助您轻松抓取或自动化目标网站,让您拥有经验丰富的机器人开发者的强大能力,从而节省您大量的开发时间。👨🏻‍💻

🏆 顶级特色

Bose 是一个功能强大的框架,它实现了以下特性,可帮助您更快地创建机器人,从而节省您宝贵的开发时间。✨

  • 使用 Bose 实现低样板代码:使用 Bare Selenium 启动浏览器需要编写大量代码:
from selenium import webdriver

driver_path = 'path/to/chromedriver'

driver = webdriver.Chrome(executable_path=driver_path)

driver.get('https://www.example.com')

driver.quit()
Enter fullscreen mode Exit fullscreen mode

使用 Bose,您只需几行代码即可启动浏览器,无需担心指定路径:

from bose import *

class Task(BaseTask):
    def run(self, driver):
        driver.get('https://www.example.com')
Enter fullscreen mode Exit fullscreen mode
  • 只需一行代码即可配置配置文件、窗口大小和用户代理

在纯 Selenium 中,如果要配置配置文件、用户代理或窗口大小等选项,则需要编写大量代码,如下所示:

from selenium.webdriver.chrome.options import Options
from selenium import webdriver

driver_path = 'path/to/chromedriver.exe'

options = Options()

profile_path = '1'

options.add_argument(f'--user-data-dir={profile_path}')

user_agent = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.37")'
options.add_argument(f'--user-agent={user_agent}')

window_width = 1200
window_height = 720
options.add_argument(f'--window-size={window_width},{window_height}')

driver = webdriver.Chrome(executable_path=driver_path, options=options)
Enter fullscreen mode Exit fullscreen mode

使用 Bose,您只需一行代码即可通过预定义变量进行设置。例如:


class Task(BaseTask):
    browser_config = BrowserConfig(user_agent=UserAgent.user_agent_106, window_size=WindowSize.window_size_1280_720, profile=1)
Enter fullscreen mode Exit fullscreen mode
  • 每个机器人开发者都想要的异常处理功能

Bose 还解决了 Selenium 的一个常见问题——当出现异常时,浏览器会崩溃并自动关闭。这种行为对于机器人开发者来说并不理想,而且会使调试变得困难。

另一方面,Bose 会在发生异常时保持浏览器打开状态,从而更容易调试问题。

错误提示

  • 回忆过去

假设你的机器人正在运行,你去喝咖啡了,回来后发现机器人已经关闭了。

作为开发者,你可能很想知道浏览器关闭前截取的最后一张屏幕截图,或者想知道机器人完成任务花了多长时间。

嗯,每次你运行 Bose 程序时,它都会自动存储一些重要信息,例如

  • 关闭前截取的屏幕截图
  • 运行机器人所需的时间
  • 发生的任何错误。

每次运行后,都会在文件夹中创建一个新文件夹tasks,其中包含以下三个文件:

task_info.json

它包含有关任务运行的信息,例如

  • 任务运行持续时间
  • 任务的 IP 详细信息
  • 用户代理
  • 窗口大小
  • 轮廓

任务信息

final.png

这是驱动程序关闭前截取的屏幕截图。

最终的

page.html

这是驱动程序关闭前捕获的 HTML 源代码。如果您的选择器未能选中元素,了解这一点非常有用。

页

error.log

如果您的任务因异常而崩溃,我们还会存储 error.log 文件,其中包含导致任务崩溃的错误信息。这对于调试非常有帮助。

错误日志

  • Perimeterx 的设计初衷就是为了抵御 Cloudflare,默认情况下

价值数百万美元的公司借助 Cloudflare 和 PerimeterX 来保护其宝贵的数据。

现在,您可能想知道如何绕过 Cloudflare 和 PerimeterX 之类的系统。一位名叫Leon的优秀开发者创建了一款 名为ChromeDriver 的工具 ,它能够很好地支持绕过所有主流的机器人检测系统, 例如 Distil、Datadome、Cloudflare 等。

要使用它,只需将该use_undetected_driver选项传递给BrowserConfig代码中的 `get` 函数,如下所示:

from bose import BaseTask, BrowserConfig

class Task(BaseTask):
    browser_config = BrowserConfig(use_undetected_driver=True)
Enter fullscreen mode Exit fullscreen mode
  • 使用一行代码以 CSV 或 JSON 格式输出数据。

以 CSV 或 JSON 格式输出数据需要大量的命令式代码,如下所示:

import csv
import json

def write_json(data, filename):
    with open(filename, 'w') as fp:
        json.dump(data, fp, indent=4)

def write_csv(data, filename):
    with open(filename, 'w', newline='', encoding='utf-8') as csvfile:
        fieldnames = data[0].keys()  # get the fieldnames from the first dictionary
        writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
        writer.writeheader()  # write the header row
        writer.writerows(data)  # write each row of data

data = [
    {
        "text": "\u201cThe world as we have created it is a process of our thinking. It cannot be changed without changing our thinking.\u201d",
        "author": "Albert Einstein"
    },
    {
        "text": "\u201cIt is our choices, Harry, that show what we truly are, far more than our abilities.\u201d",
        "author": "J.K. Rowling"
    }
]

write_json(data, "data.json")
write_csv(data, "data.csv")
Enter fullscreen mode Exit fullscreen mode

Bose 通过将这些复杂性封装在 Output 模块中,简化了数据的读取和写入:

from bose import Output

data = [
    {
        "text": "\u201cThe world as we have created it is a process of our thinking. It cannot be changed without changing our thinking.\u201d",
        "author": "Albert Einstein"
    },
    {
        "text": "\u201cIt is our choices, Harry, that show what we truly are, far more than our abilities.\u201d",
        "author": "J.K. Rowling"
    }
]

Output.write_json(data, "data.json")
Output.write_csv(data, "data.csv")
Enter fullscreen mode Exit fullscreen mode
  • 无论是在 Mac、Linux 还是 Windows 系统上,都能运行相同的代码。无需再更改驱动程序路径。

Bose 通过抽象化消除 Windows、Mac 和 Linux 等操作系统之间的差异,简化了跨平台开发。

启动浏览器时,不再需要为每个操作系统指定特定的驱动程序路径。

  • 新增强大方法,加速机器人开发

Bose Task 方法中提供的驱动程序run是 Selenium 的扩展版本,它添加了许多强大的方法,使 Selenium 的使用更加便捷。Bose Framework 添加到 Selenium 驱动程序中的一些常用方法包括:

方法 描述
get_by_current_page_referrer(link, wait=None) 模拟用户通过点击链接进入页面的访问行为。这种方法能够创造更自然、更不易被察觉的浏览行为。
js_click(element) 允许您使用 JavaScript 点击元素,绕过弹出窗口或警告框中的任何拦截(ElementClickInterceptedException)。
get_cookies_and_local_storage_dict() 返回一个包含“cookies”和“local_storage”的字典
add_cookies_and_local_storage_dict(self, site_data) 向当前网站添加 cookie 和本地存储数据
organic_get(link, wait=None) 先访问谷歌,然后再访问“链接”,这样就更难被检测到。
本地存储 返回一个 LocalStorage 模块实例,以便以易于使用的方式与浏览器的本地存储进行交互。
保存屏幕截图(文件名=无) 将当前网页的屏幕截图保存到 tasks/ 目录中的文件中。
short_random_sleep() 和 long_random_sleep(): 睡眠时间随机,介于 2 到 4 秒之间(短)或介于 6 到 9 秒之间(长)。
get_element_or_* [例如:get_element_or_none、get_element_or_none_by_selector、get_element_by_id、get_element_or_none_by_text_contains] 根据不同条件查找页面上的网页元素。如果网页元素存在,则返回该元素;否则返回 None。
is_in_page(target, wait=None, raise_exception=False) 检查浏览器是否位于指定的页面

简单来说,Bose 是一个优秀的框架,它简化了 Selenium 和网络爬虫中枯燥乏味的部分。

🚀 开始使用 Bose

现在,让我们来看看如何才能轻松拥有 Bose 的神奇体验。

首先克隆模板

git clone https://github.com/omkarcloud/bose-starter my-bose-project
Enter fullscreen mode Exit fullscreen mode

然后切换到该目录,安装依赖项,打开 VS Code,然后启动项目:

cd my-bose-project
python -m pip install -r requirements.txt
code .
python main.py
Enter fullscreen mode Exit fullscreen mode

首次运行需要一些时间,因为它需要下载 Chrome 驱动程序可执行文件,后续运行速度会很快。

启动后,它将从quotes.toscrape.com抓取数据,并将结果存储在 /output/finished.json 中。

✨ V2 版本即将推出的功能将极大地提升 🔋 机器人开发效率

  • Kubernetes 集成,助您以 Google 的规模抓取数据 [优先级]
  • 通过将用户配置文件存储在单个 JSON 文件中,并同时存储网站的 cookie 和本地存储空间,从而节省存储空间。[优先级]
  • 提供临时电子邮件服务 [优先级]
  • 购买数百个预先创建的 Google 和 Microsoft 帐户 [优先]
  • 内置请求 IP 轮换 [优先级]
  • 验证码破解功能已集成到 Bose 中 [优先级]
  • 为印度、俄罗斯、欧洲、中国和美国等国家的用户生成姓名、电子邮件、用户名等。

📚 摘要

简而言之,Bose 让您能够轻松地自动化或抓取目标网站及其内容,就像用刀切黄油一样简单。


👋 你好,读者朋友,

您怎么看?您认为Bose Framework有价值吗

请在评论区分享您的想法,我会回复每一条评论。

文章来源:https://dev.to/rajesh_singh_1989/meet-bose-framework-your-swiss-army-knife-as-a-ninja-scraper-42dn