admin 管理员组

文章数量: 1184232

Selenium和AdsPower

Selenium是一个开源的自动化测试框架,主要用于Web应用程序的测试,在本文我们用它来进行相关操作,它能模拟用户在浏览器中的操作。不仅如此,Selenium支持多种浏览器和多种编程语言,与其类似的还有DrissionPage等工具。
要注意 在本文全程使用的Selenium版本4.x,使用过老版本可能会在查找元素时出现错误
例:

# 在selenium3.x 或者 4.x版本中通常需要导入By包 即
from selenium.webdriver.common.by import By
# 对元素进行定位查找时如下
input_key = web.find_element(By.XPATH, '***这里输入xPath***')

# 而selenium2.x 或者 以下版本时 定位元素即操作如下
web.find_element_by_xpath('***这里输入xPath***')

AdsPower是一个浏览器指纹,它可以创建和管理多个虚拟浏览器实例,每个实例可以有独立的配置、cookie 和代理设置,在本文我们主要用它来创建浏览器环境,便于绕开大部分的浏览器指纹检测。

AdsPower操作

下载连接:AdsPower
下载打开AdsPower(下载过程略—>这部分不会或者下载在C盘的可以重开)
点击API按钮

我由于只是测试所用 故这边使用的三天试用版本
查看API接口状态是否成功 并点击生成API Key(如果是已经生成过的 可以进行重置再查看复制)
复制相关信息: http://local.adspower:50325 和你的key

这里附上AdsPower官方提供的API文档: API文档

创建一个或者多个环境

环境创建按自己需求来 我这里是测试多进程3个环境同时运行 所以创建了三个
以下是其中一个 剩余的也大致相同


这里的cookie根据你要打开的网站来分(如Amazon、JD等等) 可以手动获取也可以使用Google插件进行获取
这里我更推荐使用插件进行获取 手动获取也可行 但是后续还要对格式进行修改
这里推荐使用 Cookie-Editor插件
Cookie-Editor: 官方网站


关于代理 如果是有跨境电商需求的话 先导入代理池再选择即可
这样就创建成功了三个环境

根据官方文档可以得知
http://local.adspower:50325/status 可以查看当前状态
而启动浏览器需要带上user_id参数
注意这里的参数指的是环境ID–>knhoewu而非编号ID
之前本人多次运行失败最后发现是把环境ID写成了编号ID 故这里提醒各位别踩坑

启动浏览器需要向其发送一个GET请求 格式如下
http://local.adspower:50325/api/v1/browser/start?user_id=你的要启动的环境ID&api_key=之前API中的Key"

Selenium操作

Python启动Ads

到此为止AdsPower所需要的操作设置以及参数我们就获取的差不多了
接下来我们转到Python中进行代码的编写

 安装selenium ---> pip install selenium

由于调用API打开Ads需要发送GET请求 故这边还需要导入requests库
编写启动函数

import requests
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
# PROFILE_ID为环境ID
def start_Ads(PROFILE_ID):
    BASE_URL = "http://local.adspower:50325/"
    API_KEY = "8387f2a758e1a95af2c7343181a5feb8"  # 替换为你的 API Key

    # 启动 Adspower
    start_profile_url = f"{BASE_URL}/api/v1/browser/start?user_id={PROFILE_ID}&api_key={API_KEY}"
    response = requests.get(start_profile_url).json()

    # 检查是否启动成功
    if response["code"] == 0:
        print(f"Adspower 启动成功,返回信息")
        chrome_driver_path = response["data"]["webdriver"]
        debugger_address = response["data"]["ws"]["selenium"]
        print(chrome_driver_path)
    else:
        print(f"启动失败: {response['msg']}")
        exit(1)

start_Ads('knhoewu')

运行结果如下 记住返回的chrome_driver_path

Adspower 启动成功,返回信息
C:\xxxxx\xx\xxx\xxx\\chrome_127\chromedriver.exe

Process finished with exit code 0

启动selenium


    # 打开 Selenium -> Adspower
    options = webdriver.ChromeOptions()
    options.add_experimental_option("debuggerAddress", debugger_address)
    web = webdriver.Chrome(service=Service("C:\\xxxxx\\chromedriver.exe"),options=options)
    web.implicitly_wait(30)

    # 访问页面
    web.get("https://www.jd/")
    print("当前页面标题:", web.title)

start_Ads("ID")

启动成功如下页面
会发现编号为3的浏览器已经启动

一次性启动多个浏览器

之前本人尝试使用过多线程启动 但是多多少少有些bug 故可能想到是selenium启动多线程是导致了线程竞争
因此这里我们使用多进程multiprocessing 来隔离资源 防止问题的产生
导入multiprocessing库

# 使用多进程运行多个实例
if __name__ == "__main__":
    # 定义不同的 Profile IDs
    profile_ids = ["环境1ID", "环境2ID", "环境3ID"]

    # 创建多个进程
    processes = []
    for profile_id in profile_ids:
        process = Process(target=start_Ads, args=(profile_id,))
        processes.append(process)

    # 启动所有进程
    for process in processes:
        process.start()
        time.sleep(2)

    # 等待所有进程结束
    for process in processes:
        process.join()

可以看到均启动成功

到此 启动完成—后续就可以使用selenium在上面进行各种各样的操作啦!

如果觉得文章对你有帮助 别忘了关注 点赞 收藏

完整代码如下

import requests
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from multiprocessing import Process  # 替换 threading 为 multiprocessing
# PROFILE_ID为环境ID
def start_Ads(PROFILE_ID):
    BASE_URL = "http://local.adspower:50325/"
    API_KEY = "API Key"  # 替换为你的 API Key
    # 启动 Adspower
    start_profile_url = f"{BASE_URL}/api/v1/browser/start?user_id={PROFILE_ID}&api_key={API_KEY}"
    response = requests.get(start_profile_url).json()

    # 检查是否启动成功
    if response["code"] == 0:
        print(f"Adspower 启动成功,返回信息")
        chrome_driver_path = response["data"]["webdriver"]
        debugger_address = response["data"]["ws"]["selenium"]
        print(chrome_driver_path)
    else:
        print(f"启动失败: {response['msg']}")
        exit(1)

    # 打开 Selenium -> Adspower
    options = webdriver.ChromeOptions()
    options.add_experimental_option("debuggerAddress", debugger_address)
    web = webdriver.Chrome(service=Service("C:\\xxxxxx\\chrome_126\\chromedriver.exe"),options=options)
    web.implicitly_wait(30)
    # 访问页面
    web.get("https://www.jd/")
    print("当前页面标题:", web.title)


# 使用多进程运行多个实例
if __name__ == "__main__":
    # 定义不同的 Profile IDs
    profile_ids = ["环境1ID", "环境2ID", "环境3ID"]

    # 创建多个进程
    processes = []
    for profile_id in profile_ids:
        process = Process(target=start_Ads, args=(profile_id,))
        processes.append(process)

    # 启动所有进程
    for process in processes:
        process.start()
        time.sleep(2)

    # 等待所有进程结束
    for process in processes:
        process.join()

本文标签: 指纹 浏览器 操作 selenium AdsPower