0


Selenium 如何在登录过程中从有界面模式切换到无头模式

意思是首先在正常模式下使用Selenium进行登录,以便观察登录过程中的任何问题,比如输入账号密码、处理验证码等,一旦成功登录后再切换到无头模式以继续后续的自动化测试。下面是如何在登录成功后切换到无头模式的示例步骤:

  1. 正常模式下进行登录:首先在正常模式下启动WebDriver,手动完成登录过程。

  2. 登录成功后切换到无头模式:登录成功后,获取当前WebDriver的配置选项,然后创建新的选项对象,设置无头模式,并重新应用到WebDriver上。

以下是Python语言中的示例代码:


from selenium import webdriver

from selenium.webdriver.chrome.options import Options

 

# 正常模式下进行登录

driver = webdriver.Chrome()

 

# 打开登录页面

driver.get("http://www.example.com/login")

 

# 输入账号和密码(示例中省略了具体的输入代码)

# ...

 

# 处理验证码(示例中省略了具体的处理验证码的代码)

# ...

 

# 等待登录成功,确保已登录到任务界面

# ...

 

# 切换到无头模式

original_options = Options()

original_options = driver.options

 

# 创建新的选项对象并设置无头模式

new_options = Options()

new_options.headless = True

new_options.add_argument("--disable-gpu") # 某些系统下是必须的

new_options.add_argument("--no-sandbox") # 某些系统下是必须的

 

# 应用新的选项到WebDriver

driver.close() # 关闭当前浏览器窗口

driver.options = new_options # 应用新的选项

driver.start_client() # 重新启动WebDriver的HTTP客户端

driver.execute_script("window.location.href = 'http://www.example.com';") # 重新打开页面

 

# 继续在无头模式下进行测试

# ...

 

# 关闭 WebDriver

driver.quit()

请注意,这段代码中使用了execute_script来刷新当前页面,确保在无头模式下继续操作。另外,由于登录过程可能涉及到处理验证码等复杂操作,所以示例中并未包含具体的输入账号密码和处理验证码的代码,你需要根据实际情况来编写这部分代码。

此外,由于在切换到无头模式时关闭并重新启动了WebDriver,可能需要重新导航到之前登录成功的页面,或者重新执行某些操作以确保在无头模式下能够继续测试。

下面是一个使用类定义的Selenium操作的Python示例,该示例将所有必要的数据作为参数传递给类的方法。这个示例包括初始化WebDriver、打开登录页面、输入用户名和密码、提交登录表单以及切换到无头模式的步骤。

 from selenium import webdriver
 from selenium.webdriver.common.keys import Keys
 from selenium.webdriver.common.by import By
 from selenium.webdriver.chrome.options import Options

class SeleniumLogin:
     def __init__(self, url, username, password, headless=False):
         self.url = url
         self.username = username
         self.password = password
         self.headless = headless
         self.driver = None
         self._setup_driver()

    def _setup_driver(self):
         options = Options()
         if self.headless:
             options.add_argument("--headless")
             options.add_argument("--disable-gpu")
             options.add_argument("--no-sandbox")
         self.driver = webdriver.Chrome(options=options)

    def login(self):
         self.driver.get(self.url)
         # 假设登录表单的用户名和密码输入框的id分别是"username"和"password"
         username_field = self.driver.find_element(By.ID, "username")
         password_field = self.driver.find_element(By.ID, "password")
         
         username_field.send_keys(self.username)
         password_field.send_keys(self.password)
         
         # 假设登录按钮的id是"loginButton"
         login_button = self.driver.find_element(By.ID, "loginButton")
         login_button.click()

    def switch_to_headless(self):
         if not self.headless:
             original_options = self.driver.options
             self.headless = True
             self.driver.close()  # 关闭当前会话
             self.driver.options.headless = True  # 设置无头模式
             self.driver.start_client()  # 重新启动HTTP客户端
             self.driver.execute_script("window.location.href = arguments[0];", self.url)  # 重新打开页面

    def quit(self):
         self.driver.quit()

# 使用示例
 if __name__ == "__main__":
     login_url = "http://www.example.com/login"
     login_username = "your_username"
     login_password = "your_password"

    # 初始化SeleniumLogin类,传入登录信息和无头模式标志
     login_instance = SeleniumLogin(login_url, login_username, login_password, headless=False)
     
     # 执行登录
     login_instance.login()
     
     # 登录成功后切换到无头模式
     login_instance.switch_to_headless()
     
     # 执行其他自动化任务...
     # ...

    # 完成所有操作后退出
     login_instance.quit()

在这个示例中:

  • SeleniumLogin 类用于封装登录逻辑。
  • __init__ 方法用于初始化类实例,设置登录URL、用户名、密码和是否使用无头模式。
  • _setup_driver 方法用于设置WebDriver选项并启动WebDriver。
  • login 方法用于执行登录过程,包括导航到登录页面、输入用户名和密码以及点击登录按钮。
  • switch_to_headless 方法用于在登录成功后切换到无头模式。
  • quit 方法用于安全地退出WebDriver。

在实际使用中,你需要根据目标网站的实际情况调整元素定位方式(如使用ID、名称、CSS选择器、XPath等)以及处理验证码等额外的登录步骤。此外,由于网站结构的变化,示例代码可能需要相应的调整。

标签: selenium python

本文转载自: https://blog.csdn.net/weixin_42771529/article/details/138465377
版权归原作者 PyAIGCMaster 所有, 如有侵权,请联系我们删除。

“Selenium 如何在登录过程中从有界面模式切换到无头模式”的评论:

还没有评论