元素上使用Selenium的奇怪行为[Python]

2024-03-28 14:39:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我很难找到一个元素。你知道吗

元素是一个<;ul>;元素,在我右键单击页面时出现,它是网页的菜单(就像在Windows上右键单击桌面时)。当我使用Selenium右键单击它时,运行的下一行代码是:

optionMenuWindow=WebDriverWait(driver,60).until(EC.visibility_of_element_located((By.XPATH, "//ul[1]/li[10]/a[1]")))

optionMenuWindow.click()

我也试过:

presence_of_element_located

但是它挂在那里等待该元素(尽管该元素已经是可见的,因为它被右键单击),并抛出一个TimeoutException。你知道吗

有趣的是,在调试脚本时,在断点等待元素(在optionMenuWindow=WebDriverWait上)时,如果我再次右键单击以再次显示<;ul>;元素,它将正确地定位元素optionMenuWindow,并继续执行optionMenuWindow.click选项(). 这意味着我的xpath是正确的,实际上它在iframe中,我改为正确的。你知道吗

这是html元素

<ul class="ctx-menu popup-shadow ctx-menu-no-icons ctx-menu-contains-submenus" style="display: block; left: 716px; top: 276px;">
    <li class="cf ctx-menu-action-PROPS">
        <a href="javascript:;">
            <span class="ctx-menu-text">Properties...</span>
        </a>
    </li>
    <li class="cf ctx-menu-action- ctx-menu-divider"></li>
    <li class="cf ctx-menu-action- ctx-menu-has-submenu">
        <a href="javascript:;">
            <span class="ctx-menu-text">Notes</span>
        </a>
        <ul class="ctx-menu ctx-menu-submenu popup-shadow ctx-menu-no-icons" style="display: none;">
            <li class="cf ctx-menu-action-ADDNOTE">
                <a href="javascript:;">
                    <span class="ctx-menu-text">Add a New Note</span>
                </a>
            </li>
        </ul>
        <span class="cell-icon cell-FOLDOUT-icon"></span>
    </li>
    <li class="cf ctx-menu-action- ctx-menu-divider"></li>
    <li class="cf ctx-menu-action-ATB">
        <a href="javascript:;">
            <span class="ctx-menu-text">Sort</span>
        </a>
    </li>
    <li class="cf ctx-menu-action- ctx-menu-divider"></li>
    <li class="cf ctx-menu-action-COPY">
        <a href="javascript:;">
            <span class="ctx-menu-text">Copy</span>
        </a>
    </li>
    <li class="cf ctx-menu-action- ctx-menu-divider"></li>
    <li class="cf ctx-menu-action-PR">
        <a href="javascript:;">
            <span class="ctx-menu-text">Print...</span>
        </a>
    </li>
    <li class="cf ctx-menu-action-XL">
         <!-- I WANT TO GET THIS A TAG ELEMENT -->
        <a href="javascript:;">
            <span class="ctx-menu-text">Send to Excel</span>
        </a>
    </li>
    <li class="cf ctx-menu-action-EC">
        <a href="javascript:;">
            <span class="ctx-menu-text">Export...</span>
        </a>
    </li>
    <li class="cf ctx-menu-action- ctx-menu-divider"></li>
</ul>

这是它的xpath(来自mozilla inspector)

html/body/div[2]/iframe/#document/html/body/ul

这是我的右击操作,主窗口基本上是一个大的元素,你可以右击它来查看它的选项

   mainWindow = driver.find_element_by_xpath("//div[@id='5']/div[2]")
    WebDriverWait(driver, 60).until(EC.element_to_be_clickable((By.XPATH, "//div[@id='5']/div[2]")))
    actions.move_to_element(mainWindow).context_click().perform()

有什么想法吗?你知道吗

谢谢你!你知道吗


Tags: text元素actionlielementjavascriptulclass
1条回答
网友
1楼 · 发布于 2024-03-28 14:39:58

我从来没有机会研究selenium中的right click,但是做了一些研究,发现必须将元素赋给context\u click()才能执行right click。所以,你可以试试这个:

mainWindow = driver.find_element_by_xpath("//div[@id='5']/div[2]")
WebDriverWait(driver, 60).until(EC.element_to_be_clickable((By.XPATH, "//div[@id='5']/div[2]")))
actions.move_to_element(mainWindow).context_click(mainWindow).perform()
optionMenuWindow=WebDriverWait(driver,60).until(EC.visibility_of_element_located((By.XPATH, "//ul[1]/li[10]/a[1]")))
optionMenuWindow.click()

相关问题 更多 >