XPath funktioniert nicht, wenn ein Pfad verwendet wird, der eindeutig im Elementbaum vorhanden ist [geschlossen]Python

Python-Programme
Anonymous
 XPath funktioniert nicht, wenn ein Pfad verwendet wird, der eindeutig im Elementbaum vorhanden ist [geschlossen]

Post by Anonymous »

Für ein WebElement, das vom Selenium-Webtreiber abgefragt wird: Wenn ich_attribute('outerHTML') erhalte, wird es gedruckt

Code: Select all


. . .

. . .

aber wenn ich versuche, das erste TD-Element mit abzurufen

Code: Select all

element.find_element(By.XPATH, "./tr/td[1]")
Ich erhalte eine Ausnahme

Code: Select all

selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"./tr/td[1]"}
Auch statt zu tun

Code: Select all

first_row = table.find_element(By.XPATH, ".//tbody/tr[1]")
first_col = first_row.find_element(By.XPATH, ".//tr/td[1]")
wenn ich direkt nach dem td-Element mit
abfrage

Code: Select all

first_col = table.find_element(By.XPATH, ".//tbody/tr[1]/td[1]")
dann funktioniert es.
Das scheint mir keinen Sinn zu ergeben. Dies ist auf der Website https://www.bseindia.com/corporates/ann.html. Um das Problem zu reproduzieren, installieren Sie die folgenden Python-Pakete:

Code: Select all

webdriver_manager
undetected-chromedriver
seleniumbase
und führen Sie den folgenden Python-Code aus

Code: Select all

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)

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post