利用 selenium 实现功能:爬虫反爬新策略

[复制链接]
查看151 | 回复0 | 2024-9-3 06:20:22 | 显示全部楼层 |阅读模式
本文将介绍Selenium这一强大工具,使点赞操作实现自动化处理,不再受限于网络环境的快速变化。

Selenium的魔力

首先,让我们深入了解Selenium的独特功能。作为一款强大的爬虫工具,其不仅可以模拟人类行为,使浏览器依照预设指令运行,而且还能有效突破各种复杂的反爬技术,实现与真实用户几乎无异的访问效果。

安装与配置

在运用Selenium前,首要任务是完成前期准备。此过程需涉及安装Selenium库及相应的浏览器驱动(如Chrome的chromedriver)。尽管步骤略显复杂,但只要确保版本匹配,后续操作便会流畅无阻。

模拟登陆操作

在完成配置之后,便可进行登录功能的代码编制,此过程需涵盖诸多细致步骤,如输入帐户密码、点击确认及等待网页载入等。经过如此精细化的操作,我们将顺利实现登录,为后续双击点赞做好铺垫。

<p><pre>    <code class="hljs bash copyable">   var driver = new webdriver.Builder().forBrowser(<span class="hljs-string">'chrome'</span>).build(); //创建一个chrome 浏览器实例
   driver.get(<span class="hljs-string">"https://user.qzone.qq.com/qq账号"</span>); //打开qq空间地址
   driver.switchTo().frame(driver.findElement(By.id(<span class="hljs-string">"login_frame"</span>)));  //切换登陆功能对应的iframe(不执行该步骤,后续点击操作会失效)
   driver.findElement(By.id(<span class="hljs-string">"switcher_plogin"</span>)).click()    //账号密码登陆按钮点击
   driver.executeScript(<span class="hljs-string">'document.getElementById("u").value="qq账号"'</span>)
   driver.executeScript(<span class="hljs-string">'document.getElementById("p").value="密码"'</span>)
   driver.findElement(By.id(<span class="hljs-string">"login_button"</span>)).click()   //登陆
   driver.manage().window().maximize(); //最大化浏览器
   driver.switchTo().defaultContent();
   dianzan(driver) //调用点赞功能函数
<span class="copy-code-btn">复制代码</span></code></pre></p>


双击点赞的实现

登录成功后,实现双击点赞的挑战出现。我们需精确寻找到网页中的点赞按钮,以编程方式模拟双击过程。然而,若已点过赞的元素再度被双击,则非预期效果。为此,添加过滤机制至关重要,确保仅对尚未点赞的元素执行操作。

解决重复双击问题

实践过程揭示,尽管添加了筛选程序,但仍无法完全消除频繁点击导致的问题。视觉上,点赞按键外观易引起误解,深度探究分析后发现,可借助按键设计判断其状态,进而完善当前代码体系。

<p><pre>    <code class="hljs bash copyable">driver.findElements(By.className(<span class="hljs-string">"fui-icon icon-op-praise"</span>)).then((arr)=>{
        <span class="hljs-keyword">for</span>(<span class="hljs-built_in">let</span> i=0;i<arr.length;i++){
             arr.getCssValue(<span class="hljs-string">'background-position'</span>).then(v=>{
                 <span class="hljs-keyword">if</span>(v==<span class="hljs-string">'-52px -921px'</span>){
                     console.log(i,<span class="hljs-string">'已赞'</span>)
                 }<span class="hljs-keyword">else</span>{
                     console.log(i,<span class="hljs-string">'点赞'</span>)
                     arr.click()
                 }
             })
        }
    })
<span class="copy-code-btn">复制代码</span></code></pre></p>
懒加载的处理

在修复双击点击重复问题之后,一项全新的挑战逐渐显现——懒加载现象。许多网站为提升加载效率而采取此技术,即首次加载仅展示部分内容。然而,这对我们的双击操作构成了严重影响。因此,我们需引入滚动加载机制,以确保所有内容均可顺利加载呈现。

日期判断的加入



为增强对双击操控的精密调控,可加入日期识别功能。通过分析说说中的时间标签,便能明确区分今日与昨日发布的信息,进而更精准地执行双击操作。

前端与后端的结合

<p><pre>    <code class="hljs bash copyable">driver.findElements(By.className(<span class="hljs-string">"info-detail"</span>)).then((arr)=>{
        arr[arr.length-1].getText().then(v=>{
            <span class="hljs-keyword">if</span>(v.length>5){ //当前已经加载非当日说说
                console.log(<span class="hljs-string">'当天的说说已经赞完了'</span>)
                driver.quit()
                driver.sleep(24*60*60*1000)     //点赞时差
                openChrom()
            }<span class="hljs-keyword">else</span>{
                driver.executeScript(<span class="hljs-string">'document.documentElement.scrollTop=100000'</span>);          //模拟滚动加载更多动态
                dianzan(driver) //递归调用
            }
        })
    })
<span class="copy-code-btn">复制代码</span></code></pre></p>
尽管双击功能已得以实现,然而若无法直观呈现于前端界面,其实际效用将大大降低。因此,我们可借助Node.js构建后台服务器,用于接收前端提交的用户名与密码,并实时在后台进行双击操作。如此一来,不仅操作更为直观,同时也能满足多账户的自动化双击需求。

多账户管理的实现

更进一步而言,我们可在后台环境中存储账户密码至数据库,并设定程序自动每日执行检查任务。此举无论对个体用户或是协同团队,均能显著提升工作效率。

结语与展望

经过一系列调整与改进,我们已使手动点赞转变为自动执行的程序。此举既能节省时间成本,又使得点赞过程变得更为生动有趣。再次发问,关于自动化点赞,您认为还存在哪些可能的应用领域?请积极参与评论区讨论,同时不忘给文章点赞及分享。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则