将所有结果打印在一起

时间:2017-11-23 04:50:23

标签: python selenium for-loop

我失眠了。 SO有很多帮助,但仍然有问题。

def function_input():
    .................... 
    find_input.clear() 
    find_input.send_keys(i)
    button.click()
    time.sleep(5)
    f_copy()

def f_copy():
    element3 = driver.find_elements_by_xpath(" ")

    l=[]
    for element4 in element3:
        element4_list = element4.text

        l.append(pd.DataFrame(element4_list, columns=['a','b','c']))
        pd.set_option('display.max_colwidth', -1)
        df = pd.concat(l).reset_index(drop=True)
        df['Input value'] = i

    print(tabulate(df, headers='keys', tablefmt='psql'))    

def loop_page():
    find_next_button = driver.find_element_by_xpath(" ")    
    if 'no-next-page'in find_next_button.get_attribute(''):
        pass
    elif 'yes-next-page' in find_next_button.get_attribute(''):
        find_next_button.click()
        time.sleep(5)
        f_copy()
    else:
        pass

for j in range(1, 5, 1):
    i = j

    f_copy()
    loop_page()

我得到的结果是

>>>

+---+----+----+----+        #page 1 (input 1)
|   | a  | b  | c  |
+---|----+----+----+
| 0 | 3  | 1  | 21 |
+---+----+----+----+

+---+----+----+----+        #page 2 (input 1)
|   | a  | b  | c  |       
+---|----+----+----+
| 0 | 5  | 8  | 41 |
+---+----+----+----+

+---+----+----+----+        #page 1 (input 2)
|   | a  | b  | c  |       
+---|----+----+----+
| 0 | 3  | 3  | 3  |
+---+----+----+----+
>>>

我试过了df.concat,但是桌子没有“分开”。 我尝试了所有可能的循环,仍然失败。 那是我最好的循环结果。

结果应该是,将每个页面的所有结果从每个输入返回到一个表中。

>>>

+---+----+----+----+        
|   | a  | b  | c  |
+---|----+----+----+
| 0 | 3  | 1  | 21 |
+---+----+----+----+
| 0 | 5  | 8  | 41 |
+---+----+----+----+
| 0 | 3  | 3  | 3  |
+---+----+----+----+
>>>

1 个答案:

答案 0 :(得分:0)

您必须使用要与新数据框一起追加的数据框pd.concat()。将您的代码更改为 -

def f_copy():
    element3 = driver.find_elements_by_xpath(" ")

    l=[]
    for element4 in element3:
        element4_list = element4.text

        l.append(pd.DataFrame(element4_list_2, columns=['a','b','c']))
        l['Input value'] = i
        pd.set_option('display.max_colwidth', -1)
        df = pd.concat([df,l]).reset_index(drop=True)

    print(tabulate(df, headers='keys', tablefmt='psql'))  

另外,请确保您在循环外声明/初始化df数据框,但在函数范围内,应该这样做。