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.net:50325 和你的key
这里附上AdsPower官方提供的API文档: API文档
创建一个或者多个环境
这里的cookie根据你要打开的网站来分(如Amazon、JD等等) 可以手动获取也可以使用Google插件进行获取
这里我更推荐使用插件进行获取 手动获取也可行 但是后续还要对格式进行修改
这里推荐使用 Cookie-Editor插件
Cookie-Editor: 官方网站
关于代理 如果是有跨境电商需求的话 先导入代理池再选择即可
这样就创建成功了三个环境
根据官方文档可以得知
http://local.adspower.net:50325/status 可以查看当前状态
而启动浏览器需要带上user_id参数
注意这里的参数指的是环境ID–>knhoewu而非编号ID
之前本人多次运行失败最后发现是把环境ID写成了编号ID 故这里提醒各位别踩坑
启动浏览器需要向其发送一个GET请求 格式如下
http://local.adspower.net:50325/api/v1/browser/start?user_id=你的要启动的环境ID&api_key=之前API中的Key"
Selenium操作
Python启动Ads
安装selenium ---> pip install selenium
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.net:50325/" API_KEY = "8387f2a758e1a95af2ca5feb8" # 替换为你的 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.com/") 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.net: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.com/") 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分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/96627.html