当前位置: 首页 > 知识库问答 >
问题:

如何取消下载chrome://downloadsPython 3中的Selenium

赖俊
2023-03-14

这个问题与Selenium webdriver在chrome://downloads

我正在尝试将Selenium与Python(3)一起使用,以访问 chrome://downloads 页面上的取消按钮。我的用例是我有一个混淆链接,每次用户单击它时都会生成一个随机令牌。如果你不点击它,你就无法开始下载(它似乎触发了一段生成令牌的 js,但我还没有成功地挖掘代码来弄清楚这是如何发生的)。

为了让我的测试通过,我只需要验证:

  1. 下载开始(并且没有给出404),并且
  2. 它尝试下载的文件大小合适。

我试图通过单击按钮元素触发下载,然后打开Seleniumchrome://downloads,取消下载,并捕获尝试下载的文件的文件大小。

从理论上讲,这似乎应该有效,绊脚石是尝试访问 chrome://downloads 页面上#shadow根标签中的任何元素。不幸的是,我上面链接的另一个问题的解决方案不再有效:

driver = webdriver.Chrome("chromedriver.exe")
driver.get("chrome://downloads/")

manager = driver.find_element_by_css_selector('body/deep/downloads-manager')
item = manager.find_element_by_css_selector('body/deep/downloads-item')
shadow = driver.execute_script('return arguments[0].shadowRoot;', item)
link = shadow.find_element_by_css_selector('div#title-area>a')

file_url = link.get_attribute("href")

...因为它在物料声明行失败:

>>> item = manager.find_element_by_css_selector('body/deep/downloads-item')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3.7/site-packages/selenium/webdriver/remote/webelement.py", line 430, in find_element_by_css_selector
    return self.find_element(by=By.CSS_SELECTOR, value=css_selector)
  File "/usr/local/lib/python3.7/site-packages/selenium/webdriver/remote/webelement.py", line 659, in find_element
    {"using": by, "value": value})['value']
  File "/usr/local/lib/python3.7/site-packages/selenium/webdriver/remote/webelement.py", line 633, in _execute
    return self._parent.execute(command, params)
  File "/usr/local/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "/usr/local/lib/python3.7/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"body/deep/downloads-item"}
  (Session info: chrome=80.0.3987.149)

这超出了我的专业范围,如果能帮助我找到取消按钮,我将不胜感激。

共有1个答案

边银龙
2023-03-14

请试试下面的。

driver.execute_script("document.querySelector('downloads-manager').shadowRoot.querySelector('#downloadsList downloads-item').shadowRoot.querySelector("cr-button[focus-type='cancel']").click()")

如果您需要有关如何处理影根元素的更多信息,请参阅此处。如果您想进行下载,则可以参考此内容并根据您的要求更新 js

 类似资料:
  • 我正在使用java selenium来自动化我的应用程序。我正在下载PDF和解析。在我的应用程序中有多个使用PDF的测试用例。因此,当我下载第一个PDF时,chrome会在浏览器底部显示一个弹出,该文件是用文件名下载的,所以下次当我试图下载第二个PDF时,下载按钮就在这个弹出下面,不能单击下载选项。使用isDisplay方法检查状态,返回false和isEnabled返回true。尝试在另一个窗口

  • 问题内容: from selenium import webdriver from selenium.webdriver.chrome.options import Options 但这仅会导致以下错误: 那么如何解决呢?我是否必须使用这种“功能”?如果是这样,究竟如何? 问题答案: 试试这个。在Windows上执行 如何在Chrome中控制具有SeleniumPython绑定的文件的下载

  • 问题内容: 我正在尝试使用Chrome浏览器使用Webdriver编写测试,我想下载一些文件,当我单击下载链接时,该文件会自动下载到下载文件夹中。我想知道是否可以通过某种方式找出下载文件夹的当前路径(Win / Linux),Chrome是否保留一些配置文件来对其进行设置? 坦斯 问题答案: Google chrome正在为这样的自定义配置维护一个配置文件,即 JSON* 格式的名为 Prefer

  • 我想使用硒下载chrome中的pdf。 我尝试了上述代码,但不起作用

  • 我有一个函数来检查结果是否在服务器上。 有时由于未知原因取消重新加载: 如何找出重装取消的原因? 因为请求被取消,所以详细信息窗格中没有任何信息。即使一些字节已经发送到服务器(或者甚至从服务器返回到浏览器),chrome也不会显示它们。

  • 问题内容: 请找到以下带有镶边功能的代码。实际上,浏览器没有将文件下载到指定的路径。 问题答案: 对于Chromedriver,请尝试: 注意:-在Windows中,您需要使用\\作为路径,而如果您使用linux或mac,则使用// 希望这可以帮助。:)