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

相關問題