python - 使用 Selenium [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。点击()。所以这意味着我的 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 检查器)
html/body/div[2]/iframe/#document/html/body/ul
这是我的右键操作,mainWindow 基本上是一个大元素,您可以右键单击它以查看其选项
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()
有任何想法吗?
谢谢!
解决方案
我从来没有机会在 selenium 中探索右键单击,但做了一些研究,发现您必须将元素赋予 context_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()
推荐阅读
- java - 如何使用最好的 android Volley 发布 JSON 数组并获取 JSON 对象作为响应?
- angular - 角度 4:ngb-dropdown-formcontrolName 不起作用
- python - 如何在 django 中使两个模型相互关联(反之亦然)。一个公司应该有多个目录,但一个目录只能有一个公司
- python-3.x - 如何在 Python + Selenium 中使用 cookie 来抓取网站
- sql - SQL - 选择子查询中的最后一条记录,包括其他条件
- javascript - React 中的其他组件未检测到存储更改 - MobX
- python - LSTM,多输入:3 天 *(136 个元素的数组 + 2 个整数)
- c# - unity scrollRect 没有通过脚本滚动到最后
- c++ - 从输入文件中读取参数与将其设置为 .h 文件中的静态常量 - 编译器优化
- python - 使用 python 从文档中识别与金融相关的单词