selenium scraping在前几个元素之后返回空字符串

时间:2017-03-03 06:45:59

标签: python selenium xpath automated-tests

我在python中使用selenium抓取一个网站。 xpath能够找到包含搜索结果的20个元素。但是,内容仅适用于前6个元素,其余元素为空字符串。对于结果的所有页面都是如此

使用的xpath:

results = driver.find_elements_by_xpath("//li[contains(@class, 'search-result search-result__occluded-item ember-view')]")

xpath在chrome

中找到20个元素

enter image description here

结果中的文字

[tt.text for tt in results]

匿名输出:

['Abcddwedwada',
 'Asefdasdfaca',
 'Asdaafcascac',
 'Asdadaacjkhi',
 'Sfskjfbsfvbkd',
 'Fjsbfksjnsvas',
 '',
 '',
 '',
 '',
 '',
 '',
 '',
 '',
 '',
 '',
 '',
 '',
 '',
 '']

我已尝试提取20个元素的id并使用driver.find_element_by_id,但仍然在前6个元素之后得到空字符串。

2 个答案:

答案 0 :(得分:0)

试试这个,

[str(tt.text) for tt in results if str(tt.text) !='']

OR

 [tt.text for tt in results if len(tt.text) > 0]

答案 1 :(得分:0)

我可以假设这样结果的原因如下:当您打开页面时,<li>中有20个条目(<ul>元素),但只显示了6个内容。向下滚动后可以显示其他元素的内容 - 从XHR个请求动态生成的14个条目的内容。

因此,您可能需要向下滚动到列表中的最后一个元素:

from selenium.webdriver.support.ui import WebDriverWait as wait 

wait(driver, 10).until(lambda x: len(driver.find_elements_by_xpath("//li[contains(@class, 'search-result search-result__occluded-item ember-view') and not(text()='')]")) == 20)
results = driver.find_elements_by_xpath("//li[contains(@class, 'search-result search-result__occluded-item ember-view')]")
results[-1].location_once_scrolled_into_view
[tt.text for tt in results]

尝试让我知道结果