遇到Bose框架:ð您的瑞士军刀饰演忍者刮刀'
#网络开发人员 #python #webscraping #selenium

ð€什么是Bose框架?

Bose Framework是一个为硒开发人员建造的框架强>机器人。 ðρ

它可以轻松地刮擦或自动化目标网站,并赋予您经验丰富的机器人开发人员的心理力量,从而节省了开发时间的小时。 ð - ð»ð»

ð顶级feautres

Bose是一个电池包装的框架,在Feautres之后实施,可帮助您更快地创建机器人,从而节省宝贵的开发时间。 -

  • 用玻色的样本板 使用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()

使用Bose,您可以在几行代码中启动浏览器,而不必担心指定路径:

from bose import *

class Task(BaseTask):
    def run(self, driver):
        driver.get('https://www.example.com')
  • 配置配置文件,窗口大小和用户代理,带有一行代码

在Bare 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)

使用Bose,您可以使用预定义的变量在一行代码中指定它们。这是一个例子:


class Task(BaseTask):
    browser_config = BrowserConfig(user_agent=UserAgent.user_agent_106, window_size=WindowSize.window_size_1280_720, profile=1)
  • 每个机器人都想要的例外处理

Bose还解决了对硒的常见挫败感 - 当发生异常时,浏览器崩溃并自动关闭。对于机器人开发人员而言,这种行为是不可取的,并且使调试变得艰难。

另一方面,

bose在例外时会保持浏览器打开,从而可以更轻松地调试问题。

error prompt

  • 记住过去的运行

假设您在机器人运行时去喝咖啡,当您回来时,您注意到机器人已关闭。

作为开发人员,您可能会痒来查看浏览器关闭之前拍摄的最后一个屏幕截图或知道该机器人完成任务花费了多少时间。

好吧,每当您运行Bose时,它都会自动存储重要的细节,例如

  • 关闭之前拍摄的屏幕截图
  • 运行bot所需的时间
  • 发生的任何错误。

之后,每个运行一个新文件夹将在tasks文件夹中创建,其中包含三个文件,以下列出:

task_info.json

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

  • 任务运行的持续时间,
  • 任务的IP详细信息
  • 用户代理
  • window_size
  • 个人资料

task info

final.png

这是关闭驾驶员之前捕获的屏幕截图。

final

page.html

这是驾驶员关闭之前捕获的HTML源。如果您的选择器未能选择元素,则非常有用。

Page

error.log

以防您的任务因异常而崩溃,我们还存储了错误。log包含该任务崩溃的错误。这是在调试中非常有效的。

error log

  • 为击败Cloudflare,默认情况下perimeterx

数百万美元的公司在Cloudflare和enderetx的帮助下保护其有价值的数据。

现在,您可能想知道如何绕过Cloudflare和coimeterx等系统。好吧,一位名叫阿比亚奇(Abiaoqian)11的出色开发人员创建了一个ChromeDriverâ,它对绕过 所有主要的机器人检测系统(例如Distil,Datadome,Cloudflare等)有很好的支持。

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

from bose import BaseTask, BrowserConfig

class Task(BaseTask):
    browser_config = BrowserConfig(use_undetected_driver=True)
  • 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")

Bose通过将它们封装在输出模块中,以简化数据来简化这些复杂性:

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")
  • 无论是在Mac,Linux还是Windows上,都可以在任何地方运行相同的代码。忘记需要更改驱动程序路径。

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

您不再需要在启动浏览器时指定针对每个操作系统的驱动程序路径。

  • 添加了强大的方法来增压机器人开发

BOSE任务的 run 方法中收到的驱动程序是Selenium的扩展版本,它添加了强大的方法,使使用硒更加容易。 BOSE框架中添加到Selenium驱动程序中的一些流行方法是:

的字典” 之间 中
方法 描述
get_by_current_page_referrer(link,wait = none) 模拟访问,就像您通过单击链接到达页面时一样。这种方法创造了更自然,更较少可检测到的浏览行为。
JS_CLICK(element) 使您可以使用JavaScript单击一个元素,绕过弹出窗口或警报的任何截距(ElementClickInterceptedException)
get_cookies_and_local_storage_dict() 返回包含“ cookie”和“local_storageâ
add_cookies_and_local_storage_dict(self,site_data) 将cookie和本地存储数据同时添加到当前网站
有机get(链接,wait = none) 访问Google,然后访问链接,从而使其更少可检测到
local_storage 返回以易于使用方式与浏览器的本地存储进行交互的localstorage模块的实例
save_screenshot(filename = none) 将当前网页的屏幕截图保存到任务/目录中的文件
short_random_sleep()和long_random_sleep(): 随机睡觉,在2到4秒(短)之间或6到9秒之间(长)
get_element_or_* [eg:get_element_or_none,get_element_or_none_by_selector,get_element_by_id,get_element_or_or_none_by_text_contains,] 根据不同的标准在页面上找到网络元素。他们返回Web元素(如果存在),或者不存在。
is_in_page(target,wait = none,rish_exception = false) 检查浏览器是否在指定的页面

简单地说,Bose是一个出色的框架,简化了硒和网络刮擦的无聊部分。

ðbose开始

现在,让我们看看如何在手指尖端上拥有Bose的魔力。

首先克隆模板

git clone https://github.com/omkarcloud/bose-starter my-bose-project

然后更改为该目录,安装依赖项,打开VSCODE,然后启动项目:

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

第一次运行将花费一些时间,因为它下载了Chrome驱动程序可执行文件,随后的运行将很快。

一旦开始,它将从quotes.toscrape.com刮擦数据,并将结果存储在/output/fined.json

•V2至“增压”的即将到来的功能ð机器人开发

  • kubernetes集成以帮助您在Google的量表[优先级]
  • 通过将配置文件存储在单个JSON文件中,通过存储网站的cookie和本地存储来保存存储。 [优先级]
  • 提供临时电子邮件服务[优先级]
  • 购买数百个预先创建的Google和Microsoft帐户[优先级]
  • 请求的内置IP旋转[优先级]
  • CAPTCHA求解已实施到Bose [优先级]
  • 为印度,俄罗斯,欧洲,中国和美国等国家/地区的用户生成名称,电子邮件,用户名等。

ð摘要

简单地说,Bose使您毫不费力地自动化或刮擦目标网站及其内容,并易于用刀切黄油。


g读者,

您怎么看?您是否看到 Bose框架的价值

在评论中分享您的想法,我将回复每个评论。