Python - Несоответствие запросов Selenium XPATH - PullRequest
0 голосов
/ 25 марта 2020

Я протестировал запрос XPATH с использованием Chrome расширения SelAssist, и он работает довольно хорошо. Синтаксис "// * [@ id =" fbPhotoSnowliftTimestamp "] / a / abbr":

enter image description here

enter image description here

Я начал писать код python для обнаружения такого элемента:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys

chrome_profile = r"C:\Users\XXX\AppData\Local\Google\Chrome\User Data"

options = webdriver.ChromeOptions()

options.add_argument('user-data-dir=' + chrome_profile)

w = webdriver.Chrome(executable_path="C:\\Projects\\selenium\\chromedriver.exe", chrome_options=options)
w.get('https://website.com')    

test = w.find_element(By.XPATH, "//*[@id=\"fbPhotoSnowliftTimestamp\"]/a/abbr")

Страница загружена нормально, и она точно такая же, которую я проверял вручную. К сожалению, я продолжаю получать эту ошибку:

raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//*[@id="fbPhotoSnowliftTimestamp"]/a/abbr"}
  (Session info: chrome=80.0.3987.149)

Я не могу понять, что я делаю неправильно. Спасибо за любое предложение.

1 Ответ

1 голос
/ 25 марта 2020

Возможно, страница загружается не так быстро, как ожидалось. Исключение тайм-аута будет выдано, если xpath не найден с использованием ниже. Попробуйте:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

chrome_profile = r"C:\Users\XXX\AppData\Local\Google\Chrome\User Data"

options = webdriver.ChromeOptions()

options.add_argument('user-data-dir=' + chrome_profile)

w = webdriver.Chrome(executable_path="C:\\Projects\\selenium\\chromedriver.exe", chrome_options=options)
w.get('https://website.com')    

test = WebDriverWait(w, 10).until(EC.visibility_of_element_located((By.XPATH, "//*[@id=\"fbPhotoSnowliftTimestamp\"]/a/abbr")))
#w.find_element(By.XPATH, "//*[@id=\"fbPhotoSnowliftTimestamp\"]/a/abbr")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...