Selenium代码提取文本/只查找带有“one”类的可见元素

时间:2015-03-23 22:36:03

标签: javascript jquery python selenium selenium-webdriver

我遇到了硒的问题。我想用类" one"。

提取可见元素的文本

这是html:

<div id="result-success" class="text-center displayed"> 
<h3 class="one">Success</h3>        
<p class="two">Yes! I've found them!</p> 
<div class="list-items"> <a href="mailto:ryan.johnson@target.com" title="Click here to directly send an email" class="label label-success three">                          

这是4种可能性之一。其他可能性是不可见的,但所有人都有班级&#34;一个&#34;在他们中。那么我该如何只选择这个元素呢?

我必须使用jquery吗?我想在这个课程中提取文本,所以文本&#34;成功&#34;以及&#34; list-items&#34;中的电子邮件;类。

我该怎么做?我不认为该网站是用jquery编写的。我的代码目前在python中。

这是我的代码:

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, 10)

wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "h3.one")))
msg=browser.execute_script("$('.one:visible').text()")
print(msg)

3 个答案:

答案 0 :(得分:0)

我们的想法是让所有h3元素与类one过滤可见的。然后使用following-sibling从位于以下a兄弟中的div标记处获取电子邮件:

h3s = driver.find_elements_by_css_selector('h3.one')
h3 = next(element for element in h3s if element.is_displayed())
a = h3.find_element_by_xpath('following-sibling::div/a')

print h3.text, a.get_attribute('href')

演示:

>>> from selenium import webdriver
>>> driver = webdriver.Firefox()
>>> driver.get('http://www.voilanorbert.com')
>>> driver.find_element_by_id("form-search-name").send_keys('John Smith')
>>> driver.find_element_by_id("form-search-domain").send_keys('gmail.com')
>>> driver.find_element_by_name("search").click()
>>>
>>> h3s = driver.find_elements_by_css_selector('h3.one')
>>> h3 = next(element for element in h3s if element.is_displayed())
>>> a = h3.find_element_by_xpath('following-sibling::div/a')
>>>
>>> h3.text, a.get_attribute('href')
('SUCCESS', 'mailto:smith.john@gmail.com')

答案 1 :(得分:-1)

如果您想要从网络元素中提取文字,则必须使用get_attribute方法发送&#39; textContent&#39;(适用于Firefox,Google Chrome)或内部文字&#39;(适用于IE)参数。 我在C#中使用它,它工作正常。

答案 2 :(得分:-4)

以下CSS选择器应该有效:

.displayed > h3.one

*编辑:问题是:

这是4种可能性之一。其他可能性是不可见的,但所有人都有班级&#34;一个&#34;在他们中。那么我该如何只选择这个元素呢?

上面的CSS选择器将选择显示的元素,因为父元素只有一个元素具有显示的类。您可以使用带有firepath的任何输入criterea来测试它。