添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

Python Selenium 无法点击 div/span checkbox 元素

2 人关注

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>

我试着用ActionChainselement.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;

我确实看到它没有指定 "可见性 "样式。这可能是原因吗?如果是这样,我怎样才能在样式表中加入 "可见性"?