如何使用 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&_action=get&_mbox=INBOX&_uid=1&_token=ukxOEh6bQm6Iv7gN59mROEbGpTrczta3&_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']
那么您还需要检查以下条件。
检查它是否在任何 iframe/frame/frameset
.
解决方法:先切换到iframe/frame/frameset,再与该网页元素交互。
检查它是否在任何 shadow-root
.
解决方法:使用driver.execute_script('return document.querySelector
返回一个web元素,然后进行相应的操作。
如果您已重定向到 new tab/ or new windows
而您还没有 切换 到那个特定的 new tab/new window
,否则您可能会得到NoSuchElement
异常。
解决方法:先切换到相关window/tab
如果您切换到 iframe 并且新的所需元素不在同一个 iframe 上下文中,那么首先 switch to default content
然后与之交互。
解决方法:切换到默认内容,然后切换到各自的iframe。
这是页面下载部分的html:
<ul id="attachment-list" class="attachmentslist"><li class="application vnd.openxmlformats-officedocument.spreadsheetml.sheet xlsx" id="attach2"><a href="./?_task=mail&_action=get&_mbox=INBOX&_uid=1&_token=ukxOEh6bQm6Iv7gN59mROEbGpTrczta3&_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']
那么您还需要检查以下条件。
检查它是否在任何
iframe/frame/frameset
.解决方法:先切换到iframe/frame/frameset,再与该网页元素交互。
检查它是否在任何
shadow-root
.解决方法:使用
driver.execute_script('return document.querySelector
返回一个web元素,然后进行相应的操作。如果您已重定向到
new tab/ or new windows
而您还没有 切换 到那个特定的new tab/new window
,否则您可能会得到NoSuchElement
异常。解决方法:先切换到相关window/tab
如果您切换到 iframe 并且新的所需元素不在同一个 iframe 上下文中,那么首先
switch to default content
然后与之交互。解决方法:切换到默认内容,然后切换到各自的iframe。