3

私はpythonでchromedriverでセレニウムを使用しています。Selenium webdriverはchromeで要素を見つけることができません:// downloads

私の問題は、クロムダウンロードページ(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") 

例外:どちらか私のために動作しませんでしたdriver.execute_script()経由でJavaScriptを使用して

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) 

。 ブラウザで要素が表示されると、なぜ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

関連する問題