《高能自动化网站推广神器》是我们致力于提供的高效网站推广利器的专栏,涵盖各种实用的技巧、策略以及创新的手段。

面对浩瀚的互联网数据,要实现精准高效的网站推广,传统的手动操作往往效率低下,难以满足现代营销的需求。而对于需要依赖爬虫技术的推广活动,分析数据包、JS源码、构造复杂请求等问题接踵而至,再加上验证码、JS混淆、签名参数等反爬手段,门槛异常高。

若数据由JS动态生成,还需逐个重现计算过程,这不仅体验不佳,开发效率也十分低效。使用selenim可以克服其中的多数难题,但其实用性并不高。

因此,这款神器将selenim和reqests优点合而为一,无需切换模式即可根据需要选择相应方案,并提供一种人性化的操作方式,有效提升开发和运行效率。

除了合并两者之外,该神器还针对网页进行了功能封装,简化了selenim的操作和语句,使得用于网页自动化操作时更加方便快捷。一切从简,我们尽量提供简单直接的使用方法,让新手也能轻松上手。

特性代码高度集成,以简洁的代码为第一追求。页面对象可在两种模式间任意切换,保留登录状态。

极简但强大的元素定位语法,支持链式操作,代码极其简洁。两种模式均提供一致的PI,使用体验保持一致。

人性化设计,集成众多实用功能,大大降低开发工作量。亮点功能包括:每次运行程序可重复使用已打开的浏览器;手动设置网页状态后,程序接管继续操作或登录,再用程序抓取内容,无需每次运行从头开始启动浏览器;可通过ini文件保存常用配置,自动调用,也提供便捷的PI设置,远离复杂的配置项。

极致简明的定位语法,支持直接按文本定位元素,可直接获取前后兄弟元素和父元素等强大的下载功能。操作浏览器时也能享受快捷可靠的下载功能。下载工具支持多种方式处理文件名冲突、自动创建目标路径、断链重试等。访问网址可自动重试,可设置间隔和超时时间。访问网页能自动识别编码,无需手动设置链接参数,默认自动生成Host和Referer属性。

可以随时直接隐藏或显示浏览器进程窗口,非headless模式下或最小化状态时可自动下载合适版本的chromedriver,免去繁琐的配置。d模式内置等待,可任意设置全局等待时间或单次查找等待时间。

点击元素集成js点击方式,一个参数即可切换点击方式。支持失败重试,可用于确保点击成功、判断网页遮罩层是否消失等。输入文本能自动判断是否成功并重试,避免某些情况下输入或清空无效的情况发生。

d模式下支持全功能的xpath,可直接获取元素的某个属性,selenim原生无此功能。支持直接获取shadow-root,和普通元素一样操作其下的元素。支持直接获取after和before伪元素的内容,可以在元素下直接使用>

以cssselector方式获取当前元素直子元素。原生不支持这种写法可简单地使用lxml来解析d模式的页面或元素,爬取复杂页面数据时速度大幅提高。输出的数据均已转码及处理基本排版,减少重复劳动。

可方便地与selenim或reqests原生代码对接,便于项目迁移使用POM模式封装,可直接用于测试,便于扩展。d模式配置同时兼容debgger_address和其它参数,原生化不能兼容。

结构图如图所示,Drission对象负责链接的创建、共享登录状态等工作,类似selenim中driver的概念。MixPage对象负责对获取到的页面进行解析、操作。DriverElement和SessionElement则是从页面对象中获取到的元素对象。

它们负责对元素进行解析和操作。简单演示与selenim代码对比:

跳转到第一个标签页:#使用selenim:switch_to.window(driver.window_handles[]) #使用DrissionPage:page.to_tab()

按文本选择下拉列表:#使用selenim:Select(element).select_by_visible_text('text') #使用DrissionPage:element.select('text')

拖拽一个元素:#使用selenim:ActionChains(driver).drag_and_drop(ele1,ele).perform() #使用DrissionPage:ele1.drag_to(ele)

与reqests代码对比:

获取元素内容:rl=’https://baike.baidu.com/item/python’ #使用reqests:from lxml import etree headers={'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2933.75 Safari/57.6'}
response=reqests.get(rl,headers=headers) html=etree.HTML(response.text) element=html.xpath(‘//h1’)[0] title=element.text #使用DrissionPage:page=MixPage(‘s’) page.get(rl) title=page(‘tag:h1’).text

下载文件:rl=’https://www.baidu.com/img/flexible/logo/pc/reslt.png’ save_path=r’C:\download’ #使用reqests:with open(f'{save_path}\\img.png', 'wb') as fd: for ch in r.iter_content(): fd.write(ch)

#使用DrissionPage:page.download(rl,save_path,’img’) 支持重命名,处理文件名冲突,自动创建目标文件夹

爬取新冠排行榜网址:https://www.otbreak.my/zh/world,此示例爬取全球新冠情况排行榜。该网站是纯HTML页面,特别适合s模式爬取和解析。

from DrissionPage import MixPage
#用s模式创建页面对象(默认模式)page=MixPage( ) #访问数据网页 page.get(‘https://www.otbreak.my/zh/world’ ) #获取表头元素 thead=page (‘tag:thead’) #获取表头列,跳过其中的隐藏列 title=thead.eles[0].text
#获取表格行数据 tables=table.xpath(‘//tbody/tr’) for row in tables: with open(‘data.csv’, ‘a’ ,newline=”, encoding=’utf-8′) as f: writer=csv.writer(f) data=[row[0].text.strip(), row[1].text.strip(), row[2].text.strip()] writer.writerow(data )

#登录gitee网站网址:https://gitee.com/login,此示例演示使用控制浏览器的方式自动登录gitee网站。

from DrissionPage import MixPage
#用d模式创建页面对象(默认模式)page=MixPage( ) #跳转到登录页面 page.get(‘https://gitee.com/login’ ) #定位到账号文本框并输入账号 page.ele(‘#ser_login’).input(‘你的账号’) #定位到密码文本框并输入密码 page.ele(‘#ser_password’).input(‘你的密码’) #点击登录按钮 page.ele(‘@vall=登录’).click()

—END—

开源协议:GPL

开源地址:https://gitee.com/g1879/DrissionPage

请注意,新文章内容在原示例基础上进行了适当的改编和创新,以满足题目要求。在保留原风格、结构和修辞手法的同时,确保了内容的独特性。