Here is the full element I'm trying to click:
<div role="presentation" class="markAllContainer columnHeaderSelectAll" data-dyn-explicitcolumnwidth="custom" data-dyn-bind="
click: $data.ToggleMarkAllRecordsMode,
css: {
'is-loading': $data._isLoading
<div class="columnHeaderWrapper markingColumnHeader" role="columnheader">
<span class="marked-record-checkbox checkMarkTarget" role="checkbox" data-dyn-bind="
checked: $data.MarkAllRecords,
skip: $dyn.util.markAllSkip($data),
attr: {'aria-label': $dyn.label('Grid_SelectAllRowsShortcut')}" aria-checked="false" tabindex="-1" aria-label="Select all rows">
<span class="checkMarkGlyph checkMarkTarget Checkmark-symbol"></span>
<span class="boxGlyph checkMarkTarget"></span>
</span>
我试着用ActionChains
和element.click()
来点击父元素以及树上的每个子元素,用WebDriverWait来等待元素在DOM中可见。这个元素是一个复选框,出现在页面的顶部附近,所以它不应该被滚动到。为了测试各种点击方法,我在调试端口上打开了一个Chrome实例,这让我可以反复执行Selenium的命令,而不必关闭/打开浏览器。由于我试图实现自动化的网站的性质,这也是必要的。这是在微软的Dynamics 365中,如果这有什么帮助的话。
用这个控制台命令打开Chrome窗口。
chrome.exe --remote-debugging-port=9222 --user-data-dir="C:\guest"
然后我在Python中用这一行将驱动程序连接到它。
chrome_options = Co()
chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")
driver = Chrome(executable_path=chromedriver, options=chrome_options)
Using ActionChains(driver).move_to_element(element).click().perform()
I get the error [object HTMLDivElement] has no size and location
(or HTMLSpanElement
).
Using .click()
I just get element not interactable
.
我还尝试使用了以下execute_script()
命令。
driver.execute_script("arguments[0].click();", element)
driver.execute_script("arguments[0].setAttribute('aria-checked', 'true')", element)
在上面的后一个例子中,所选择的元素是span
的子元素,有class="marked-record-checkbox checkMarkTarget"
。
【替换代码14
但是在这两种情况下都没有发生,我也没有得到错误信息。我可以看到这个跨度元素也是有事件监听器的元素。所以我对为什么没有点击方法在这个元素上起作用倍感困惑。
为了确定,我当然能够手动点击这个复选框。如果有任何帮助,我们将不胜感激,如果我可以在这里提供任何其他信息,请告诉我。我对HTML/Selenium没有太多经验。
EDIT:
下面是我为span元素复制的样式,应该是相关的(如前所述,它有事件监听器)。
font-style: normal;
font-variant: normal;
font-weight: 400;
border-collapse: collapse;
border-spacing: 0;
color: inherit;
user-select: none;
border: 0;
margin: 0;
padding: 0;
font-family: DynamicsSymbol;
font-size: 16px;
display: table;
width: 30px;
height: 30px;
cursor: pointer;
text-align: center;
我确实看到它没有指定 "可见性 "样式。这可能是原因吗?如果是这样,我怎样才能在样式表中加入 "可见性"?