我有一个while loop
,我认为它应该运行得快得多,但是最多需要50秒才能浏览网站中的最多350行。
我尝试制作单独的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
我得到了正确的输出,但是需要很长时间。我可以做些什么来提高循环速度?
答案 0 :(得分:3)
主要问题是您要在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":
...
还考虑使用列表处理一系列VARn
变量;您可以使用类似的列表["Y", "A", ...]
为目标字符串建立索引,然后使用内部循环和join
调用来构建输出行。
答案 1 :(得分:1)
我建议使用xpath轴将元素定位在不同的位置。使用循环的代码成本更高,并且到达特定元素需要花费不必要的时间。现在,有了xpath轴,您就可以轻松地在DOM中向上或向下遍历xpath。