我正在尝试将webelement内容存储到python列表中。虽然它有效,但需要大约15分钟来处理~2,000行。
# Grab webelements via xpath
rowt = driver.find_elements_by_xpath("//tbody[@class='table-body']/tr/th[@class='listing-title']")
rowl = driver.find_elements_by_xpath("//tbody[@class='table-body']/tr/td[@class='listing-location']")
rowli = driver.find_elements_by_xpath("//tbody[@class='table-body']/tr/th/a")
title = []
location = []
link = []
# Add webElement strings to lists
print('Compiling list...')
[title.append(i.text) for i in rowt]
[location.append(i.text) for i in rowl]
[link.append(i.get_attribute('href')) for i in rowli]
有更快的方法吗?
答案 0 :(得分:0)
建议(如果没有帮助,道歉):
答案 1 :(得分:0)
您的解决方案是通过表格解析三次,一次针对标题,一次针对位置,一次针对链接。
尝试仅解析一次表格。拥有行的选择器,然后遍历行,并且对于每一行,使用相对路径提取3个元素,例如,对于链接,它看起来像这样:
link.append(row.find_elements_by_xpath("./th/a").get_attribute('href'))
答案 2 :(得分:0)
根据您尝试执行的操作,如果呈现该页面的服务器具有API,则使用该服务器检索数据可能会快得多,而不是从内容中抓取内容。页。
您可以使用浏览器工具查看发送到服务器的不同请求,并且可能以JSON格式返回数据,您可以轻松地从中检索数据。
当然,这假设您对数据感兴趣,而不是直接验证页面内容。
答案 3 :(得分:0)
我想最慢的是[location.append(i.text) for i in rowl]
。
当您致电i.text
时,Selenium需要确定该元素中将显示的内容,因此需要更多时间来处理。
您可以改为使用变通方法i.get_attribute('innerText')
。
[location.append(i.get_attribbute('innerText')) for i in rowl]
但是,我不能保证结果是一样的。 (它应与.Text
)相同或相似。
我已经在我的机器上测试了这个〜2000行,i.text
耗时80秒。虽然i.get_attribute('innerText')
花了28秒。