這是我正在嘗試決議的頁面的 html 代碼。(它是一家書店) 頁面代碼的一部分
<tr><tr>
<tr><tr>
<tr><tr>
<tr><tr>
<tr><tr>
<tr>
<td width="300" class="highlight">
<b>Издатель:</b>
Додо Пресс,Фантом Пресс
</td>
</tr>
<tr><tr>
<tr><tr>
<tr><tr>
我需要得到以下文本
<b>Издатель:</b> (翻譯 - 出版商)
首先,我nextsibling從 BeautifulSoup 中使用,它運行良好,但在同一站點上的其他書籍頁面上,publisher 元素并不總是在同一個位置,這意味著我的下一個兄弟姐妹鏈沒有得到書籍描述的正確部分。
我試圖用 Selenium 找到確切的文本“Издатель:”
pubs = driver.find_element(By.XPATH, "//*[text()='Издатель:']")
它完成了作業。我得到了文本“Издатель:”。之后,我嘗試找到“Издатель:”之后的下一個元素,因為我需要的文本始終位于“Издатель:”之后。
followingsibling 表單 Selenium 不起作用,因為出版商的名稱沒有類或標簽等。
我也試過運行 JS
pubs = driver.find_element(By.XPATH, "//*[text()='Издатель:']")
pub = driver.execute_script("""
return arguments[0].nextElement""", pubs)
pub = driver.execute_script("return document.evaluate('// [text()='Издатель:']/following-sibling::text()[1]'), document, null, XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue.textContent;")
也沒有奏效。
Publisher 元素沒有任何兄弟元素或子元素,所以我不知道如何獲取它后面的文本。
網站網址 - https://www.bgshop.ru/Catalog/GetFullDescription?id=10652263&type=1
uj5u.com熱心網友回復:
文字ДодоПресс,ФантомПресс是內文本節點,所以你必須使用execute_script()誘導WebDriverWait的element_to_be_clickable() ,你可以使用以下的定位策略:
代碼塊:
driver.get("https://www.bgshop.ru/Catalog/GetFullDescription?id=10652263&type=1") WebDriverWait(driver, 5).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "a.collapsed"))).click() print(driver.execute_script('return arguments[0].lastChild.textContent;', WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//*[text()='Издатель:']//ancestor::td[1]")))).strip()) driver.quit()控制臺輸出:
Додо Пресс,Фантом Пресс
參考
您可以在以下位置找到一些相關的詳細討論:
- 如何從html中提取數字?
- 如何使用 Selenium 和 Python 從通過 xpath 找到的 webdriver 元素中提取文本
- 如何使用 selenium 通過 Python 從類中的文本節點中抓取文本
uj5u.com熱心網友回復:
您可以使用下面的 javascript 代碼來實作這一點。您可以選擇每個b元素,然后獲取其父元素和訪問innerText屬性
document.querySelectorAll('b').forEach( element => {
console.log(element.parentElement.innerText)
})
<table>
<tr></tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr>
<td width="300" class="highlight">
<b>Publisher:</b>
name 1
</td>
</tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr>
<td width="300" class="highlight">
<b>Publisher:</b>
name 2
</td>
</tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr>
<td width="300" class="highlight">
<b>Publisher:</b>
name 3
</td>
</tr>
</table>
如果還有其他b標簽,那么您可以使用 if 陳述句檢查以下內容是否b為發布者
document.querySelectorAll('b').forEach( element => {
if(element.innerText == 'Publisher:'){
console.log(element.parentElement.innerText);
}
})
<table>
<tr></tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr>
<td width="300" class="highlight">
<b>Publisher:</b>
name 1
</td>
</tr>
<tr></tr>
<tr>
<td width="300" class="highlight">
<b>Date:</b>
Date 1
</td>
</tr>
<tr></tr>
<tr></tr>
<tr>
<td width="300" class="highlight">
<b>Publisher:</b>
name 2
</td>
</tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr>
<td width="300" class="highlight">
<b>Publisher:</b>
name 3
</td>
</tr>
</table>
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/374437.html
標籤:javascript Python html 硒 解析
上一篇:Java中如何將文本轉換為物件
下一篇:多行到PHP關聯陣列
