查看原文
其他

Python 自动化神器 Clicknium 爬虫实战

码中人 码农真经 2023-12-25
Python 自动化神器 Clicknium 爬虫实战

Python 自动化神器 Clicknium 爬虫实战_哔哩哔哩_bilibili[1]

Clicknium是一个Python界面自动化库,可以非常简单直观地使用它操作浏览器和Windows平台APP。

  • • 官网: https://www.clicknium.com[2]

  • • Github:  https://github.com/clicknium/clicknium-docs

  • • VS Code插件: Clicknium extension[3]

clicknium与其它类库比较

Python有很多自动化的库,比如Selenium,Pyautogu,Playwright。有的只能操作网页,有的只能操作App,并且使用起来都算不上简单:Selenium需要安装Driver,需要学习XPath;Pyautogui使用简单,代码可读性强,完全模拟鼠标单击,双击拖动;但是它采用xy轴的方式定位桌面元素。分辨率变化,位置变化都会影响运行。要想用好这些工具,学习成本实在不低。

Clicknium的出现,让Python界面自动化变得简单直观。Clicknium提供了简洁直观的API来操作UI元素,如set_text, get_text, click 等等。查看代码时,逻辑非常清晰,贴近自然语言和实际操作。那怎么解决元素定位的问题。我们为此设计了Clicknium Recorder。打开Recorder,Clicknium会自动识别鼠标所指的元素。按住Ctrl+鼠标单击,Recorder会自动抓取元素,生成Locator。直接使用 Locator就能直接获取UI元素并对其进行操作。

安装

Clicknium支持Python 3.7+,安装过程非常简单,主要有三个步骤:

  1. 1. 安装Clicknium库 pip install clicknium

  2. 2. 安装 VSCode 插件 Clicknium extension[4]

  3. 3. 安装浏览器插件(在第2步安装vscode插件时,会提示安装第1步及第3步)

第一个自动化项目

First Automation Project | Clicknium[5]

实际案例

我最近发现一个必应壁纸的非官方网站 今日必应[6],每天都会更新一张图片,我们可以使用Clicknium来爬取这些图片。爬取思路就是找到起始页的所有图片链接,然后打开每个链接,下载图片。

1 初始化项目

VSCode 安装Clicknium 插件之后,同时也会安装Clicknium CLI。我们可以使用CLI来初始化项目。

  • • ctrl + shift + p 打开 VSCode 命令窗口

  • • Clicknium:Create Project 创建项目

Clicknium:Create Project

2 捕获Locator元素

打开今日必应的网站,我们可以看到有很多图片,我们想要抓取这些图片,首先我们需要抓取图片的链接。我们可以使用Clicknium Recorder来抓取元素。

在VSCode中Locators面板中,点击右上角捕获按钮,选择打开的Chrome浏览器,打开相应网站,按ctrl点击元素,即可抓取元素。

Clicknium Recorder

link示例

3 编写代码

# app.py
from clicknium import clicknium as cc, locator, ui
import requests

def main():
    tab = cc.edge.open("https://www.todaybing.com")
    links = tab.find_elements(locator.chrome.todaybing.link)
    for link in links:
        new_tab = tab.browser.new_tab(link.get_property("href"))
        img = new_tab.find_element(locator.chrome.todaybing.img_mbg)
        img_src = img.get_property("src")
        download_img(img_src)
        new_tab.close()

def download_img(url):
    img = requests.get(url)
    filepath = './' +  url.split("/")[-1] + '.jpg' 
    with open(filepath, 'wb'as f:
        f.write(img.content)

if __name__ == '__main__':
    main()

4 运行

python app.py

下一步工作

因为网站是滚动分布,以上简单代码只能爬取网站少许显示的图片。接下来可以通过 Clicknium 向下滑动网页,点击加载更多按钮,从而获得更多的图片链接,达到爬取所有图片的效果。

另也给大家推荐一个爬取妹子图的脚本: 40 行代码搞定 v2ph 爬虫 - V2EX[7]

ReaganScott/v2ph: python爬虫集合[8]

import os
from time import sleep
from clicknium import clicknium as cc, locator, ui
import requests
import random
from tkinter import messagebox


tab = cc.chrome.open("https://www.v2ph.com/")

#messagebox.askokcancel('Confirm', 'please do Human check')
elems = tab.find_elements(locator.chrome.v2ph.img_list)
for elem in elems:
    url = "https://www.v2ph.com{}".format(elem.get_property("href"))
    new_tab = tab.browser.new_tab(url)
    
    
    has_next_page = True
    while has_next_page:
        for _ in range(20):
            new_tab.scroll(02000)
            sleep(0.5)
        new_tab.wait_appear(locator.chrome.v2ph.img_sublist)
        imgs = new_tab.find_elements(locator.chrome.v2ph.img_sublist)
        headers = {
            'referer''https://www.v2ph.com/',
            'user-agent''Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36',
            'Content-Type''application/json'
        }
        for img in imgs:
            url = img.get_property("src")
            file_name = url.split("/")[-1]
            img_file = requests.get(url, headers=headers)
            temp_file = os.path.join(os.getcwd(), "picture""{}".format(file_name))
            open(temp_file, 'wb').write(img_file.content)
            sleep(random.randint(1,5))
        next = new_tab.wait_appear(locator.chrome.v2ph.a_next)
        if next != None:
            next.click()
        else:
            has_next_page = False
            break
    new_tab.close()
    sleep(random.randint(1,5))
new_tab.close()

免责声明

以上代码仅用于案例学习,与学习无关的事,也与我无关。

往期推荐

欢迎关注我的公众号“码中人”,原创技术文章第一时间推送。

引用链接

[1] Python 自动化神器 Clicknium 爬虫实战_哔哩哔哩_bilibili: https://www.bilibili.com/video/BV1LB4y1n7zT?spm_id_from=333.999.0.0&vd_source=a326d17d4b968e7399069ab131f21cb7
[2] https://www.clicknium.com: https://www.clicknium.com/
[3] Clicknium extension: https://marketplace.visualstudio.com/items?itemName=ClickCorp.clicknium
[4] Clicknium extension: https://marketplace.visualstudio.com/items?itemName=ClickCorp.clicknium
[5] First Automation Project | Clicknium: https://www.clicknium.com/documents/tutorial/firstautomation
[6] 今日必应: https://www.todaybing.com/
[7] 40 行代码搞定 v2ph 爬虫 - V2EX: https://v2ex.com/t/879230
[8] ReaganScott/v2ph: python爬虫集合: https://github.com/ReaganScott/v2ph


继续滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存