Есть ли способ получить все ссылки на странице, кроме тех, которые содержат указанное c слово в селене? - PullRequest
0 голосов
/ 03 апреля 2020

Я часами пытался найти способ сделать это, и пока ничего не нашел. Я попытался использовать элемент поиска по css, xpath и частичному тексту, используя функцию not. Я пытаюсь отсканировать веб-страницу для всех ссылок, которые не содержат слово «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 голосов
/ 03 апреля 2020

Я наконец-то получил ее, определив новую функцию и отфильтровав список после того, как она была создана, вместо того, чтобы пытаться заставить селен делать это.

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

Затем с помощью этого и фильтра избавиться от None

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)

Отлично сработало:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...