硒提取问题:等待/未找到元素

时间:2015-04-08 18:48:06

标签: python css selenium web-scraping

在chrome和firefox中,一切都很好,直到我需要提取文本。我收到这个错误:

h3 = next(element for element in h3s if element.is_displayed())
StopIteration

我甚至添加了流利的等待。

browser = webdriver.Firefox()
browser.get('https://www.voilanorbert.com/')
inputElement = browser.find_element_by_id("form-search-name")
inputElement.send_keys(leadslist[i][0])
inputElement = browser.find_element_by_id("form-search-domain")
inputElement.send_keys(leadslist[i][1])
searchbutton = browser.find_element_by_name("search")
searchbutton.click()

wait = WebDriverWait(browser, 20)
wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div.results")))
wait2 = WebDriverWait(browser, 3000, poll_frequency=100, ignored_exceptions=[ElementNotVisibleException])
wait2.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, "h3.one")))
h3s = browser.find_elements_by_css_selector('h3.one')
h3 = next(element for element in h3s if element.is_displayed())
result = h3.text

我认为它因为它实际上没有提取任何东西,所以它只是一个空列表。 一些可能有用的图片: 这是之前的图片: enter image description here

这是后图: enter image description here

我需要提取“结果”类的“文本中心显示”类中的内容。

enter image description here

1 个答案:

答案 0 :(得分:1)

答案很简单,在等待搜索结果时只需要一个不同的选择器。 下面的方法(C#)非常有效,它可以用几行来减少你的代码。

一个"结果DIV"搜索完成后变为可见。它是显示"文本中心的唯一元素" class,以便满足您的所有选择器需求。 一旦显示了这样的DIV,您就知道在哪里精确定位H3元素(它是所述DIV的孩子)。 因此,在您点击搜索按钮后,只需等待以下元素显示:

        IWebElement headerResult = w.Until(ExpectedConditions.ElementIsVisible(By.CssSelector("div[class=\"text-center displayed\"] h3")));
        string result = headerResult.Text;