3

我在python中使用硒与chromedriver。Selenium webdriver无法在Chrome中找到元素:// downloads

我的问题是,当我尝试访问chrome下载页面上的元素(chrome:// downloads)时,硒给我一个错误。 例如,我尝试获取文件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

回答

2

目标链接位于几个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") 

如有任何问题,请告知我。如果它解决了您的问题,请不要忘记将此答案标记为Accepted

+0

感谢您的回答,正是我一直在寻找的。 (只需要将“css-selector”改为“css_selector”) – Peter

+0

哦,是的。错过了:) – Andersson

相关问题