单击隐藏 Link 在 Python 中使用 Selenium
Click Hidden Link Using Selenium in Python
我在 Python 中使用 Selenium 来尝试在鼠标悬停在下拉菜单上时出现的下拉菜单中单击 link。这是下拉菜单信息:
<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>
我正在尝试单击 "a href" 标签中的 "Documents" link。当我将鼠标悬停在菜单上时,代码更改如下:
<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>
您可以看到 visibility:hidden 部分在第二个 ul 标签中消失了。
我使用以下代码在页面上找到了元素:
download_menu = driver.find_element_by_id("DownloadMenu")
download_button = download_menu.find_elements_by_tag_name('a')[1]
如果我尝试使用以下方式单击下载按钮:
download_button.click()
我收到元素不可见的错误消息:
ElementNotVisibleException: Message: element not visible
所以我试过了,
ActionChains(driver).move_to_element(download_menu).move_to_element(download_button).click(download_button).perform()
当我这样做时,没有任何反应。所以,我尝试执行脚本使菜单可见,然后单击,但也没有用:
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)
当我运行 execute_script 功能时,菜单确实在我的浏览器上可见。就是还是不能点击。我要疯了。有任何想法吗?我在 Python.
中使用 Selenium 的 Chrome 扩展
您应该尝试使用 ExplicitWaits
等到 Documents
link 可见并启用点击,如下所示:-
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()
我在 Python 中使用 Selenium 来尝试在鼠标悬停在下拉菜单上时出现的下拉菜单中单击 link。这是下拉菜单信息:
<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>
我正在尝试单击 "a href" 标签中的 "Documents" link。当我将鼠标悬停在菜单上时,代码更改如下:
<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>
您可以看到 visibility:hidden 部分在第二个 ul 标签中消失了。
我使用以下代码在页面上找到了元素:
download_menu = driver.find_element_by_id("DownloadMenu")
download_button = download_menu.find_elements_by_tag_name('a')[1]
如果我尝试使用以下方式单击下载按钮:
download_button.click()
我收到元素不可见的错误消息:
ElementNotVisibleException: Message: element not visible
所以我试过了,
ActionChains(driver).move_to_element(download_menu).move_to_element(download_button).click(download_button).perform()
当我这样做时,没有任何反应。所以,我尝试执行脚本使菜单可见,然后单击,但也没有用:
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)
当我运行 execute_script 功能时,菜单确实在我的浏览器上可见。就是还是不能点击。我要疯了。有任何想法吗?我在 Python.
中使用 Selenium 的 Chrome 扩展您应该尝试使用 ExplicitWaits
等到 Documents
link 可见并启用点击,如下所示:-
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()