![](/img/trans.png)
[英]How to check what is causing a web element to be invisible to Python Selenium?
[英]How to Scrape Text of Invisible Element in Selenium?
在我的程序中,有时我需要刮擦不可见/隐藏的Web元素的文本。 我知道WebDriver
通常会返回可见文本,并且可以通过以下方法之一来刮除隐藏/不可见的文本(如本和本主题中的建议):
JavascriptExecutor js = (JavascriptExecutor) driver;
scrapedText = js.executeScript ("return arguments[0].innerHTML", webElement).toString();
或致电:
element.attribute('textContent')
element.attribute('innerText')
element.attribute('innerHTML')
当这两种解决方案都起作用时,它们将检索不仅不可见而且通常无法通过getText()
方法标识的文本。 例如在以下HTML中:
<div class="a-section a-spacing-none"> <a id="brand" class="a-link-normal" href="/abc-d/b/ref=w_bl_sl_l_ap_ap_web_258XXX11?ie=UTF8&node=258XXX11&field-lbr_brands_browse-bin=abc+d"> <img id="brand" src="https://images-na.ssl-images-amazon.com/images/G/01/x-locale/brands/byline-logo/25xxx11._CB520xxx1_SR120,50_.jpg" alt=""/> </a> </div>
即使我正在尝试识别'href'
属性(使用XPath
' //a[contains(@href, 'brands_browse-bin')]
'href'
//a[contains(@href, 'brands_browse-bin')]
') textContent, innerText or innerHTML
都将返回<img
元素
换句话说,我正在尝试创建一个通用的解决方案,其中我的程序将始终标识不可见/隐藏的元素,而不会像使用textContent, innerText or innerHTML
时那样标识其他元素(基本上,我希望得到与调用getText()
相同的结果getText()
唯一的例外是它包含隐藏元素)
这可能吗?
谢谢
更新:
如果您导航到: https : .//*[@id='priceblock_ourprice']
并尝试抓取“价格”(例如,通过.//*[@id='priceblock_ourprice']
),则该元素将无效不可见(我知道可以通过单击“一次性购买”将其显示)。 如果我决定通过上面列出的方法之一来检索元素-我将能够检索价格,但它还会在上面提供的HTML示例中检索错误的值。 如果有一种方法可以识别隐藏的元素(类似于getText()
),但不会自动包含“ innerHTML”等,则不会出现此问题。 简而言之,我需要一个通用的解决方案,该解决方案可以识别“价格”(在上面的示例中已隐藏),并且还可以识别上述HTML代码段中的正确元素。
在您提供的从Amazon产品中获取价格的示例中,这三个选项都将返回相同的值,因为元素中除文本外没有其他内容。
<span id="priceblock_ourprice" class="a-size-medium a-color-price">$26.99</span>
这三个选项之间的区别在于内部存在格式或其他HTML元素时。 例如,如果您在下面的示例HTML上使用.innerHTML
<span id="priceblock_ourprice" class="a-size-medium a-color-price"><strong>$26.99</strong></span>
它将返回<strong>$26.99</strong>
,而不仅仅是$26.99
。
最简单的选择(也是您似乎想要的选择)是始终使用.textContent
。 它将仅返回所包含的文本(绝不包含HTML标记等)。 届时,您将需要适当地提供一个定位器来查找包含所需文本的元素。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.