0

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

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

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

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

我正在使用的代码是:

    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 中移动鼠标的帖子,但还没有找到适合我的解决方案。

非常感谢。

4

2 回答 2

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"));

    }
于 2013-05-11T12:56:38.930 回答
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
于 2014-04-22T21:48:05.180 回答