Python 无法将焦点恢复到主窗口并单击“断开连接”按钮

Python 无法将焦点恢复到主窗口并单击“断开连接”按钮,python,selenium,selenium-webdriver,Python,Selenium,Selenium Webdriver,我有下面的代码 返回主窗口后,无法获得焦点,未单击“断开连接”按钮 parent_handle = driver.window_handles[0] #clicks on link driver.find_element_by_xpath("//*[@id='content']/div[4]/div/p/a").click() child_handle = [x for x in driver.window_handles if x != parent_handle][0] driver.

我有下面的代码

返回主窗口后,无法获得焦点,未单击“断开连接”按钮

parent_handle = driver.window_handles[0]

#clicks on  link
driver.find_element_by_xpath("//*[@id='content']/div[4]/div/p/a").click()

child_handle = [x for x in driver.window_handles if x != parent_handle][0]
driver.switch_to.window(child_handle)

time.sleep(2)

#will work on this winow

driver.close()

driver.switch_to.window(parent_handle)
time.sleep(30)

#click on Disconnect button on toolbar on main window
driver.find_element_by_xpath("//a[contains(text(), 'btn btn-outline-dark  et-disconnect-link et-disconnect-warning-link')]").click()
我尝试了几种方法,但得到了下面的错误

selenium.common.exceptions.NoSuchElementException: Message: no such element: 
Unable to locate element: {"method":"xpath","selector":"//a[contains(text(), 'btn btn-outline-dark  et-disconnect-link et-disconnect-warning-link')]"}
  (Session info: chrome=79.0.3945.117)

您没有发布html,但是
xpath
看起来像类,而不是文本

driver.find_element_by_xpath("//a[@class='btn btn-outline-dark et-disconnect-link et-disconnect-warning-link')]").click()
或通过
css\u选择器

driver.find_element_by_css_selector(".btn.btn-outline-dark.et-disconnect-link.et-disconnect-warning-link").click()
您还应该使用显式等待,而不是
time.sleep(30)


看来你就快到了。你需要考虑以下几点:

  • 假设最初只有一个
    窗口句柄
    打开,而不是
    父窗口句柄=驱动程序。窗口句柄[0]
    您可以使用
    驱动程序。当前窗口句柄
  • 通过
    driver.close()
    关闭子窗口后,可以使用
    切换到.default\u content()
  • btn btn轮廓暗et断开连接et断开警告链接
    似乎是
    属性的值
  • 由于您的用例是调用
    click()
    ,您必须将
    元素的WebDriverWait设置为可单击()
    ,并且您可以使用以下选项:

    • 使用
      CSS\u选择器

      parent_handle = driver.current_window_handle
      #clicks on  link
      driver.find_element_by_xpath("//*[@id='content']/div[4]/div/p/a").click()
      child_handle = [x for x in driver.window_handles if x != parent_handle][0]
      driver.switch_to.window(child_handle)
      #will work on this winow
      driver.close()
      driver.switch_to.window(parent_handle)
      #click on Disconnect button on toolbar on main window
      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "a.btn.btn-outline-dark..et-disconnect-link.et-disconnect-warning-link"))).click()
      
    • 使用
      XPATH

      parent_handle = driver.current_window_handle
      #clicks on  link
      driver.find_element_by_xpath("//*[@id='content']/div[4]/div/p/a").click()
      child_handle = [x for x in driver.window_handles if x != parent_handle][0]
      driver.switch_to.window(child_handle)
      #will work on this winow
      driver.close()
      driver.switch_to.window(parent_handle)
      #click on Disconnect button on toolbar on main window
      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//a[@class='btn btn-outline-dark  et-disconnect-link et-disconnect-warning-link']"))).click()
      
    • 注意:您必须添加以下导入:

      from selenium.webdriver.support.ui import WebDriverWait
      from selenium.webdriver.common.by import By
      from selenium.webdriver.support import expected_conditions as EC
      
请查看
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC