Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中使用Selenium在Firefox上保存网页_Python_Selenium_Firefox_Save As - Fatal编程技术网

在Python中使用Selenium在Firefox上保存网页

在Python中使用Selenium在Firefox上保存网页,python,selenium,firefox,save-as,Python,Selenium,Firefox,Save As,我试图在Python中使用Selenium在macosfirefox上保存网页 到目前为止,我已成功单击COMMAND+S弹出另存为窗口。但是, 我不知道如何: 更改文件的目录 更改文件的名称 文件,以及 单击“另存为”按钮 有人能帮忙吗 下面是我用来单击COMMAND+S的代码: ActionChains(browser).key_down(Keys.COMMAND).send_keys("s").key_up(Keys.COMMAND).perform() 此外,我使用此方法的原因是我遇到

我试图在
Python
中使用
Selenium
macosfirefox
上保存网页

到目前为止,我已成功单击
COMMAND+S
弹出
另存为窗口
。但是,

我不知道如何:

  • 更改文件的目录
  • 更改文件的名称 文件,以及
  • 单击“另存为”按钮 有人能帮忙吗

    下面是我用来单击
    COMMAND+S
    的代码:

    ActionChains(browser).key_down(Keys.COMMAND).send_keys("s").key_up(Keys.COMMAND).perform()
    
    此外,我使用此方法的原因是我遇到Unicode编码错误,当我:-

  • 将页面源代码写入html文件并
  • 将废弃信息存储到csv文件中 写入html文件:

    file_object = open(completeName, "w")
    html = browser.page_source
    file_object.write(html)
    file_object.close() 
    
    写入csv文件:

    csv_file_write.writerow(to_write)
    
    错误:

    UnicodeEncodeError:“ascii”编解码器无法在中对字符u'\xf8'进行编码 位置1:序号不在范围内(128)


    不能与系统对话框(如“保存文件”对话框)交互。 如果要保存页面html,可以执行以下操作:

    page = driver.page_source
    file_ = open('page.html', 'w')
    file_.write(page)
    file_.close()
    

    硒元素不可能实现您想要实现的目标。打开的对话框不是Selenium可以交互的

    您可以做的事情是收集
    page\u source
    ,它为您提供单个页面的整个HTML,并将其保存到一个文件中

    import codecs
    
    completeName = os.path.join(save_path, file_name)
    file_object = codecs.open(completeName, "w", "utf-8")
    html = browser.page_source
    file_object.write(html)
    

    如果你真的需要保存整个网站,你应该考虑使用像AutoIT这样的工具。这将使您能够与“保存”对话框交互。

    这是一个完整的工作示例,说明了所提供的答案:

    您首先必须安装一个Web驱动程序,例如
    pip install selenium chromedriver\u安装程序

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    # core modules
    import codecs
    import os
    
    # 3rd party modules
    from selenium import webdriver
    
    
    def get_browser():
        """Get the browser (a "driver")."""
        # find the path with 'which chromedriver'
        path_to_chromedriver = ('/usr/local/bin/chromedriver')
        browser = webdriver.Chrome(executable_path=path_to_chromedriver)
        return browser
    
    
    save_path = os.path.expanduser('~')
    file_name = 'index.html'
    browser = get_browser()
    
    url = "https://martin-thoma.com/"
    browser.get(url)
    
    complete_name = os.path.join(save_path, file_name)
    file_object = codecs.open(complete_name, "w", "utf-8")
    html = browser.page_source
    file_object.write(html)
    browser.close()
    

    获取HTML也可以通过使用
    driver.page\u source
    来完成。这样就不需要手动查找html元素和获取其outerHTML。谢谢!我知道这种方法。但是,由于我的网页包含提示Unicode编码错误的字符,我需要以原始格式保存网页,以避免丢失重要信息。Unicode编码错误的一个例子是…'ascii“编解码器无法对位置1中的字符u'\xf8'进行编码:序号不在范围内(128)。@TommyN何时出现此错误?当尝试将页面源写入文件时?是的,当我尝试将页面源写入html文件时会发生这种情况。您是否知道有什么解决方案可以让我最大限度地减少与这些特殊字符相关的信息丢失量?(我故意不想使用忽略)@RemcoW你认为我也可以使用编解码器写入csv文件吗?@TommyN看看这个问题:我最终没有使用
    另存为
    方法,为了解决html文件和csv文件的写入问题,我使用了编解码器和Unicodesv。有关详细信息,请参阅RemcoW的评论和本文。请注意,
    driver.page\u source
    在大多数Web驱动程序中,页面大于200MB时可能会崩溃。对于大型页面,更可靠。在页面源代码中包含unicode的Python 2上,您可能需要:
    driver.page\u source.encode('utf-8')
    with open('page.html', 'w') as f:
        f.write(driver.page_source)