【问题标题】:Selenium Extraction…Need to extract text of element located by CSS SelectorSelenium Extraction…需要提取CSS Selector定位的元素文本
【发布时间】:2015-06-03 20:47:48
【问题描述】:

我在试图弄清楚发生了什么事情时感到非常沮丧。我的代码上周可以正常工作,但无论出于何种原因,我都没有得到任何结果。在网站上搜索 css 选择器“h3.one”时收到超时消息。我的代码应该找到具有该 css 选择器的所有元素,并且在这些元素中,返回显示的那个。

我需要帮助,尤其是隐式等待

这是我的代码:

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, "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
print (result)

打印只是为了查看正在提取的内容/确保它确实在执行所需的操作。

【问题讨论】:

    标签: python html css selenium selenium-webdriver


    【解决方案1】:

    还有一个带有class="one"h3 元素实际上是不可见的。这个元素把事情搞砸了。

    要么使您的选择器特定于“成功”容器(对我有用):

    div#result-success h3.one
    

    或等待results 块出现:

    div.results
    

    【讨论】:

    • 如果它不可见,为什么会搞砸呢?上面的代码不就是寻找一个可见的h3元素,class="one"吗?
    • 我不能使选择器特定于“成功”容器,因为结果并不总是“成功”......你看到它可能是“结果错误 h3.one”,“ result-fail h3.one”、“result-catchall h3.one”或“result-success h3.one”
    • 你必须非常非常具体地使用硒。没有歧义! :)
    • @ohbrobig 看起来你做错了什么。您应该将wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "h3.one"))) 替换为wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div.results")))
    • 它现在可以工作了。如何让它与 Chrome 一起使用?我收到仅特定于 chrome 的“StopIteration”错误...
    猜你喜欢
    • 2019-11-25
    • 1970-01-01
    • 1970-01-01
    • 2019-09-06
    • 1970-01-01
    • 2013-08-03
    • 1970-01-01
    • 2014-09-19
    • 1970-01-01
    相关资源
    最近更新 更多