Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.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
Python Selenium webcrawling组合框_Python_Selenium_Combobox - Fatal编程技术网

Python Selenium webcrawling组合框

Python Selenium webcrawling组合框,python,selenium,combobox,Python,Selenium,Combobox,我试图在python中单击java脚本组合框,但是如果我正常操作,它会给我一个错误,告诉我组合框是隐藏的,我会按编程方式等待组合框出现,但它不会出现。组合框中的这个选项是一个子菜单,但是,如果我只从real menu中选择一个选项,它会工作,但不会与子菜单选项一起工作。这是一个网站,>高级搜索>然后是组合框,我正在寻找Premium Mega的子菜单选项>Premium Mega:Fannie Mae/Ginnie Mae支持的可调利率。谢谢 Selenium将无法单击,因为要选择的元素被认为是

我试图在python中单击java脚本组合框,但是如果我正常操作,它会给我一个错误,告诉我组合框是隐藏的,我会按编程方式等待组合框出现,但它不会出现。组合框中的这个选项是一个子菜单,但是,如果我只从real menu中选择一个选项,它会工作,但不会与子菜单选项一起工作。这是一个网站,>高级搜索>然后是组合框,我正在寻找Premium Mega的子菜单选项>Premium Mega:Fannie Mae/Ginnie Mae支持的可调利率。谢谢

Selenium将无法单击,因为要选择的元素被认为是不可见的活动元素。因此,使用js解决此问题的唯一方法。 在java中对我起作用的是:

 @Test
    public void neeededDropdownSelect() throws InterruptedException {
        driver.get("https://mbsdisclosure.fanniemae.com/PoolTalk2/index.html");
          jsClickOnElement("li#tab_1>a>span");
        WebElement dropdownMenu = fluentWait(By.cssSelector("span#asSelectedSecType"));
        dropdownMenu.click();


        jsClickOnElement("div[class=\"fg-menu-container ui-widget ui-widget-content ui-corner-all fg-menu-flyout\"] ul[class=\"fg-menu ui-corner-all\"]>li>a[id=\"MEGA_INTERIM\"]");
        jsClickOnElement("div[class=\"fg-menu-container ui-widget ui-widget-content ui-corner-all fg-menu-flyout\"] ul[class=\"fg-menu ui-corner-all\"]>li>ul.ui-corner-all a[id=\"MEGA_INTERIM_ARM\"]");

    }

  public WebElement fluentWait(final By locator){
        Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
                .withTimeout(30, TimeUnit.SECONDS)
                .pollingEvery(5, TimeUnit.SECONDS)
                .ignoring(NoSuchElementException.class);

        WebElement foo = wait.until(
                new Function<WebDriver, WebElement>() {
                    public WebElement apply(WebDriver driver) {
                        return driver.findElement(locator);
                    }
                }
        );
        return  foo;              }     ;

    public void jsClickOnElement(String cssSel){
        JavascriptExecutor js = (JavascriptExecutor) driver;
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append("var x = $(\'"+cssSel+"\');");
        stringBuilder.append("x.click();");
        js.executeScript(stringBuilder.toString());

    }

希望这对您有所帮助

无论如何,我可以在python中使用它吗?我用java向您展示了这段代码,因此我想您可以简单地将它应用到python中,因为css选择器div[class=\fg menu container ui widget ui widget ui widget content ui corner all fg menu corner all\]>li>a[id=\MEGA\u middial\];jsClickOnElementdiv[class=\fg菜单容器ui小部件ui小部件内容ui角点所有fg菜单弹出按钮\]ul[class=\fg菜单ui角点所有\]>li>ul.ui-corner-all a[id=\MEGA_-middle_-ARM\];是正确的,这段代码对我有效我检查了它=我得到了这个错误selenium.common.exceptions.ElementNotVisibleException:Message:u'元素当前不可见,因此可能无法与'when i do div[class=\fg menu container ui widget ui widget ui widget content ui corner all fg menu flyout\]ul[class=\fg menu ui corner all\]>li>ul.ui-corner-all a[id=\MEGA\u middial\u ARM\]尝试然后将js集成到您的python代码中查看此链接:然后您将能够使用我的js代码,它总是单击不可见的元素。在python中有一个与js JSClickOneElement等效的元素,我尝试使用鼠标覆盖,但无法设置鼠标覆盖的持续时间。