【问题标题】:Selenium webdriver can't find elements at chrome://downloadsSelenium webdriver 在 chrome://downloads 找不到元素
【发布时间】:2017-07-17 01:27:34
【问题描述】:

我在 python 中使用 selenium 和 chromedriver。

我的问题是当我尝试访问 chrome 下载页面 (chrome://downloads) 上的元素时,selenium 给了我一个错误。 例如,我尝试获取文件 url "http://file.jpg"。

<a id="url" target="_blank" href="http://file.jpg">http://file.jpg</a>

但是当我尝试通过它的 id 获取元素时,我得到了一个异常。

代码:

driver = webdriver.Chrome("chromedriver.exe")
driver.get("chrome://downloads/")
file_url = driver.find_element_by_id("url").get_attribute("href")

例外:

Traceback (most recent call last):
  File "<pyshell#34>", line 3, in <module>
    driver.find_element_by_id("url")
  File "D:\Python\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 269, in find_element_by_id
    return self.find_element(by=By.ID, value=id_)
  File "D:\Python\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 752, in find_element
    'value': value})['value']
  File "D:\Python\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 236, in execute
    self.error_handler.check_response(response)
  File "D:\Python\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 192, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"id","selector":"url"}
  (Session info: chrome=56.0.2924.87)
  (Driver info: chromedriver=2.27.440174 (e97a722caafc2d3a8b807ee115bfb307f7d2cfd9),platform=Windows NT 10.0.10586 x86_64)

通过driver.execute_script() 使用javascript 对我也不起作用。 为什么我可以在浏览器中看到该元素时得到NoSuchElementException

【问题讨论】:

    标签: python google-chrome selenium selenium-webdriver selenium-chromedriver


    【解决方案1】:

    目标链接位于多个shadow-root 块内。试试这个:

    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")
    

    【讨论】:

    • 感谢您的回答,正是我想要的。 (只需将“css-selector”更改为“css_selector”)
    • 哦,是的。错过了:)
    猜你喜欢
    • 2016-04-17
    • 1970-01-01
    • 1970-01-01
    • 2022-11-11
    • 2016-09-07
    • 2017-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多