通过使用Windows、Python 3和Selenium/Chromedriver,我试图找到一种方法,将元素的数据(文本和图像)保存到脱机文件中,供以后查看.我try 过的事情:

1. Save page source to .html file

    page_source = driver.page_source
    with open("page.html", "w", encoding="utf-8") as file:
        file.write(page_source)

问题是,它只保存页面的文本,而不是图像,只在保存的页面上呈现空的图像占位符,而不是实际的图像.

2. Take screenshots of the entire page

    page_width = driver.execute_script('return document.body.scrollWidth')
    page_height = driver.execute_script('return document.body.scrollHeight')
    driver.set_window_size(page_width, page_height)
    driver.save_screenshot("page.png")

这里的问题是,尽管我定义了整个页面的高度/宽度,但只有页面的可见部分是截图,而不是整个页面的数据,所以需要合并滚动.

3. Use a "select all" type logic taken from 100

这是一种黑客的解决方法,但可能有效,但有点寻找更好的解决方案.

4. Make use of pressing CTRL + S to save the page and assets for offline viewing

这还可以,但它会将一堆内容下载到一个单独的文件夹中,这是呈现整个页面所需的,我认为这是不必要的,因为我只需要页面上一个元素的内容.另外,我会下载几个页面,我也不想每个页面都有单独的文件夹.

所以我想知道是否有更好的方法来保存页面元素的文本和图像,最好是保存为html、docx或pdf文件类型?我已经看到了各种各样的解决方案,但还没有找到一种可以做到这一点的方法,所以寻找一些方向/ bootstrap 我朝着正确的方向前进.谢谢

推荐答案

最后我用CTRL+a,CTRL+C从整个页面复制所有文本和图像.然后,我使用win32clipboard从剪贴板中访问数据,并将其导出到docx文件.有点黑,而且不仅仅是从元素中获取内容,但它符合我的目的.也许将来有人会有更好的解决方案.

a = ActionChains(driver)
a.key_down(Keys.CONTROL).send_keys('a').key_up(Keys.CONTROL).perform()
sleep(1)
a.key_down(Keys.CONTROL).send_keys('c').key_up(Keys.CONTROL).perform()

current_books_pages_list = []
while True:
    try:
        win32clipboard.OpenClipboard()
        data = win32clipboard.GetClipboardData()
        win32clipboard.CloseClipboard()
        current_books_pages_list.append(data)
        print("Woohoo!")
        break
    except:
        print("Clipboard access denied error, trying again...")
        sleep(1)
        continue

with open("books/" + str(book_name_string) + ".docx", "a", encoding="utf-8") as file:
    for page_data in current_books_pages_list:
        file.write(page_data)
        file.write("\n")

Python相关问答推荐

如何使用OpenGL使球体遵循Python中的八样路径?

为什么Python内存中的列表大小与文档不匹配?

如何获取包含`try`外部堆栈的`__traceback__`属性的异常

极点替换值大于组内另一个极点数据帧的最大值

如何为需要初始化的具体类实现依赖反转和接口分离?

如何防止html代码出现在quarto gfm报告中的pandas表之上

我怎么才能用拉夫分拣呢?

使用xlsxWriter在EXCEL中为数据帧的各行上色

如何通过函数的强式路径动态导入函数?

Pandas查找给定时间戳之前的最后一个值

as_index=False groupBy不支持count

如何更改GEKKO变量在解算为稳定状态后的MV状态?

当使用随机均匀(a,b)时,b是包含的还是排他的?

使用极轴 Select 一系列柱

Python如何模拟S由高阶函数返回的函数

Python开发依赖项

Re.findall给出了不同的结果.

如何允许使用点输入进行键验证

如何使用数据帧的一列和最后一行对数据帧进行分组?

确定pymongo文档的数量