簡體   English   中英

Python selenium 等到一個元素不是由 xpath 定位?

[英]Python selenium wait until an element located not by xpath?

我在多個頁面中抓取一個網頁,按某些按鈕將前進到下一頁,但所有頁面共享完全相同的 url,這意味着我抓取的大多數元素在單擊之前的某些相同類型的按鈕之前是不可見的,因此嘗試單擊它們會引發以下錯誤:

ElementNotInteractableException: Message: Element <div class="answer"> could not be scrolled into view

元素都是同一個class,它們都是另一個class的實例的子類,每個父類都有子類class的多個實例。

為了找到元素,我使用了兩次.find_elements_by_class_name()方法:

lists = []
for i in Firefox.find_elements_by_class_name('parent'):
    lists.append(i.find_elements_by_class_name('child')

每個子列表中只有一個元素需要單擊,該元素由其屬性確定並使用列表索引標識,所以我完全不知道它的 xpath 是什么。

在單擊前面的元素之前,每個元素都不可見,因此必須等待它們以避免ElementNotInteractableException

我正在使用以下語法:

wait = WebDriverWait(Firefox, 3)
wait.until(EC.visibility_of_element_located((By.XPATH, xpath)))

我需要找到使用上述方法定位的元素的 xpath,不幸的是 Selenium 本機不支持此功能。

但我在這里找到了一個竅門:

In [1]: el
Out[1]: <Element span at 0x109187f50>

In [2]: el.getroottree().getpath(el)
Out[2]: '/html/body/div/table[2]/tbody/tr[1]/td[3]/table[2]/tbody/tr/td[1]/p[4]/span'

所以我認為,如果我可以從 selenium 頁面源構建 lxml 樹,然后以某種方式將 selenium 元素轉換為 lxml 元素,那么它就可以完成,盡管我不知道具體如何......

這樣的事情怎么樣(也許你需要使用contains for class ):

wait.until(EC.visibility_of_element_located((By.XPATH, f'//*[@class="parent"][{index}]//*[@class="child"][{subindex}]')))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM