【问题标题】:Selenium Visible, Non Visible Elements (Drop Down)硒可见、不可见元素(下拉)
【发布时间】:2013-05-11 11:40:31
【问题描述】:

我正在尝试选择下拉列表的所有元素。

我正在测试的网站是:http://jenner.com/people

我试图访问的下拉列表(复选框列表)是“位置”列表。

我正在使用 Python。我收到以下错误:消息:u'Element 当前不可见,因此可能无法与之交互'

我使用的代码是:

    from selenium import webdriver
    url = "http://jenner.com/people"
    driver = webdriver.Firefox()
    driver.get(url)
    page = driver.page_source

    element = driver.find_element_by_xpath("//div[@class='filter offices']")
    elements = element.find_elements_by_tag_name("input")

    counter = 0
    while counter <= len(elements) -1:
            driver.get(url)
            element = driver.find_element_by_xpath("//div[@class='filter offices']")
            elements1 = element.find_elements_by_tag_name("input")
            elements1[counter].click()
            counter = counter + 1

我尝试了一些变体,包括在单击下拉选项之前单击初始元素,但均无效。关于如何使元素在 Selenium 中可见的任何想法。我花了最后几个小时在网上寻找答案。我看过一些关于在 Selenium 中移动鼠标的帖子,但还没有找到适合我的解决方案。

非常感谢。

【问题讨论】:

  • 找出我不知道的python代码伙伴。让我知道它对你有用。
  • 我会的。谢谢奥姆卡尔。你发帖后,我今天早上做了一些工作,今天晚些时候再做。今天有一些事情要做,然后我才能回去工作。
  • 欧姆卡。你的解决方案对我不起作用。我已将其转换为 Python。我认为有两个问题。首先,我有同样的问题。其次,我没有从过滤器办公室到过滤器办公室打开这个报道。
  • 点击“位置”后,班级名称从“过滤办公室”更改为“过滤办公室打开”该动态班级名称。

标签: python selenium visible mousemove invisible


【解决方案1】:

由于输入复选框在初始状态下不可见,因此在单击“过滤办公室”选项后它们变得可见。此外,类名称也从“过滤办公室”更改为“过滤办公室打开”,如果您有在firebug中观察到。下面的代码对我有用,但它是在Java中。但是你可以弄清楚python,因为它包含非常基本的代码。

    driver.get("http://jenner.com/people");
    driver.findElement(By.xpath("//div[@class='filter offices']/div")).click();
    Thread.sleep(2000L);
    WebElement element = driver.findElement(By.xpath("//div[@class='filter offices open']"));
    Thread.sleep(2000L);
    List <WebElement> elements =  element.findElements(By.tagName("input"));

    for(int i=0;i<=elements.size()-1;i++)
    {       
        elements.get(i).click();
        Thread.sleep(2000L);
        elements =  element.findElements(By.tagName("input"));

    }

【讨论】:

    【解决方案2】:

    我知道这是一个老问题,但我在寻找其他信息时遇到了这个问题。我不知道您是否在网站上进行 QA 以查看下拉菜单中是否显示了正确的城市,或者您是否实际上正在与该网站进行交互以获取应该在每个位置的人员列表。 (旁注:如果您不重置过滤器,选择一个位置然后取消选择它会返回 0 个结果 - 可能不是所需的行为。)

    如果您尝试获取此站点上每个位置的用户列表,我认为不使用 Selenium 会更容易。这是从第一个城市“芝加哥”拉人的一个非常简单的解决方案。当然,您可以列出您应该寻找的城市列表,并通过循环遍历列表将它们放入“数据”变量中。

    import requests
    from bs4 import BeautifulSoup
    
    url = 'http://jenner.com/people/search'
    data = 'utf8=%E2%9C%93&authenticity_token=%2BayQ8%2FyDPAtNNlHRn15Fi9w9OgXS12eNe8RZ8saTLmU%3D&search_scope=full_name' \
           '&search%5Bfull_name%5D=&search%5Boffices%5D%5B%5D=Chicago'
    r = requests.post(url, data=data)
    soup = BeautifulSoup(r.content)
    people_results = soup.find_all('div', attrs={'class': 'name'})
    for p in people_results:
        print p.text
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-05
      • 2015-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-18
      相关资源
      最近更新 更多