使用Python,Selenium和PhantomJS获取多个元素的相同属性的最有效方法是什么?我的解决方案使用了find_elements_by_css_selector
,它定位了我需要的所有元素,这需要不到一秒的时间,然后循环访问列表以获取我需要的属性。我的循环占用了大约2500个元素,这对我来说看起来很重要,因为考虑所有元素都使用了find_elements_by_css_selector
方法。是get_attribute
方法真的很贵或我做错了什么?Python + Selenium有效获取列表中元素的属性
from selenium import webdriver
driver = webdriver.PhantomJS(executable_path=r'mypath\phantomjs.exe')
driver.set_window_size(1120, 550)
driver.get("https://www.something.com")
table = []
elements = driver.find_elements_by_css_selector("tr[id*='bet-']") # takes under 1 second
for element in elements:
table.append(element.get_attribute('data-info')) # takes over 60 seconds (2000 elements)
driver.close
您可以通过使用'名单comprehension',而不是'for'循环很少得到加速:'表= [element.get_attribute( 'data-info')for driver.find_elements_by_css_selector(“tr [id * ='bet - ']”)]' – Andersson
属性不作为对象属性的一部分存在,所以它就像有2000个独立的webdriver调用。如果这需要60秒,我会说它非常快。 –
使用CSS选择器定位的所有元素是否都具有您想要的属性或只有其中一些属性?如果只有其中的一部分,你可以添加到你的CSS选择器,以确保它们都在循环之前完成。 “TR [ID * = '赌注 - '] [数据信息]”。 – JeffC