有没有一种方法可以捕获页面上除包含硒中特定单词的链接以外的所有链接?

时间:2020-04-03 02:20:55

标签: python arrays selenium selenium-webdriver

我已经尝试了数小时,以找到一种方法来执行此操作,到目前为止,我什么都没发现。我试过使用not函数通过css,xpath和部分文本使用find元素。我正在尝试扫描网页上所有不包含“ google”一词的链接,并将它们附加到数组中。

请记住,语音和get_audio是我未包含的独立功能。

driver = webdriver.Chrome(executable_path='mypath')
url = "https://www.google.com/search?q="
driver.get(url + text.lower())
speak("How many articles should I pull?")
n = get_audio()
speak(f"I'll grab {n} articles")
url_array = []
for a in driver.find_elements_by_xpath("//*[not(contains(text(), 'google'))]"):
    url_array.append(a.get_attribute('href'))
print(url_array)

我总是得到一些与find_elements_ *相似的东西(不管我在这里放什么东西),或者它可以工作,但是它将所有内容添加到数组中,即使其中包含google。谁有想法?谢谢!

1 个答案:

答案 0 :(得分:0)

我终于通过定义一个新函数并在创建列表之后过滤列表来获得它,而不是尝试让硒来完成它。

def Filter(string, substr): 
    return [str for str in string if
             any(sub not in str for sub in substr)] 

然后使用该过滤器和过滤器来消除无

url_array_2 = []
    for a in driver.find_elements_by_xpath('.//a'):
        url_array_2.append(a.get_attribute('href'))

    url_array_1 = list(filter(None, url_array_2)) 
    flist = ['google']

    url_array = Filter(url_array_1, flist)

    print(url_array)

工作完美:)

相关问题