XPath не работает при использовании пути, который явно существует в дереве элементов [закрыто]Python

Программы на Python
Ответить
Anonymous
 XPath не работает при использовании пути, который явно существует в дереве элементов [закрыто]

Сообщение Anonymous »

Для WebElement, запрошенного из веб-драйвера Selenium, когда я получаю get_attribute('outerHTML'), он печатает


. . .

. . .


но когда я пытаюсь получить первый элемент TD с помощью
element.find_element(By.XPATH, "./tr/td[1]")

Я получаю исключение
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"./tr/td[1]"}

Также вместо того, чтобы делать
first_row = table.find_element(By.XPATH, ".//tbody/tr[1]")
first_col = first_row.find_element(By.XPATH, ".//tr/td[1]")

если я напрямую запрашиваю элемент td с помощью
first_col = table.find_element(By.XPATH, ".//tbody/tr[1]/td[1]")

тогда это работает.
Мне кажется, это не имеет никакого смысла. Это на сайте https://www.bseindia.com/corporates/ann.html. Чтобы воспроизвести проблему, pip установите следующие пакеты Python:
webdriver_manager
undetected-chromedriver
seleniumbase

и запустите следующий код Python
import undetected_chromedriver as uc
import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager

ANNOUNCEMENTS_URL = f"https://www.bseindia.com/corporates/ann.html"

options = webdriver.ChromeOptions()
user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.5249.119 Safari/537.36'
options.add_argument('user-agent={0}'.format(user_agent))
options.add_argument('--disable-cache')
driver = uc.Chrome(
options=options,
service=ChromeService(ChromeDriverManager().install()))
driver.get(ANNOUNCEMENTS_URL)
corp_ann_tables = driver.find_elements(By.XPATH, "//table[@ng-repeat='cann in CorpannData.Table']")
first_row = corp_ann_tables[0].find_element(By.XPATH, ".//tbody/tr[1]")
print('Row=' + first_row.get_attribute('outerHTML'))
company_name_and_artile_title = first_row.find_element(By.XPATH, ".//tr/td[1]")
print(company_name_and_artile_title)



Подробнее здесь: https://stackoverflow.com/questions/798 ... ments-tree
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»