如何使用 selenium python 下载电子邮件附件?

how to download email attachment with selenium python?

这是页面下载部分的html:

<ul id="attachment-list" class="attachmentslist"><li class="application vnd.openxmlformats-officedocument.spreadsheetml.sheet xlsx" id="attach2"><a href="./?_task=mail&amp;_action=get&amp;_mbox=INBOX&amp;_uid=1&amp;_token=ukxOEh6bQm6Iv7gN59mROEbGpTrczta3&amp;_part=2" onclick="return rcmail.command('load-attachment','2',this)" onmouseover="rcube_webmail.long_subject_title_ex(this, 0)" title="" class="filename"><span class="attachment-name">2ART.xlsx</span><span class="attachment-size">(~740 KB)</span></a><a href="#" tabindex="0" title="Opções" class="button icon dropdown skip-content"><span class="inner">Opções</span></a></li>
</ul>

我找不到与该文件相关的任何元素。

driver.find_element(By.XPATH, '//*[@id="attach2"]/a[2]')

输出是:

Message: no such element: Unable to locate element: {"method":"xpath","selector":"//*[@id="attach2"]/a[2]"}

请检查 dev tools (Google chrome) 我们是否在 HTML-DOM 中有 unique 条目。

你应该检查的 xpath :

//ul[@id='attachment-list']//li[@id='attach2']//a[@title='Opções']

检查步骤:

Press F12 in Chrome -> 转到 element 部分 -> 执行 CTRL + F -> 然后粘贴 xpath 并查看是否需要 element正在 突出显示 1/1 匹配节点。

如果是独一无二的匹配项,请按如下所示单击它:

代码试用 1:

time.sleep(5)
driver.find_element(By.XPATH, "//ul[@id='attachment-list']//li[@id='attach2']//a[@title='Opções']").click()

代码试用2:

WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//ul[@id='attachment-list']//li[@id='attach2']//a[@title='Opções']"))).click()

进口:

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

推荐代码试用 2。

如果你仍然面对代码试验 1 的 NoSuchElementException: 然后像这样调试:

如果这是唯一的 //ul[@id='attachment-list']//li[@id='attach2']//a[@title='Opções'] 那么您还需要检查以下条件。

  1. 检查它是否在任何 iframe/frame/frameset.

    解决方法:先切换到iframe/frame/frameset,再与该网页元素交互。

  2. 检查它是否在任何 shadow-root.

    解决方法:使用driver.execute_script('return document.querySelector返回一个web元素,然后进行相应的操作。

  3. 如果您已重定向到 new tab/ or new windows 而您还没有 切换 到那个特定的 new tab/new window,否则您可能会得到NoSuchElement异常。

    解决方法:先切换到相关window/tab

  4. 如果您切换到 iframe 并且新的所需元素不在同一个 iframe 上下文中,那么首先 switch to default content 然后与之交互。

    解决方法:切换到默认内容,然后切换到各自的iframe。