硒可见,不可见元素(下拉)

时间:2013-05-11 11:40:32

标签: python selenium visible mousemove invisible

我正在尝试选择下拉菜单的所有元素。

我正在测试的网站是: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中移动鼠标的帖子,但还没有找到适合我的解决方案。

非常感谢。

2 个答案:

答案 0 :(得分:2)

由于输入复选框在初始状态下不可见,因此在点击“过滤办公室”选项后可以看到它们。此外,如果您有类别名称从“过滤办公室”更改为“过滤办公室”,则会有变化在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"));

    }

答案 1 :(得分:0)

我知道这是一个老问题,但我在寻找其他信息时遇到过它。我不知道你是否在网站上进行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