gpt4 book ai didi

python - 在 Python 中管理 Selenium 的多个实例

转载 作者:太空宇宙 更新时间:2023-11-03 18:15:11 25 4
gpt4 key购买 nike

我试图能够同时管理多个 Selenium 实例,但运气不佳。我不是 100% 确定这是否可能。我有一个使用 PyQT 构建的 GUI 应用程序,它从 SQL 数据库检索客户的信息。这是一个相当简单的应用程序,可让我们的用户轻松登录和退出客户的帐户。他们单击客户的名称,按“登录”,它会启动 Firefox 实例,登录到帐户,并保持打开状态,以便用户可以执行他们需要执行的任何操作。完成后,他们单击“注销”按钮,系统会注销帐户并退出 webdriver 实例。

我试图提供的是一种让他们同时登录多个帐户的方法,同时仍然保持单击他们登录的客户名称之一、处理该帐户的注销并关闭的能力该浏览器实例。

我希望的一件事是能够通过进程 ID 或唯一 ID 来控制网络驱动程序,我可以将其存储在将其链接到该客户端的字典中,这样当他们在应用程序中单击客户端的名称时,然后按注销,它使用 PyQT 中的某些内容(例如“client_name = self.list_item.currentItem().text()”)来获取他们选择的客户端的名称(我也已经将其用于其他用途),查找唯一 ID 或进程 ID,并向该实例发送注销命令,然后关闭该实例。

这可能不是最好的方法,但这是我能想到的唯一方法。

编辑:我也知道您可以使用 driver.session_id 检索 Selenium session_id (考虑到您的 webdriver 实例被分配为“driver”),但到目前为止我还没有看到能够通过此 session_id 控制 webdriver 实例的任何内容.

EDIT2:这是我所拥有的一个令人难以置信的精简版本:

from selenium import webdriver
from PyQt4 import QtGui, QtCore


class ClientAccountManager(QtGui.QMainWindow):

def __init__(self):

super(ClientAccountManager, self).__init__()

grid = QtGui.QGridLayout()
# Creates the list box
self.client_list = QtGui.QListWidget(self)

# Populates the list box with owner data
for name in client_names.itervalues():
item = QtGui.QListWidgetItem(name)
self.client_list.addItem(item)

# Creates the login button
login_btn = QtGui.QPushButton("Login", self)
login_btn.connect(login_btn, QtCore.SIGNAL('clicked()'), self.login)

# Creates the logout button
logout_btn = QtGui.QPushButton("Logout", self)
logout_btn.connect(logout_btn, QtCore.SIGNAL('clicked()'), self.logout)


def login(self):

# Finds the owner info based on who is selected
client_name = self.client_list.currentItem().text()
client_username, client_password = get_credentials(client_name)

# Creates browser instance
driver = webdriver.Firefox()

# Logs in
driver.get('https://www.....com/login.php')
driver.find_element_by_id('userNameId').send_keys(client_username)
driver.find_element_by_id('passwordId').send_keys(client_password)
driver.find_element_by_css_selector('input[type=submit]').click()


def logout(self):

# Finds the owner info based on who is selected
client_name = self.client_list.currentItem().text()

# Logs out
driver.get('https://www....com/logout.php')

# Closes the browser instance
driver.quit()


def main():

app = QtGui.QApplication(sys.argv)
cpm = ClientAccountManager()
cpm.show()
sys.exit(app.exec_())


if __name__ == '__main__':
main()

最佳答案

您可以有多个驱动程序。只需多次调用 webdriver.Firefox() 并保留对每个驱动程序的引用即可。有些人报告了奇怪的行为,但它基本上有效。

driver.close() 将关闭浏览器并且不获取 ID。

关于python - 在 Python 中管理 Selenium 的多个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25144545/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com