Hello,大家好,這會我們來分享一下如何在動態的表單中通過selenium獲取到我們想要的事件並且根據指定的條件篩選出來我們想要的那一項並且進行操作。
我們知道,在一般的網頁上,一個表單的數據一般是不變的,我們只需要通過xpath進行一下簡單的定位就能獲取到,現在的場景是,我們實際在設備上觸發一次事件,接着去相應網站上去找到我們當前觸發的這個事件,點擊進去並進行其他的操作。
第一次進行事件獲取,小猿我是這么處理的,因為那個頁面上有記錄一共有多少條記錄的數字,當時是偷了個懶,方法是通過獲取到這個數字,然后使用for循環依次往下進行檢索匹配,最省時間,效率也最高,避免了使用while 1因自己退出條件設置不合適導致死循環,反倒不如for循環檢索利索,之前一直運行沒啥問題,嗯,自我感覺良好。心情美美噠。
然而事實上,沒過幾天,我就高興不起來了。
接下來的某一天,在進行遍歷檢索的時候,突然好多別的設備也觸發了很多的事件,並且是排布在我的事件的前面,這樣在進行for循環的時候,檢查的是別人的事件,自己的事件排布在當時獲取事件數量之后,肯定是檢索不到了。
思索半天,找到了另一個辦法,也就是現在的方法
比如我們使用xpath找尋某個表格中第四列內容包含數字12345以及第一列包含字符auto trigger的信息,並且依據時間進行判斷,從而選擇處理哪一個事件,這是從我們測試角度進行處理的
# 這里我們就簡化一下代碼,只是將重要的進行展示出來,其它的大家各取所需,進行增刪就行 # 這個contains還可以搭配or和not使用 all_target_event_list = driver.find_elements_by_xpath( "//table[@id='serviceRequesttable']/tbody/tr[td[1][contains(text(),'%s')] and td[4][contains(text(),'%s')]]" % (kwargs['call_type'], test_number)) # 這里的電話類型以及電話號碼是我們外部傳入的,可以進行不同號碼的變化查詢 # 這樣執行的結果是我們會獲取指定信息的那個tr對象的列表對象, 這里我們可以進行再次的處理,從而實現我們的需求,比如 # 1. 獲取該列表元素的所有的文本值 我們可以使用下面的方法進行獲取到 for target_event in all_target_event_list: # 這時是遍歷其中的每一個tr對象,我們可以獲取指定的td中的文本值也可以獲取所有的文本值 print(target_event.text) # 這樣獲取到的是這個tr對象的文本值,是包含這個tr對象下面所有td的文本值的一個字符串類型的文本值,這個一般不會用,因為意義不大 print(target_event.find_element_by_xpath('td[8]').text) # 這樣的方法用的比較多,比如第8列的內容是這個電話事件產生的時間,我們可以這樣去通過校驗時間值從而確定當前的這個tr對象是vu是就是我們要找的事件對象,從而進行下一步的處理,因為在網站上事件可能很多,並且新的事件也可能會隨時產生,也即這個表格的數據是動態生成的,隨時可能會增加數據或者刪除數據,使用for循環進行挨個遍歷事件不太好行得通,可能在還沒有循環完,新的事件又產生,我們想要的事件可能會往后面排,這樣可能會出現的結果是明明有事件產生但是我們卻找不到的bug for td_text in target_event.find_elements_by_tag_name('td'): print(td_text.text) # 這樣的方法是我們可以通過兩層的for循環獲取到我們想要找到的符合特定條件的元素對象的td的所有的文本值
獲取指定元素標簽下的所有的text,指的是指定的元素下面有幾個是被b標簽分割開的,想要一次性的全部獲取
all_text = value_list[0].xpath('string(.)').strip()
這里只是摘取了部分的關鍵代碼,由於業務原因,沒有展示出來全部的代碼,各位需要的話把這部分摘取到自己的代碼塊中,相應整合一下便好,謝謝大家~
更多精彩,可以關注樓主的公眾號,
最全面的django面試題總結: 回復django面試題即可獲取, pycharm供給激活壓縮包, 回復pycharm破解包即可獲取,破解步驟在我的這一篇博客(點我直達)已經破解百次, 屢試不爽.
以及其他樓主精心打造的原創文章,歡迎各位來訪.