使用 Python(Cookie Clicker) 在 Selenium 中进行多处理
Multi Processing in Selenium with Python(Cookie Clicker)
基本上,我想在 1 个 chrome 选项卡上制作一个 cookie clicker bot 运行 但在不同的进程上,因为它会使 bot 快速点击
import math
import os
from multiprocessing import Process, Pool, queues
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome("C:/Users/hazim/Desktop/Main/Coding/Projects/Webscraping/drivers/chromedriver")
web = "https://orteil.dashnet.org/cookieclicker/"
driver.get(web)
cookieX = "/html/body/div[2]/div[2]/div[15]/div[8]/div[1]"
def Click(xpath):
driver.find_element_by_xpath(xpath).click()
def SendKeys(xpath, input):
driver.find_element_by_xpath(xpath).send_keys(input)
def Wait(time, xpath):
WebDriverWait(driver, time).until(EC.presence_of_element_located((By.XPATH, xpath)))
def Run():
Wait(10, cookieX)
Click(cookieX)
processes = []
if __name__ == "__main__":
for i in range(os.cpu_count()):
print('registering process %d' % i)
processes.append(Process(target=Run))
processes[-1].start()
for process in processes:
process.join()
但我的问题是,当我 运行 这样做时,它又打开了 12 个选项卡,因为我有 12 个逻辑进程
我认为问题在于如何与其他进程共享内存
或
Selenium 像处理新对象一样处理多进程。
如果我完全错了,你能解释一下你答案中的概念吗?
每次使用 driver = webdriver.Chrome
启动 selenium 时,您都在为 运行 创建一个新浏览器。这就是该工具设计的工作方式 - 它是一个需要将自己与其他测试的状态可能是 运行ning.
如果您想尝试跨多个进程与同一个浏览器交互,您需要重构您的脚本,以便只创建一个 chrome 个实例。
也就是说...
如果您只是想要在您的游戏中获取 cookie,与其尝试成为用户并一遍又一遍地点击,不如查看游戏的运行方式并与代码交互.
转到 devtools 控制台并设置您想要的值:
Game.cookies = 123456
你可以随意上下:
基本上,我想在 1 个 chrome 选项卡上制作一个 cookie clicker bot 运行 但在不同的进程上,因为它会使 bot 快速点击
import math
import os
from multiprocessing import Process, Pool, queues
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome("C:/Users/hazim/Desktop/Main/Coding/Projects/Webscraping/drivers/chromedriver")
web = "https://orteil.dashnet.org/cookieclicker/"
driver.get(web)
cookieX = "/html/body/div[2]/div[2]/div[15]/div[8]/div[1]"
def Click(xpath):
driver.find_element_by_xpath(xpath).click()
def SendKeys(xpath, input):
driver.find_element_by_xpath(xpath).send_keys(input)
def Wait(time, xpath):
WebDriverWait(driver, time).until(EC.presence_of_element_located((By.XPATH, xpath)))
def Run():
Wait(10, cookieX)
Click(cookieX)
processes = []
if __name__ == "__main__":
for i in range(os.cpu_count()):
print('registering process %d' % i)
processes.append(Process(target=Run))
processes[-1].start()
for process in processes:
process.join()
但我的问题是,当我 运行 这样做时,它又打开了 12 个选项卡,因为我有 12 个逻辑进程
我认为问题在于如何与其他进程共享内存
或
Selenium 像处理新对象一样处理多进程。
如果我完全错了,你能解释一下你答案中的概念吗?
每次使用 driver = webdriver.Chrome
启动 selenium 时,您都在为 运行 创建一个新浏览器。这就是该工具设计的工作方式 - 它是一个需要将自己与其他测试的状态可能是 运行ning.
如果您想尝试跨多个进程与同一个浏览器交互,您需要重构您的脚本,以便只创建一个 chrome 个实例。
也就是说...
如果您只是想要在您的游戏中获取 cookie,与其尝试成为用户并一遍又一遍地点击,不如查看游戏的运行方式并与代码交互.
转到 devtools 控制台并设置您想要的值:
Game.cookies = 123456
你可以随意上下: