【问题标题】:selenium text input in a hidden form以隐藏形式输入硒文本
【发布时间】:2013-12-17 13:11:20
【问题描述】:

我正在尝试登录网站 但问题是它在我将鼠标指针悬停在它上面之前不起作用。

我试过了

loginform = driver.find_element_by_id('loginDiv')       
if loginform.get_attribute('style') == 'display: none;':
    print "check!!"
    email = driver.find_element_by_id('username')
    passwd = driver.find_element_by_id('passwd')
    email.send_keys('my_email')
    passwd.send_keys('my_pass')
    passwd.send_keys(Keys.RETURN)

正如我所说,我只有在鼠标悬停时才能通过此脚本登录(我的意思是首先我运行此脚本并查看页面是否已完全加载,然后我快速将鼠标移到登录按钮上,我可以看到此脚本正在输入我的登录详细信息,但如果我不悬停,它将无法登录)。

【问题讨论】:

    标签: python python-2.7 selenium selenium-webdriver


    【解决方案1】:

    我不确定,但请尝试一下

         options=driver.find_elements_by_class_name("user_area")
         for option in options:
             if(option.text=="Login")
                  option.click()
                  time.sleep(3)
                  option.click()
         email = driver.find_element_by_id('username')
         passwd = driver.find_element_by_id('passwd')
         email.send_keys('my_email')
         passwd.send_keys('my_pass')
         passwd.send_keys(Keys.RETURN)
    

    我写了 option.click() 两次,因为在您的站点中第一次单击会使登录表单消失。所以第二次点击可能会对我们有所帮助..

    【讨论】:

      【解决方案2】:

      我是这样解决的:

      from selenium import webdriver
      driver = webdriver.Firefox()
      driver.get("http://pythondev.zyante.com/")
      loginForm = driver.find_element_by_id("user_area")
      loginLink = loginForm.find_element_by_tag_name("a")
      webdriver.ActionChains(driver).move_to_element(loginLink).perform()
      email = driver.find_element_by_id('username')
      email.send_keys('my_email')
      passwd = driver.find_element_by_id('passwd')
      passwd.send_keys('my_pass')
      button = loginForm.find_element_by_class_name("loginButton")
      webdriver.ActionChains(driver).move_to_element(button).click().perform()
      

      上面的代码对我有用。

      【讨论】:

        【解决方案3】:

        我在 Java 中使用名为 JavascriptExecutor 的类完成了类似的事情。使用这个类,您可以执行 javascript。您可以使用 javascript 在不打开窗口的情况下单击或处理隐藏的元素。不确定 Python 中是否存在相同的内容。

        【讨论】:

          【解决方案4】:

          使用 selenium-webdriver 在 JAVA 中执行以下登录,希望它也适用于 Python。

          在您执行登录操作之前,必须在登录元素上执行鼠标悬停。

          Actions action = new Actions(driver);
          WebElement e=driver.findElement(By.id("user_area"));
          
          //action.moveToElement(e).build().perform();  
          

          上述命令无法打开登录弹出窗口,因为默认情况下,任何元素上的悬停都是在中心执行的。不幸的是,在 UI 上,Login|Request Access|Help 是一个带有 id="user_area" 的单个 html 元素,并且在悬停期间自动移动到中心,从而突出显示请求访问。

          action.moveToElement(e,10,0).build().perform();
          

          因此,上面的语句用于给出元素左上角的偏移量并悬停在登录上。

          有关使用 selenium-webdriver 的高级鼠标操作的进一步阅读,请参阅以下链接 http://selenium.googlecode.com/git/docs/api/java/org/openqa/selenium/interactions/Actions.html

          检查函数 moveToElement 以更好地理解它。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-11-21
            • 1970-01-01
            • 1970-01-01
            • 2011-12-06
            • 2010-12-13
            相关资源
            最近更新 更多