Python 而循环需要很长时间才能完成
我有一个Python 而循环需要很长时间才能完成,python,selenium,selenium-webdriver,Python,Selenium,Selenium Webdriver,我有一个while循环,我觉得应该运行得快得多,但在网站上最多350行的内容中,需要花费50秒 我曾经尝试过单独的if语句,但这花费了同样的时间 while 'x' not in driver.find_element_by_xpath('/html/body/form/table[2]/tbody/tr[2]/th/div/table/tbody/tr['+str(n)+']/td[1]/span').text.strip(): VAR1 = driver.fi
while循环
,我觉得应该运行得快得多,但在网站上最多350行的内容中,需要花费50秒
我曾经尝试过单独的if语句,但这花费了同样的时间
while 'x' not in driver.find_element_by_xpath('/html/body/form/table[2]/tbody/tr[2]/th/div/table/tbody/tr['+str(n)+']/td[1]/span').text.strip():
VAR1 = driver.find_element_by_xpath('/html/body/form/table[2]/tbody/tr[2]/th/div/table/tbody/tr[11]/td[2]').text.strip()
if driver.find_element_by_xpath('/html/body/form/table[2]/tbody/tr[2]/th/div/table/tbody/tr['+str(n)+']/td[1]/span').text.strip() == 'Y':
VAR2 = ''
VAR2 = driver.find_element_by_xpath('/html/body/form/table[2]/tbody/tr[2]/th/div/table/tbody/tr['+str(n)+']/td[2]/span').text.strip()
elif driver.find_element_by_xpath('/html/body/form/table[2]/tbody/tr[2]/th/div/table/tbody/tr['+str(n)+']/td[1]/span').text.strip() == 'Z':
VAR3 = ''
VAR3 = driver.find_element_by_xpath('/html/body/form/table[2]/tbody/tr[2]/th/div/table/tbody/tr['+str(n)+']/td[2]/span').text.strip()
elif driver.find_element_by_xpath('/html/body/form/table[2]/tbody/tr[2]/th/div/table/tbody/tr['+str(n)+']/td[1]/span').text.strip() == 'A':
VAR4 = ''
VAR4 = driver.find_element_by_xpath('/html/body/form/table[2]/tbody/tr[2]/th/div/table/tbody/tr['+str(n)+']/td[2]/span').text.strip()
elif driver.find_element_by_xpath('/html/body/form/table[2]/tbody/tr[2]/th/div/table/tbody/tr['+str(n)+']/td[1]/span').text.strip() == 'B':
VAR5 = ''
VAR5 = driver.find_element_by_xpath('/html/body/form/table[2]/tbody/tr[2]/th/div/table/tbody/tr['+str(n)+']/td[2]/span').text.strip()
elif driver.find_element_by_xpath('/html/body/form/table[2]/tbody/tr[2]/th/div/table/tbody/tr['+str(n)+']/td[1]/span').text.strip() == 'C':
VAR6 = ''
VAR6 = driver.find_element_by_xpath('/html/body/form/table[2]/tbody/tr[2]/th/div/table/tbody/tr['+str(n)+']/td[2]/span').text.strip()
elif driver.find_element_by_xpath('/html/body/form/table[2]/tbody/tr[2]/th/div/table/tbody/tr['+str(n)+']/td[1]/span').text.strip() == 'D':
VAR7 = ''
VAR7 = driver.find_element_by_xpath('/html/body/form/table[2]/tbody/tr[2]/th/div/table/tbody/tr['+str(n)+']/td[2]/span').text.strip()
elif driver.find_element_by_xpath('/html/body/form/table[2]/tbody/tr[2]/th/div/table/tbody/tr['+str(n)+']/td[1]/span').text.strip() == 'E':
VAR8 = ''
VAR8 = driver.find_element_by_xpath('/html/body/form/table[2]/tbody/tr[2]/th/div/table/tbody/tr['+str(n)+']/td[2]/span').text.strip()
else:
pass
output = VAR1 + '|' + VAR2 + '|' + VAR3 + '|' + VAR4 + '|' + VAR5 + '|' + VAR6 + '|' + VAR7 + '|' + VAR8
print(output)
n += 1
else:
n += 1
我得到了正确的输出,但这需要很长时间。我能做些什么来提高循环的速度吗?主要的问题是,你调用一个非平凡函数的次数从3次到9次不等,而大多数调用只是重复你已经完成的搜索。为要检查的每一行调用函数一次,存储结果,并与之进行比较
# This call has no variables; do it only once
VAR1 = driver.find_element_by_xpath('/html/body/form/table[2]/tbody/tr[2]/th/div/table/tbody/tr[11]/td[2]').text.strip()
# Let a `for` handle your counter; break the loop when done.
for n in range(len(your_table)):
row_n = driver.find_element_by_xpath('/html/body/form/table[2]/tbody/tr[2]/th/div/table/tbody/tr['+str(n)+']/td[1]/span').text.strip()
if x in row_n:
break
elif row_n = "Y":
...
还考虑用列表处理您的系列<代码>瓦恩<代码>变量;您可以使用类似的列表为目标字符串编制索引,然后使用内部循环和连接调用构建输出行。
我建议使用xpath axis来定位不同位置的元素。使用循环会增加代码成本,并且需要花费不必要的时间才能到达特定元素。现在,使用xpath axis,您可以轻松地在DOM中向上或向下遍历xpath。您不断地对相同的两个xpath值调用find\u element\u by\u xpath()
。我想这是一个有点昂贵的手术。为每个所需的xpath调用一次,保存结果,然后在if
语句中检查结果,而不是再次调用它。@JohnGordon这大大加快了程序的速度。谢谢。在发布答案后更改问题详细信息?不好。。。现在,答案需要编辑才能保持正确。DOM代表什么?它代表可以访问以供参考的文档对象模型