iT邦幫忙

0

Python Selenium 移除list中【不可見】的連結

com 2020-05-01 15:25:402287 瀏覽

各位前輩好,我使用find_elements_by_xpath取得長度35的list,我要將不顯示的部分剃除,目前我的程式如下

from selenium import webdriver
browser = webdriver.Chrome('./chromedriver.exe')
url_random=random.randint(0,url_length-1)
browser.get('https://www.kip.com.tw/modules/news/')
k = browser.find_elements_by_xpath("//a[contains(@href,'https://www')]")
e = len(k)#一共35個
t = 0
for i in range(e):
    if not k[i].is_displayed():
        del k[i]
        t+=1
    if len(k) <= (t+1):
        break

因為我的邏輯錯誤,在第25次時,出現list index out of range錯誤
原因我知道是list被del後長度不足。
請問各位前輩,我應該如何改寫,才能將【不顯示的部分剃除】。

2 個回答

0
echochio
iT邦高手 1 級 ‧ 2020-05-02 17:52:07
最佳解答

新開一個空的 list
把可顯示的元素塞入這個新開的 list 內

d=[]
for i in k:
    if i.is_displayed():
        d.append(i)

不知這是不是你要的

com iT邦新手 5 級 ‧ 2020-05-03 00:37:49 檢舉

感謝前輩解決了我的問題

echochio iT邦高手 1 級 ‧ 2020-05-21 08:54:26 檢舉

突然想到... 這樣與上面寫法相同的簡單寫法

d = [i for i in k if i.is_displayed()]
0
海綿寶寶
iT邦大神 1 級 ‧ 2020-05-01 21:50:58

我看不懂你的目的是什麼
單就程式來看 list index out of range
可以試試看

for i in range(e):
    if not k[i].is_displayed():
        del k[i]
        t+=1
    if len(k) <= (t+1):
        break

改成

for i in range(e,0,-1):
    if not k[i].is_displayed():
        del k[i]

簡單說
就是「從後面刪除 not is_diplayed 的元素,以避免 out of range 問題」

com iT邦新手 5 級 ‧ 2020-05-03 00:37:13 檢舉

感謝前輩分享range(e,0,-1)的寫法。

我要發表回答

立即登入回答