【问题标题】:Is there any way to send commands (like ":screenshot") to the firefox console with Selenium using Python?有没有办法使用 Python 使用 Selenium 向 firefox 控制台发送命令(如“:screenshot”)?
【发布时间】:2020-10-21 14:44:10
【问题描述】:

我正在执行一项自动化任务,该任务打开网页,截取页面中的元素,然后关闭页面并继续下一个。我之前使用 AutoHotKey 进行了设置,虽然它在技术上有效,但我想创建一个更精致的版本。到目前为止,Selenium 在自动导航页面方面运行良好,但是当我准备截取屏幕截图时,我似乎无法打开控制台来发出命令。我尝试使用

from selenium.webdriver.common.keys import Keys
browser.find_element_by_tag_name('body').send_keys(Keys.CONTROL + Keys.SHIFT + 'K')

命令,但似乎 firefox 没有收到输入。我也试过了

from selenium.webdriver.common.action_chains import ActionChains
actions = ActionChains(browser)
actions.send_keys(Keys.CONTROL + Keys.SHIFT + 'k')

这又好像没用。

最后我尝试使用

browser.execute_script(":screenshot")

但我不断收到一个 JavaScript 错误,这是有道理的,因为屏幕截图命令不是 js。

如果您能想到我忽略的任何事情,请告诉我!在此先感谢:)

【问题讨论】:

    标签: python selenium firefox scripting


    【解决方案1】:

    Selenium 屏幕截图

    例子

    您可以使用get_screenshot_as_file() 方法对网页进行截图,并将文件名作为参数。 下面的程序使用firefox加载网页并截取屏幕截图,但任何网络浏览器都可以。

    from selenium import webdriver
    from time import sleep
    
    driver = webdriver.Firefox()
    driver.get('https://www.python.org')
    sleep(1)
    
    driver.get_screenshot_as_file("screenshot.png")
    driver.quit()
    print("end...")
    

    屏幕截图图像将存储在与您的 Python 脚本相同的目录中。除非您明确定义必须存储屏幕截图的路径。

    【讨论】:

    • 我知道这个解决方案,但是因为我需要截屏一个比窗口大的特定元素,所以 selenium 截屏方法不起作用。除非有某种方法可以指定一个元素来截图。我认为没有。
    • 我将它用于各种网站,但目的是捕获屏幕截图中的内容,然后将所有页面组合成 pdf。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多