下载“.eml”文件时无法摆脱“保留/丢弃”通知

Posted

技术标签:

【中文标题】下载“.eml”文件时无法摆脱“保留/丢弃”通知【英文标题】:Can't get rid of "keep/discard" notification while downloading ".eml" files 【发布时间】:2019-06-26 16:23:18 【问题描述】:

如何在通过 python selenium chromedriver 下载文件时摆脱这个keep/discard 通知?

我尝试了以下方法但未能成功:

chromeOptions = webdriver.ChromeOptions()
prefs = "profile.default_content_setting_values.notifications" : 2
chromeOptions.add_experimental_option('prefs', prefs)
driver = webdriver.Chrome(chrome_options=chromeOptions)

编辑:似乎我发现另一个网站有这样的“.eml”文件,点击以.eml结尾的链接时会抛出相同的通知。

Example website link

我正在尝试以下方法:

from selenium import webdriver

url = "https://www.online-convert.com/file-format/eml"

dirf = r"C:\Users\WCS\Desktop\emlfolder"

def download_file(link):
    driver.get(link)
    driver.find_element_by_css_selector("a[href$='example.eml']").click()

if __name__ == '__main__':
    chromeOptions = webdriver.ChromeOptions()
    prefs = 'download.default_directory' : dirf
    chromeOptions.add_experimental_option('prefs', prefs)
    driver = webdriver.Chrome(chrome_options=chromeOptions)
    download_file(url)

通知与下图一模一样:

顺便说一句,我开始点击该链接进行下载只是因为我正在试验的网站没有任何真正的 URL 连接到该“.eml”文件进行导航。结果发现导航到“.eml”链接也会导致相同的通知。

【问题讨论】:

如果不能自己分析网站,我们将无法为您提供帮助。 windowsreport.com/type-of-file-can-harm-computer 声称启用“询问保存位置”将消除此特定警报。 This 似乎同意。 我已经在脚本中明确定义了下载目录的位置,例如prefs = 'download.default_directory' : some_location,但仍然有相同的通知@tripleee。 这听起来与解决方法不同,但 IDK。 现在您可以查看@SimonF。谢谢。 【参考方案1】:

您需要指定要下载的文件扩展名

prefs = 
    'download.default_directory': dirf,
    'download.prompt_for_download': False,
    'download.extensions_to_open': 'eml',
    'safebrowsing.enabled': False


options.add_experimental_option('prefs', prefs)
driver = webdriver.Chrome(chrome_options=options)

【讨论】:

当我在我的脚本中尝试你的建议时,它确实下载了 eml 文件并最终导致打开一个 Outlook 弹出窗口。但是,今天当我再次尝试时,它完美无缺。你能告诉我为什么吗?马上就要赏金了。谢谢。 @robots.txt 它是否要求您选择一个程序来打开文件?当您第一次打开新类型的文件并保存选项时,Windows 会询问此问题。 我尝试了上面的xml但不起作用chrome驱动程序版本是最新的 就我而言,'safebrowsing.enabled': True 提供了帮助。【参考方案2】:

这是与安全浏览相关的弹出窗口。试试

  chromeOptions = webdriver.ChromeOptions()
  prefs = 'safebrowsing.enabled': 'false'
  chromeOptions.add_experimental_option("prefs", prefs)
  driver = webdriver.Chrome(chrome_options=chromeOptions)

【讨论】:

我刚才尝试了您的建议,但这似乎对该通知@murali selenium 没有任何影响。它仍在弹出。 如果可能的话给我网址我会试试 该网址受登录保护,因此对您没有任何用处。谢谢。【参考方案3】:

据此:How to disable 'This type of file can harm your computer' pop up 您将需要多个选项:

最近更新 Chrome 后,接受的答案停止工作。现在您需要使用--safebrowsing-disable-extension-blacklist--safebrowsing-disable-download-protection 命令行开关。

但是,只要 Google 的某个人对与某个选项相关的安全问题有了第二个想法,他们就会在下一版 Chrome 中修改该行为。我正在使用 Chrome 72,并且上述选项不再禁用通知。

简短版:不要尝试禁用安全措施。恶意软件作者经过培训可以做到这一点,任何优秀的浏览器开发人员似乎都认为“比后悔更安全”。

如果你真的只需要一个下载解决方案,你可以使用 requests 模块并在没有 chrome 的情况下下载:

from selenium import webdriver
import requests

url = "https://www.online-convert.com/file-format/eml"

dirf = r"C:\Users\WCS\Desktop\emlfolder"

def download_file(link):
    driver.get(link)
    linkElement = driver.find_element_by_css_selector("a[href$='example.eml']")
    r = requests.get(linkElement.get_attribute('href'))
    file = open("C:\Users\WCS\Desktop\emlfolder\example.eml", 'wb')
    file.write(r.content)
    file.close()

if __name__ == '__main__':
    chromeOptions = webdriver.ChromeOptions()
    prefs = 'download.default_directory' : dirf
    chromeOptions.add_experimental_option('prefs', prefs)
    driver = webdriver.Chrome(chrome_options=chromeOptions)
    download_file(url)
    driver.quit()

【讨论】:

每个下载链接都没有真正的url。所以使用 requests 模块不是一种选择。我按照您的建议摆脱了该警告/通知。然而,这并没有成功。谢谢。 您可以通过结合页面的基本 url 和相对链接来构建自己的 url。但是这些命令行参数在最新的 Chromium 源代码中没有任何作用。我在网上查过。【参考方案4】:

您可以尝试将该网站添加到 chrome 的受信任站点列表中,如果我理解您的代码,它将使用您安装的 chrome,这意味着如果您要更改 chrome 中的设置,python 模块将使用它们.

单击地址栏最右侧的 3 条水平线图标。

点击设置,滚动到底部并点击显示高级 设置链接。

点击更改代理设置。

单击安全选项卡 > 受信任的站点图标,然后单击站点。

输入您的受信任站点的 URL,然后单击添加。

单击关闭 > 确定。

【讨论】:

【参考方案5】:

我确实尝试了谷歌许多网站/论坛并找到了以下代码,但它仍然无法在 Chrome 72 中运行。如果您找到任何更好的解决方案,请告诉我。

System.setProperty("webdriver.chrome.driver", "chromedriver.exe file path")
String downloadFilepath = "C:\\Downloads";
HashMap<String, Object> chromePrefs = new HashMap<String, Object>();
chromePrefs.put("profile.default_content_settings.popups", 0);
chromePrefs.put("download.default_directory", downloadFilepath);
chromePrefs.put("safebrowsing.enabled", "false"); 
chromePrefs.put("download.prompt_for_download", "false");
DesiredCapabilities capabilities = DesiredCapabilities.chrome();
ChromeOptions options = new ChromeOptions();
options.addArguments("--safebrowsing-disable-download-protection");
options.addArguments("--safebrowsing-disable-extension-blacklist");
options.addArguments("disable-extensions");
options.addArguments("test-type");
options.addArguments("start-maximized");
options.setExperimentalOption("prefs", chromePrefs);
capabilities.setCapability(ChromeOptions.CAPABILITY, options);  
capabilities.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
driver = new ChromeDriver(capabilities);

【讨论】:

【参考方案6】:

我确实使用了简单的 TAB 和 ENTER 键来操作窗口上的 Keep/Discard 按钮。我没有找到任何更好的解决方案来解决这个问题,它对我来说是一种解决方法。

if (File_Extn.contentEquals("msg")) // put extns like msg, pdf etc.. 
                               
                        for (int j=1; j<=TabCount; j++) // manually count total no. of tabs and replace with TabCount to reach keep button
                           
                            sleep(1);
                            System.out.println("hit tab keys to reach keep/discard button");
                            robot.keyPress(KeyEvent.VK_TAB);
                        
                        System.out.println("hit enter key to click on keep button");
                         robot.keyPress(KeyEvent.VK_ENTER);
                    

【讨论】:

【参考方案7】:

您可以尝试添加以下参数

chromeOptions = webdriver.ChromeOptions()
chromeOptions.add_argument('--safebrowsing-disable-download-protection')
driver = webdriver.Chrome(chrome_options=chromeOptions)

【讨论】:

我也尝试了你的建议@cieunteung,但我仍然收到与上图中相同的通知。

以上是关于下载“.eml”文件时无法摆脱“保留/丢弃”通知的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Python 从电子邮件内容中获取附加的 eml 文件?

如何用Java解析.eml文件

EML 文件中的 RTF 消息正文

如何解析EML(邮件)格式的文件以及一款小巧的EML邮件阅读工具

EmlBuilder:一款超轻量级的EML格式电子邮件阅读和编辑工具

PHP 实现下载邮件功能,保存为eml格式