自动化操作被制裁解决方案

场景

我们做自动化操作的时候,经常被浏览器检测为自动化测试工具,然后被各种制裁,例如:什么真人验证,什么同用不同源(意思是一个东西,网页上和自动化网页效果不一样),反复制裁,我就想能否有一个方案,不让浏览器知道是自动化工具在操作呢?

论证 求道

纠错

那我们就束手无策了吗?我谷歌了一下,很多人说加什么User-agent,什么浏览器xx,其实都是不正确的,因为那是针对请求的,并不是针对自动化操作的,自动化操作最重要义是什么?是替代无意义的重复劳动,那么这个行为一定是仿人的,那我们有什么办法呢?

灵感

这个时候我发现我打开了一个谷歌浏览器,然后进行同样的操作,拦截一个自动机浏览器,做一样的操作,他们得到的结果是截然不同的,我深深郁闷,如果能操作人为浏览器就好了!哎! 什么?操作人为浏览器???那我岂不是可以用远程控制做到,说干就干。

写了这个代码:

python 复制代码
import subprocess
import random
import socket
# 
# @Author: Herche Jane
# @Date: 2024-08-12

class ChromeController:
    def __init__(self):
        self.process = None
        self.port = None

    def find_free_port(self):
        """Find a free port by opening a temporary socket."""
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.bind(('', 0))
        port = s.getsockname()[1]
        s.close()
        return port

    def open_chrome(self):
        """Open Chrome browser with a free debugging port."""
        try:
            # 生成随机的未使用端口
            self.port = self.find_free_port()

            # Chrome 启动命令,路径使用双引号括起来
            chrome_command = f'"C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe" --remote-debugging-port={self.port} --user-data-dir="xxx"'

            # 启动 Chrome 浏览器
            self.process = subprocess.Popen(chrome_command, shell=True)

            return self.port
        except Exception as e:
            print(f"Error opening Chrome: {e}")
            return -1

    def close_chrome(self):
        """Close the Chrome browser if it's running."""
        if self.process:
            try:
                self.process.terminate()  # 结束 Chrome 进程
                self.process.wait()
                self.process = None
                print("Chrome closed successfully.")
            except Exception as e:
                print(f"Error closing Chrome: {e}")


if __name__ == "__main__":
    chrome_controller = ChromeController()
    port = chrome_controller.open_chrome()

    if port != -1:
        print(f"Chrome started on port {port}")
    else:
        print("Failed to start Chrome.")

这就等于是人为打开而不是使用google driver打开的浏览器,我对其一番操作得到的结果果然和我手动操作的一模一样

行动和论证

我接下来使用自动化接管了这个浏览器,果然,一顿操作下来得到的结果和手动的一模一样

结论

必要情况下:使用命令打开 + 自动化接管方式 就可以解决大部分被制裁的问题

相关推荐
梁正雄1 小时前
15、Docker swarm-2-安装与存储
运维·docker·容器
fyakm1 小时前
Linux文件搜索:grep、find命令实战应用(附案例)
linux·运维·服务器
wanhengidc2 小时前
云手机存在的意义是什么
运维·服务器·arm开发·安全·智能手机
007php0074 小时前
某游戏大厂 Java 面试题深度解析(四)
java·开发语言·python·面试·职场和发展·golang·php
snow@li4 小时前
运维:部署Jenkins
运维·jenkins
景彡先生4 小时前
Python pandas数据透视表(pivot_table)详解:从入门到实战,多维数据分析利器
python·数据分析·pandas
A~taoker5 小时前
扣子工作流——测试用例表格生成
功能测试·自动化
大海绵啤酒肚5 小时前
OpenStack虚拟化平台之T版搭建部署
linux·运维·云计算·openstack
Blossom.1185 小时前
把AI“编”进草垫:1KB决策树让宠物垫自己报「如厕记录」
java·人工智能·python·算法·决策树·机器学习·宠物
极客数模6 小时前
2025年(第六届)“大湾区杯”粤港澳金融数学建模竞赛准备!严格遵循要求,拿下大奖!
大数据·python·数学建模·金融·分类·图论·boosting