【问题标题】:Switching to new window with selenium python使用 selenium python 切换到新窗口
【发布时间】:2021-07-31 10:34:57
【问题描述】:

我有一个包含所有xpath 链接的列表

这是我的代码:


original_window = driver.current_window_handle
for stat in stats:
  
     
     
     WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, stat))).click()
     WebDriverWait(driver, 10).until(EC.number_of_windows_to_be(2))
     for window_handle in driver.window_handles:
        if window_handle != original_window:
            driver.switch_to.window(window_handle)
            print(driver.current_url)
            driver.close()
            driver.switch_to.window(original_window)
            print(driver.current_url)
            break
            
     time.sleep(15)    

它第一次工作,但之后它给了我这个错误:

https://s5.sir.sportradar.com/sports4africa/fr/1/season/81152/headtohead/322375/90970/match/27122060
https://www.bountou1x2.com/sport.jsp
Traceback (most recent call last):
  File "c:\Users\Hama\Documents\Python project\test3.py", line 45, in <module>
    WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, stat))).click()
  File "C:\Users\Hama\AppData\Local\Programs\Python\Python39\lib\site-packages\selenium\webdriver\support\wait.py", line 80, in until
    raise TimeoutException(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message:

以下是 Stats 的定义方式:

stats = []

for a in driver.find_elements_by_tag_name("tr"):
   aa = a.get_attribute("idavv")
   if aa is not None:
      aaa = "//*[@id=\"simple-row-box-prematch-" + aa + "\"]/td[6]/table/tbody/tr/td[1]"
     
      stats.append(aaa)
      

如果我只让点击事件,代码可以像这样正常工作并打开所有窗口:

for stat in stats:
  
     
     
     WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, stat))).click()
     
     time.sleep(15)    

该错误仅在我尝试从旧窗口切换到新窗口以及从新窗口切换到旧窗口时出现,它仅在第一次时有效

我打印当前的 url 只是为了看看它是否正在像它一样切换

感谢大家的帮助,谢谢大家

【问题讨论】:

  • 到目前为止,我只能说,而且您可能已经知道,stat 未发现可点击并在 10 秒后超时。你能包括你如何定义stats吗?还有你正在测试的页面的 HTML 吗?
  • @C.Peck 我添加了 stats 是如何定义的原始页面的 url 是link,如果我只是循环点击,它会点击所有链接,当我切换时会出现问题到新窗口
  • 首先,这行让我很困惑。 aa = a.get_attribute("idavv") -- 您正在尝试获取名为 idavv 的属性的值?我在页面上的任何地方都找不到该属性。我也找不到任何 ID 为simple-row-box-prematch 的元素。你能帮我弄清楚你想找到哪些元素吗?
  • 当你打开有一个叫TODAY的按钮,它在页面的左边,当你点击那个按钮你会得到链接列表

标签: python selenium new-window


【解决方案1】:

我找到了解决我的问题的方法,它是框架,它第一次工作,因为选择了框架,每次我切换回我都必须切换到框架,所以我的代码变成:

 WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, stat))).click()
 WebDriverWait(driver, 10).until(EC.number_of_windows_to_be(2))
 for window_handle in driver.window_handles:
    if window_handle != original_window:
        driver.switch_to.window(window_handle)
        print(driver.current_url)
        driver.close()
        driver.switch_to.window(original_window)
        driver.switch_to.frame(driver.find_element_by_id("receiver"))
        
        break

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-03
    • 2015-05-01
    • 2012-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-15
    • 2019-01-11
    相关资源
    最近更新 更多