【问题标题】:Cant find element on office 365 page with Selenium/Python/Chrome使用 Selenium/Python/Chrome 在 Office 365 页面上找不到元素
【发布时间】:2023-02-22 06:18:11
【问题描述】:

我尝试在office 365环境下找到并点击邮件按钮。

见图片:

我认为这是因为该按钮位于网页的工具栏/子框架中。我找不到它在 iframe 中。

问题似乎出在以下代码行中:

WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//button[@id='Mail']"))).click()

HTML 代码如下所示:

我得到的错误是:

Traceback (most recent call last):
  File "C:\Users\123\AppData\Local\00-Python\test.py", line 21, in <module>
    WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//button[@id='Mail']"))).click()
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\123\AppData\Local\Programs\Python\Python311\Lib\site-packages\selenium\webdriver\support\wait.py", line 95, in until
    raise TimeoutException(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message: 
Stacktrace:
Backtrace:
    (No symbol) [0x009A6643]
    (No symbol) [0x0093BE21]
    (No symbol) [0x0083DA9D]
    (No symbol) [0x00871342]
    (No symbol) [0x0087147B]
    (No symbol) [0x008A8DC2]
    (No symbol) [0x0088FDC4]
    (No symbol) [0x008A6B09]
    (No symbol) [0x0088FB76]
    (No symbol) [0x008649C1]
    (No symbol) [0x00865E5D]
    GetHandleVerifier [0x00C1A142+2497106]
    GetHandleVerifier [0x00C485D3+2686691]
    GetHandleVerifier [0x00C4BB9C+2700460]
    GetHandleVerifier [0x00A53B10+635936]
    (No symbol) [0x00944A1F]
    (No symbol) [0x0094A418]
    (No symbol) [0x0094A505]
    (No symbol) [0x0095508B]
    BaseThreadInitThunk [0x76D900F9+25]
    RtlGetAppContainerNamedObjectPath [0x772D7BBE+286]
    RtlGetAppContainerNamedObjectPath [0x772D7B8E+238]

【问题讨论】:

    标签: python google-chrome selenium-webdriver find element


    【解决方案1】:

    尝试改用EC.visibility_of_element_located。并试试这个 XPath 表达式//div[@title="Outlook"]

    下面是我使用的完整代码,运行良好:

    driver = webdriver.Chrome()
    driver.maximize_window()
    driver.get(url="https://www.office.com/")
    WebDriverWait(driver,20).until(EC.visibility_of_element_located((By.XPATH,'//a[contains(text(),"Sign in")]'))).click()
    WebDriverWait(driver,20).until(EC.visibility_of_element_located((By.NAME,'loginfmt'))).send_keys(f"yourusername")
    WebDriverWait(driver,20).until(EC.visibility_of_element_located((By.ID,'idSIButton9'))).click()
    WebDriverWait(driver,20).until(EC.visibility_of_element_located((By.NAME,'loginfmt'))).send_keys(f"yourusername")
    WebDriverWait(driver,20).until(EC.visibility_of_element_located((By.NAME,'passwd'))).send_keys(f"yourpassword")
    WebDriverWait(driver,20).until(EC.visibility_of_element_located((By.ID,'idSIButton9'))).click()
    WebDriverWait(driver,20).until(EC.visibility_of_element_located((By.ID,'idBtn_Back'))).click()
    WebDriverWait(driver,20).until(EC.visibility_of_element_located((By.XPATH,'//div[@title="Outlook"]'))).click()
    

    注意:以上代码仅供参考。我认为你只能使用最后一行代码(你实际点击 Outlook 的地方)。您不需要在所有代码行中使用 ExplicitWait

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多