Как использовать атрибут «not start-with» xpath в селене для пропуска определенных сайтов в python - PullRequest
1 голос
/ 02 апреля 2020

Я написал код, который запрашивает ввод у пользователя и открывает утку go для поиска веб-сайта, связанного с этим значением ввода. В результатах поиска я хочу открыть веб-сайт, который не начинается с веб-сайта, упомянутого мной в //a[not(starts-with(@href, 'website'))]. Это мой код:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
import time
import pyautogui
from selenium.common.exceptions import NoSuchElementException, StaleElementReferenceException

stuff = input()
options = webdriver.ChromeOptions()
options.headless = True
browser = webdriver.Chrome()
browser.implicitly_wait(30)
browser.maximize_window()

browser.get("http://www.duckduckgo.com")
elem = browser.find_element_by_name("q")
elem.clear()

elem.send_keys(stuff)
elem.submit()

matched_elements = browser.find_elements_by_xpath('//a[not(starts-with(@href, "https://it.wikipedia.org/"))]' or '//a[not(starts-with(@href, "https://www.facebook.com"))]')

if matched_elements:
    matched_elements[0].click()

Предположим, пользователь ввел следующие данные: - Regina Pacis, Reggio nell'Emilia, 42124 и результаты поиска таковы: -

enter image description here

Я хочу, чтобы код пропускал результаты поиска wikipedia и facebook и нажмите на ссылку, выделенную красным. Но вместо этого код возвращается к duckduck go.

Я знаю, что могу легко достичь результата с помощью: -

match_elements = browser.find_elements_by_class_name('result__url__domain')
match_elements[2].click()

Но результаты поиска являются динамическими c который будет меняться в соответствии с пользовательским вводом. Я был бы очень признателен, если бы вы, ребята, могли мне помочь

1 Ответ

1 голос
/ 03 апреля 2020

Вы можете использовать:

dom_bl = ["wikipedia.org", "facebook.com"]
match_elements = browser.find_elements_by_class_name('result__url')
for link in match_elements:
    url = link.get_attribute("href")
    if any(dom in url for dom in dom_bl):
        continue
    link.click()
    break
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...