Selenium打开本地文件

时间:2017-03-22 11:49:01

标签: python selenium

我正在尝试使用Firefox / Selenium实例作为图像的基本幻灯片。我的想法是,我将从本地目录中打开webdriverdriver.get()个文件。

当我运行以下内容时,收到错误消息: selenium.common.exceptions.WebDriverException: Message: Tried to run command without establishing a connection

我的假设是selenium正在尝试测试下一个driver.get()请求并且不允许本地的,非网络连接的连接是否有办法绕过这种行为?我的代码示例如下所示:

from selenium import webdriver
import time
from os import listdir
from selenium.common.exceptions import WebDriverException

driver = webdriver.Firefox()

image_source = '/home/pi/Desktop/slideshow/photo_frames/daniel/images/'

for file in listdir(image_source):
    if file.endswith('jpg'):
        file_name = image_source + file
        driver.get(file_name)
        time.sleep(5)

与往常一样,任何帮助都将不胜感激。

更新: 我应该补充说,相同的基本脚本结构适用于网站 - 我可以在没有任何错误的情况下遍历多个网站。

3 个答案:

答案 0 :(得分:3)

我认为您只需要在文件名中添加file://即可。这对我有用:

from selenium import webdriver
import time
from os import listdir
from selenium.common.exceptions import WebDriverException

def main():
    image_source = '/home/pi/Desktop/slideshow/photo_frames/daniel/images/'

    driver = webdriver.Firefox()

    try:
        for file in listdir(image_source):
            if file.endswith('jpg'):
                file_name = 'file://' + image_source + file
                driver.get(file_name)
                time.sleep(5)
    finally:
        driver.quit()

if __name__ == "__main__":
    main()

答案 1 :(得分:1)

如果像我一样,您是想让Selenium服务于您的本地html文件,则上面Niklas Rosencrantz所注意到的,上面接受的答案需要对其进行微小的修改。

要让Selenium在浏览器中提供本地html,并假设文件位于当前工作目录中,请尝试以下操作(我在Windows上,使用Selenium 3.141.0和Python 3.7-如果您觉得重要):

from selenium import webdriver
import os

browser = webdriver.Firefox()
html_file = os.getcwd() + "//" + "relative//path//to//file.html"
browser.get("file:///" + html_file)

答案 2 :(得分:0)

这也可以通过Pathlib完成

from selenium import webdriver
from pathlib import Path

browser = webdriver.Firefox()
html_file = Path.cwd() / "relative//path//to//file.html"
browser.get(html_file.as_uri())

如果您是pathlib的新手,那么/语法可能看起来有些奇怪,但是它非常易于使用,这是一个不错的教程enter image description here