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
版权声明:本文标题:使用Selenium操作指纹浏览器--AdsPower 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1765056279a3343610.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论