Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Python with Selenium:单击intercepted并查找不同的span类_Javascript_Python_Html_Selenium_Automation - Fatal编程技术网

Javascript Python with Selenium:单击intercepted并查找不同的span类

Javascript Python with Selenium:单击intercepted并查找不同的span类,javascript,python,html,selenium,automation,Javascript,Python,Html,Selenium,Automation,我正在尝试编写一个如下工作的程序: 转到主页 单击列表上的第一个项目(所有项目均以“项目-”)开头,这将使我进入下一页 找到一个上面有“a”的按钮并单击它 找到“确认”按钮并单击它 返回到第2项、第3项等 我有两个问题。首先,上面有“A”的按钮有时比简单的带有“123”脚注的“A”例如“A”有更多的文本。我对HTML了解不多,但这会导致不同的span和div类: <div class="selectOne"> <span class="selectObject-no-f

我正在尝试编写一个如下工作的程序:

  • 转到主页
  • 单击列表上的第一个项目(所有项目均以“项目-”)开头,这将使我进入下一页
  • 找到一个上面有“a”的按钮并单击它
  • 找到“确认”按钮并单击它
  • 返回到第2项、第3项等
  • 我有两个问题。首先,上面有“A”的按钮有时比简单的带有“123”脚注的“A”例如“A”有更多的文本。我对HTML了解不多,但这会导致不同的span和div类:

    <div class="selectOne">
        <span class="selectObject-no-footnote">A</span>
    </div>
    
    <div class="selectOne-with-footnote">
        <span class="selectObject">A</span>
            <span class="selectFootnote">
                <span>123</span>
            </span>
    </div>
    

    有没有一种不同的工具可以做到这一点,而不必担心元素被某物覆盖或不在窗口内?(好斗?

    总体逻辑是正确的。我建议做两个更改(这是JAVA)

    1) 使用以下xpath查找文本为A的按钮。这应适用于两种情况(A或A123)

    2) 您可以向下滚动到该元素,等待上面的元素在页面上可见并可单击

    ((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", button);
    

    在1)中,您没有指定要查找一个,并且有多个按钮具有相同的span类名,这就是我使用contains('A')的原因。另外,您的解决方案不是要慢得多吗,因为它必须遍历所有的跨类,而不仅仅遍历我指定的跨类,或者它是不可见的?至于2),我如何才能向下滚动到特定元素?更新了xpath。它可能较慢,但几乎不明显。我还添加了向下滚动到页面上特定元素的代码。我觉得现在它100%地点击了按钮,但是在几个按钮之后,它运行得非常慢(比如5秒滚动到a按钮并点击)。当我使用window.scrollTo向下滚动时,它工作正常,直到有东西崩溃。还有为什么Selenium可以向右滚动到元素,即使它在窗口之外,但不能单击它?@NotStudent您可以单击该元素,但如果它不在视图端口中,则不能保证它。我不知道为什么需要5秒才能向下滚动。您的脚本是否正在等待PageDoc完全加载?如果这个答案有用,请接受。谢谢
    WebElement button = driver.findElement(By.xpath("//span[contains(@class,'selectObject')][contains(text(),'A')]");
    button.click();
    
    ((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", button);