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]
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. 安装Clicknium库
pip install clicknium
2. 安装 VSCode 插件 Clicknium extension[4]
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
创建项目
2 捕获Locator元素
打开今日必应的网站,我们可以看到有很多图片,我们想要抓取这些图片,首先我们需要抓取图片的链接。我们可以使用Clicknium Recorder来抓取元素。
在VSCode中Locators面板中,点击右上角捕获按钮,选择打开的Chrome
浏览器,打开相应网站,按ctrl点击元素,即可抓取元素。
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(0, 2000)
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