我絕不是開發人員。我通過谷歌解決了這個問題,但這個問題的深度我不明白。
如果您能解釋我在編程知識方面的不足,將不勝感激。
使用 powershell,我可以從我選擇的任何 div 中獲取所有 .Text。但是,我無法弄清楚如何從 .Text 為“abc”的 div 中的 a 中找到文本
$allGames.Text 包含所有游戲標題,到目前為止還不錯:
[System.Reflection.Assembly]::LoadFrom("{0}\WebDriver.dll" -f $PathToFolder)
if ($env:Path -notcontains ";$PathToFolder" ) {
$env:Path = ";$PathToFolder"
}
$ChromeOptions = New-Object OpenQA.Selenium.Chrome.ChromeOptions
$ChromeOptions.AddArgument('start-maximized')
$ChromeDriver = New-Object OpenQA.Selenium.Chrome.ChromeDriver($ChromeOptions)
$ChromeDriver.Url = $uri
#sometimes site is slow, 5s should be enough
Start-Sleep -Seconds 5
$allGames = $ChromeDriver.FindElementsByCssSelector("div.result-title.gameName")
里面是一個我想要檢索的文本。或 的名稱都不是唯一的。有數百個同名的 div 和 span。所以我不能直接訪問它們。
我只想要跨度中的文本,如果它的 div 有文本“abc”
我對 powershell 的基本知識告訴我這樣做
foreach ($game in $allGames) {
$game.GetType() #=RemoteWebElement
if ($game.Text -eq "abc") {
Write-Host "Found something!"
$span = $game.FindElementsByCssSelector("span.search-listing-count-text")
$span.Text
}
}
然而 $span 什么都不包含
我不明白是我沒有理解 Selenium(我什至不知道它是什么。谷歌告訴我我可以用它在網站上查找東西)或者我是否沒有理解面向物件的方面powershell(我沒有:))
我錯過了什么?
html 片段:
<div class="search-results">
<div class="result-title gameName">abc
</div>
<div class="result-info">
<span class="search-listing-count-text">123
</span>
</div>
</div>
uj5u.com熱心網友回復:
你的問題:你用 abc 找到 div 比你需要回到 1 級到:然后你想找到你的 div。您搜索的 div 不是 abc div 的子級
CssSelector 并不能回傳,所以我使用了 Xpath(Google Xpath 了解更多資訊)。也許您需要使用“/..//”(洗掉第一個 .)
$span = $game.FindElementByXPath("./..//span[@class='search-listing-count-text']")
注意:從 powershell 運行 selenium,這對我來說是新的,每天都在 leerling。好的!
uj5u.com熱心網友回復:
重建 HTML 你會得到:
<div class="search-results">
<div class="result-title gameName">abc</div>
<div class="result-info">
<span class="search-listing-count-text">123</span>
</div>
</div>
現在,allGames將包含帶有類名的 _DIV_sresult-title和gameName
$allGames = $ChromeDriver.FindElementsByCssSelector("div.result-title.gameName")
所需的SPAN是DIV的后代,它是串列中收集的節點的同級$allGames。
解決方案
要根據串列中的節點選擇所需的 SPAN,$allGames您可以使用以下定位器策略:
X路徑:
foreach ($game in $allGames) { $game.GetType() #=RemoteWebElement if ($game.Text -eq "abc") { Write-Host "Found something!" $span = $game.FindElementsByXPath("//ancestor::div[1]//div[@class='result-info']/span") $span.Text } }
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/376410.html
上一篇:此版本的ChromeDriver僅支持Chrome版本97當前瀏覽器版本為96.0.4664.45,使用Selenium和Chrome時出現二進制路徑錯誤
