实现场景:同时实现两个用户在不同电脑上登录。
前提:必须安装jdk
1.master机上部署grid
grid下载地址:http://selenium-release.storage.googleapis.com/index.html,下载的版本一定要与master机的selenium版本一致。我的是3.141.0
将下载好的jar包放在某个路径下,输入命令启动grid,成功如下图
java -jar selenium-server-standalone-3.141.0.jar -role hub
通过http://192.168.10.117:4444/grid/console可直接访问Grid控制台。IP根据自己的实际情况而定。
2.slave及启动grid(连接master机)
将jar包复制到slave机上某个路径下,输入命令启动grid,成功如下图。注意:slave机里chromedriver.exe一定要与其谷歌浏览器版本对应,不然会出错
java -Dwebdriver.chrome.driver="C:\Users\Administrator\Desktop\grid\chromedriver.exe" -jar selenium-server-standalone-3.141.0.jar -role webdriver -hub http://192.168.10.117:4444/grid/register/ -port 7778 -maxSession 5
-Dwebdriver.chrome.driver:表明驱动路径
-hub:表示master机的grid地址
-port:指定端口
-maxSession:一台计算机同时允许打开多少个浏览器窗口(建立会话)
1.代码
from core import driver
from Page import UpFile
from time import sleep
from selenium import webdriver
from multiprocessing import Pool
class GridLogin():
def upfile(self, username):
'''
进行登录
@param username: 用户名
@return:
'''
if username == 'username100':
'''判断用户,若是username100在本地打开浏览器'''
self.driver = driver()
self.lw = UpFile(self.driver)
sleep(2)
else:
'''判断用户,若是username200远程启动192.168.10.158:7778打开浏览器'''
chrome_capabilities = {
"browserName": "chrome",
"version": "81.0.4044.138", # 注意版本号一定要写对
"platform": "ANY",
"javascriptEnabled": True,
"marionette": True
}
self.driver = webdriver.Remote("http://192.168.10.158:7778/wd/hub",
desired_capabilities=chrome_capabilities) # 注意端口号4444是我们上文中映射的宿主机端口号
self.lw = UpFile(self.driver)
self.lw.open()
self.lw.sign_in(username=username, password='admin123', captcha=1)
self.lw.quit()
def run(self):
'''
多进程执行
@return:
'''
# 配置登录的账号
username = ['username100', 'username200']
# 设置线程数
pool = Pool(processes=2)
for i in username:
'''
(1)循环遍历,将2个子进程添加到进程池(相对父进程会阻塞)'
(2)每次执行2个子进程,等一个子进程执行完后,立马启动新的子进程。(相对父进程不阻塞)'
'''
pool.apply_async(self.upfile, args=(i,))
pool.close()
pool.join()
if __name__ == '__main__':
GridLogin().run()
2.代码解释
self.lw = UpFile(self.driver):这行代码我在类的底层进行封装了一些方法,所以我在这里必须实例化,具体的使用要根据你们真实情况而定。
self.driver = webdriver.Remote:这行代码主要是连接salve机,IP是slave的IP地址,端口是启动slave时输入的端口 -p
run:这个方法主要是实现多进程,详情可参考:https://blog.csdn.net/qq_36076898/article/details/106137131