我在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个元素结果中的文字
[tt.text for tt in results]
匿名输出:
['Abcddwedwada',
'Asefdasdfaca',
'Asdaafcascac',
'Asdadaacjkhi',
'Sfskjfbsfvbkd',
'Fjsbfksjnsvas',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'']
我已尝试提取20个元素的id并使用driver.find_element_by_id
,但仍然在前6个元素之后得到空字符串。
答案 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]
尝试让我知道结果