JavaScript click可以在控制台中工作,但不能在脚本中工作

2024-09-27 02:27:04 发布

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

我用硒来测试一个站点,想法是从一个table获取所有rows,选择可见的buttons,然后click它们。单击后,将触发一个事件,并使用AJAX将数据加载到rows下。你知道吗

下面的代码在Firefox控制台中非常有效。实际上,点击的速度非常快,一次就可以加载所有的项目(最多有10行,所以我不必添加等待事件)。你知道吗

function button_visible(row) { var opacity = row.style.opacity; if (opacity == "" || opacity == 1) { return true; } else { return false; } } var table = document.querySelectorAll('div>.table'); for (x = 1; x < table.length; x++) { row = table.item(x); var row_buttons = row.querySelectorAll('icon-button'); for (var i = 0; i < row_buttons.length; i++) { if (button_visible(row_buttons.item(i))) { row_buttons.item(i).click(); } } }

从Selenium运行此JavaScript不起作用:

js='function button_visible(row) {var opacity = row.style.opacity; if (opacity === "" || opacity == 1) {return true;} else {return false;}} var table = document.querySelectorAll('div>.table'); for (x = 1; x < table.length; x++) {var row = table.item(x); var row_buttons = row.querySelectorAll('icon-button'); for (var i = 0; i  < row_buttons.length; i++) {if(button_visible(row_buttons.item(i))){ row_buttons.item(i).click();}}}'
driver.execute_script(js) 

添加了comeconsole.log,它们会显示在控制台中,但click事件根本不会触发。有趣的是,在尝试使用Selenium运行代码之后,从控制台运行JavaScript也不起作用。你知道吗

我还尝试将这些rows作为array返回,并单击Selenium,但这只会使事情变得复杂,因为我得到了过时的元素异常。为了确保它正常工作,我需要在每次单击之后重新获取table rows

我甚至想不出为什么这样做行不通。有什么意见吗?你知道吗


Tags: forreturnifvartablebuttonitemlength
1条回答
网友
1楼 · 发布于 2024-09-27 02:27:04

请尝试以下操作:

driver.execute_script("""
function button_visible(row) {

    var opacity = row.style.opacity;

    if (opacity == "" || opacity == 1) {

        return true;

    } else {

          return false; 

      }

}

var table = document.querySelectorAll('div>.table');

for (x = 1; x < table.length; x++) {

     row = table.item(x);
     var row_buttons = row.querySelectorAll('icon-button');

     for (var i = 0; i  < row_buttons.length; i++) {

          if (button_visible(row_buttons.item(i))) {

              row_buttons.item(i).click();

          }

     }

}
""")

PS:在Selenium(Python)中运行多行JS时,应该使用"""(start和end)。你知道吗

希望对你有帮助!你知道吗

相关问题 更多 >

    热门问题