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

时间:2019-02-02 06:18:32

标签: python python-3.x selenium web-scraping selenium-chromedriver

我怎样才能摆脱这种<tbody> <?php $totalQuantity = 0; $totalBundle = 0; $rowcount = 1; foreach ($query as $key => $value){ $counter = 0; ?> <?php foreach ($value as $sub_key => $sub_value) { if($counter == 0) { if ($sub_value['dc']== "D"){ $totalQuantity + = $sub_value['Amount']; } ?> <tr> <td><?php echo $sub_value['code'] ?></td> <td><?php echo date('d/m/Y', strtotime($sub_value['date1']));?></td> <td><?php echo $sub_value['part'] ?></td> <td><?php if ($sub_value['dc']== "D"){ echo $sub_value['Amount'];} ?></td> <td><?php if ($sub_value['dc']== "C"){ echo $sub_value['Amount'];} ?></td> <?php $rowcount +=1?> </tr> <?php $counter++; }else {?> <tr> <td></td> <td></td> <td><?php echo $sub_value['part'];?></td> <td><?php if ($sub_value['dc']== "D"){ echo $sub_value['Amount'];} ?></td> <td><?php if ($sub_value['dc']== "C"){ echo $sub_value['Amount'];} ?></td> </tr> <?php } // else } // foreach } ?> <tr> <td></td> <td></td> <td>Total</td> <td><?php echo $totalQuantity; ?></td> </tr> </tbody> 通知,同时通过下载文件蟒蛇硒chromedriver?

我尝试了以下操作,但未成功:

keep/discard

编辑:似乎我发现另一个网站拥有这样的“ .eml”文件,当单击该链接以chromeOptions = webdriver.ChromeOptions() prefs = {"profile.default_content_setting_values.notifications" : 2} chromeOptions.add_experimental_option('prefs', prefs) driver = webdriver.Chrome(chrome_options=chromeOptions) 结尾时,它会引发相同的通知。

Example website link

我正在尝试以下方法:

.eml

通知完全类似于下图:

enter image description here

顺便说一句,我之所以开始点击该链接进行下载,只是因为我正在尝试的站点没有任何真实的url连接到该“ .eml”文件来进行导航。事实证明,导航到该“ .eml”链接也会导致相同的通知。

7 个答案:

答案 0 :(得分:4)

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

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)

答案 1 :(得分:2)

这是弹出有关安全浏览。尝试

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

答案 2 :(得分:0)

您可以尝试添加以下参数

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

答案 3 :(得分:0)

根据此内容: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,并且上述选项不再禁用通知。

简短版本:请勿尝试禁用安全措施。恶意软件作者受过相应的培训,任何优秀的浏览器开发人员似乎都认为“安全胜于遗憾”。

如果您确实只需要一个下载解决方案,则可以使用请求模块,而无需使用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()

答案 4 :(得分:0)

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

  

Chrome

     

点击地址栏最右边的3条水平线图标。

     

单击“设置”,滚动到底部,然后单击“显示高级”   设置链接。

     

点击更改代理设置。

     

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

     

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

     

点击关闭>确定。

答案 5 :(得分:0)

我确实尝试了Google许多站点/论坛,并找到了以下代码,但仍无法在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 :(得分:0)

我确实使用简单的TAB和ENTER键对窗口上的“保留/放弃”按钮进行操作。对于此问题,我没有找到更好的解决方案,它可以作为解决方法。

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);
                    }