myn*_*ame 1 python selenium hidden
我正在 Python 中使用 Selenium 来尝试单击当鼠标悬停在下拉菜单上时出现的下拉菜单中的链接。这是下拉菜单信息:
<div id="DownloadMenu">
<ul id="DownloadMenu_control" class="topmenu" widgetid="DownloadMenu_control">
<li class="horizontal-list-item-2 leftFloatedItem" id="DownloadMenu_control@BatchPrintSaveMenu_1" widgetid="DownloadMenu_control@BatchPrintSaveMenu_1" style="">
<a class="horizontal-list-item-2 leftFloatedItem" href="javascript:void(0)">Download</a>
<ul id="common_navigation_MenuControl_6" class="submenu" style="display: none; left: 0px; visibility: hidden;" widgetid="common_navigation_MenuControl_6">
<li class="subitems" id="DownloadMenu_control@DownloadSelectedDocumentsMenuItem" widgetid="DownloadMenu_control@DownloadSelectedDocumentsMenuItem">
<a href="javascript:com.reuters.rts.event(event, 'openMultiDocInfoViewerBatchViewEikon', 'itemsCollectionId', 'AllDocumentListView_items', 'researchTableManagerId', 'AllDocumentListView', 'summary', escape(encodeURIComponent(dijit.byId('advancedSearchManager').getFilterSubmittedSummary())), 'fileSizeLimitForMerging', '25','forBatchPrint','true', 'action','Save');">Documents</a>
</li>
</ul>
</li>
</ul>
</div>
Run Code Online (Sandbox Code Playgroud)
我正在尝试单击“a href”标签中的“文档”链接。当我将鼠标悬停在菜单上时,代码更改如下:
<div id="DownloadMenu">
<ul id="DownloadMenu_control" class="topmenu" widgetid="DownloadMenu_control">
<li class="topitemOn" id="DownloadMenu_control@BatchPrintSaveMenu_1" widgetid="DownloadMenu_control@BatchPrintSaveMenu_1" style="">
<a class="horizontal-list-item-2 leftFloatedItem" href="javascript:void(0)">Download</a>
<ul id="common_navigation_MenuControl_6" class="submenu" style="display: none; left: 0px;" widgetid="common_navigation_MenuControl_6">
<li class="subitems" id="DownloadMenu_control@DownloadSelectedDocumentsMenuItem" widgetid="DownloadMenu_control@DownloadSelectedDocumentsMenuItem">
<a href="javascript:com.reuters.rts.event(event, 'openMultiDocInfoViewerBatchViewEikon', 'itemsCollectionId', 'AllDocumentListView_items', 'researchTableManagerId', 'AllDocumentListView', 'summary', escape(encodeURIComponent(dijit.byId('advancedSearchManager').getFilterSubmittedSummary())), 'fileSizeLimitForMerging', '25','forBatchPrint','true', 'action','Save');">Documents</a>
</li>
</ul>
</li>
</ul>
</div>
Run Code Online (Sandbox Code Playgroud)
您可以看到visibility:hidden部分在第二个ul标签中消失了。
我使用以下代码找到了页面上的元素:
download_menu = driver.find_element_by_id("DownloadMenu")
download_button = download_menu.find_elements_by_tag_name('a')[1]
Run Code Online (Sandbox Code Playgroud)
如果我尝试使用以下命令单击下载按钮:
download_button.click()
Run Code Online (Sandbox Code Playgroud)
我收到一个错误,该元素不可见:
ElementNotVisibleException: Message: element not visible
Run Code Online (Sandbox Code Playgroud)
所以我尝试了,
ActionChains(driver).move_to_element(download_menu).move_to_element(download_button).click(download_button).perform()
Run Code Online (Sandbox Code Playgroud)
当我这样做时,什么也没有发生。因此,我尝试执行脚本以使菜单可见,然后单击,但这也不起作用:
visibility_tag = download_menu.find_elements_by_tag_name('ul')[1]
driver.execute_script("arguments[0].style.display = 'block'; arguments[0].style.left = '0px'; arguments[0].style.visibility = ''", visibility_tag)
Run Code Online (Sandbox Code Playgroud)
当我运行execute_script函数时,菜单在我的浏览器上变得可见。只是仍然无法点击。我在这里要疯了。有任何想法吗?我正在 Python 中使用 Selenium 的 Chrome 扩展。
您应该尝试使用ExplicitWaits等待Documents链接可见并启用单击,如下所示:-
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.action_chains import ActionChains
wait = WebDriverWait(driver, 10)
download_menu = driver.find_element_by_id("DownloadMenu")
action = ActionChains(driver)
#hover on download_menu first
action.move_to_element(download_menu).perform()
#now find Documents link and click
documents = wait.until(EC.element_to_be_clickable((By.LINK_TEXT, "Documents")))
documents.click()
Run Code Online (Sandbox Code Playgroud)