python-3.x - 如何使用 selenium 和 python 在 `::before` 部分中获取文本?
问题描述
我想访问课后存储::before
的文本。variant__available-qty
在示例中为“14”。
当我尝试:
variants = driver.find_elements_by_class_name("variant__available-qty")
或者
variants = driver.find_elements_by_class_name("variants__container-item")
它以一个空列表作为响应,尽管应该至少有三个元素。我尝试执行一些 JS 脚本(driver.execute_script(...)
)但没有成功。
<div class="variants__container">
<div class="variants__container-headers">
<div class="variants__header--item">Rozmiar</div>
<div class="variants__header--qty">Wybierz ilość</div>
</div>
<div class="variants__container-items">
<div id="variant__70224" class="variants__container-item">
<div class="variant__price">
<div class="price">71.27 zł</div>
</div>
<div class="variant__item">
<div class="variant__attributes">35-37 </div>
<div class="variant__sku">610306143389</div>
</div>
<div class="variant__qty">
<form method="post" action="https://b2b.snapoutdoor.pl/checkout/cart/add/uenc/aHR0cHM6Ly9iMmIuc25hcG91dGRvb3IucGwvL3Jlc3QvVjEvZXh0ZW5kdmFyaWFudHN0b2NhcnQvODY1NDY_Xz0xNjAyMzE4NzI4Nzcz/product/86546/">
<div class="qty">
<div class="qty-down">-</div>
<input type="number" name="qty" data-productid="70224" onfocus="this.value=''" value="0" min="0">
<div class="qty-up">+</div>
</div>
<input type="hidden" name="super_attribute[233]" value="2028"><input type="hidden" name="form_key" value="OPk3fByYxbAMTgnu"><button disabled="" class="add-to-cart action primary" type="submit">Do koszyka</button>
</form>
</div>
<div class="variant__available-qty">12</div>
</div>
<div id="variant__70225" class="variants__container-item">
<div class="variant__price">
<div class="price">71.27 zł</div>
</div>
<div class="variant__item">
<div class="variant__attributes">38-40 </div>
<div class="variant__sku">610306143396</div>
</div>
<div class="variant__qty">
<form method="post" action="https://b2b.snapoutdoor.pl/checkout/cart/add/uenc/aHR0cHM6Ly9iMmIuc25hcG91dGRvb3IucGwvL3Jlc3QvVjEvZXh0ZW5kdmFyaWFudHN0b2NhcnQvODY1NDY_Xz0xNjAyMzE4NzI4Nzcz/product/86546/">
<div class="qty">
<div class="qty-down">-</div>
<input type="number" name="qty" data-productid="70225" onfocus="this.value=''" value="0" min="0">
<div class="qty-up">+</div>
</div>
<input type="hidden" name="super_attribute[233]" value="2036"><input type="hidden" name="form_key" value="OPk3fByYxbAMTgnu"><button disabled="" class="add-to-cart action primary" type="submit">Do koszyka</button>
</form>
</div>
<div class="variant__available-qty">14</div>
</div>
<div id="variant__70226" class="variants__container-item">
<div class="variant__price">
<div class="price">71.27 zł</div>
</div>
<div class="variant__item">
<div class="variant__attributes">41-43 </div>
<div class="variant__sku">610306143402</div>
</div>
<div class="variant__qty">
<form method="post" action="https://b2b.snapoutdoor.pl/checkout/cart/add/uenc/aHR0cHM6Ly9iMmIuc25hcG91dGRvb3IucGwvL3Jlc3QvVjEvZXh0ZW5kdmFyaWFudHN0b2NhcnQvODY1NDY_Xz0xNjAyMzE4NzI4Nzcz/product/86546/">
<div class="qty">
<div class="qty-down">-</div>
<input type="number" name="qty" data-productid="70226" onfocus="this.value=''" value="0" min="0">
<div class="qty-up">+</div>
</div>
<input type="hidden" name="super_attribute[233]" value="2042"><input type="hidden" name="form_key" value="OPk3fByYxbAMTgnu"><button disabled="" class="add-to-cart action primary" type="submit">Do koszyka</button>
</form>
</div>
<div class="variant__available-qty">6</div>
</div>
</div>
</div>
解决方案
你可以简单地使用BeautifulSoup
这个:
from bs4 import BeautifulSoup
html = """
<div class="variants__container">
<div class="variants__container-headers">
<div class="variants__header--item">Rozmiar</div>
<div class="variants__header--qty">Wybierz ilość</div>
</div>
<div class="variants__container-items">
<div id="variant__70224" class="variants__container-item">
<div class="variant__price">
<div class="price">71.27 zł</div>
</div>
<div class="variant__item">
<div class="variant__attributes">35-37 </div>
<div class="variant__sku">610306143389</div>
</div>
<div class="variant__qty">
<form method="post" action="https://b2b.snapoutdoor.pl/checkout/cart/add/uenc/aHR0cHM6Ly9iMmIuc25hcG91dGRvb3IucGwvL3Jlc3QvVjEvZXh0ZW5kdmFyaWFudHN0b2NhcnQvODY1NDY_Xz0xNjAyMzE4NzI4Nzcz/product/86546/">
<div class="qty">
<div class="qty-down">-</div>
<input type="number" name="qty" data-productid="70224" onfocus="this.value=''" value="0" min="0">
<div class="qty-up">+</div>
</div>
<input type="hidden" name="super_attribute[233]" value="2028"><input type="hidden" name="form_key" value="OPk3fByYxbAMTgnu"><button disabled="" class="add-to-cart action primary" type="submit">Do koszyka</button>
</form>
</div>
<div class="variant__available-qty">12</div>
</div>
<div id="variant__70225" class="variants__container-item">
<div class="variant__price">
<div class="price">71.27 zł</div>
</div>
<div class="variant__item">
<div class="variant__attributes">38-40 </div>
<div class="variant__sku">610306143396</div>
</div>
<div class="variant__qty">
<form method="post" action="https://b2b.snapoutdoor.pl/checkout/cart/add/uenc/aHR0cHM6Ly9iMmIuc25hcG91dGRvb3IucGwvL3Jlc3QvVjEvZXh0ZW5kdmFyaWFudHN0b2NhcnQvODY1NDY_Xz0xNjAyMzE4NzI4Nzcz/product/86546/">
<div class="qty">
<div class="qty-down">-</div>
<input type="number" name="qty" data-productid="70225" onfocus="this.value=''" value="0" min="0">
<div class="qty-up">+</div>
</div>
<input type="hidden" name="super_attribute[233]" value="2036"><input type="hidden" name="form_key" value="OPk3fByYxbAMTgnu"><button disabled="" class="add-to-cart action primary" type="submit">Do koszyka</button>
</form>
</div>
<div class="variant__available-qty">14</div>
</div>
<div id="variant__70226" class="variants__container-item">
<div class="variant__price">
<div class="price">71.27 zł</div>
</div>
<div class="variant__item">
<div class="variant__attributes">41-43 </div>
<div class="variant__sku">610306143402</div>
</div>
<div class="variant__qty">
<form method="post" action="https://b2b.snapoutdoor.pl/checkout/cart/add/uenc/aHR0cHM6Ly9iMmIuc25hcG91dGRvb3IucGwvL3Jlc3QvVjEvZXh0ZW5kdmFyaWFudHN0b2NhcnQvODY1NDY_Xz0xNjAyMzE4NzI4Nzcz/product/86546/">
<div class="qty">
<div class="qty-down">-</div>
<input type="number" name="qty" data-productid="70226" onfocus="this.value=''" value="0" min="0">
<div class="qty-up">+</div>
</div>
<input type="hidden" name="super_attribute[233]" value="2042"><input type="hidden" name="form_key" value="OPk3fByYxbAMTgnu"><button disabled="" class="add-to-cart action primary" type="submit">Do koszyka</button>
</form>
</div>
<div class="variant__available-qty">6</div>
</div>
</div>
</div>
""" # The html code
soup = BeautifulSoup(html,'html5lib')
divs = soup.find_all('div',class_ = 'variant__available-qty')
for div in divs:
print(div.text)
输出:
12
14
6
就我而言,我已经对 html 进行了硬编码。但是您可以使用 .提取网页的 html 代码driver.page_source
。然后您可以将该 html 转换为BeautifulSoup
对象并执行这些操作。如果您仍想使用 selenium,请尝试使用xpaths
orcss selectors
代替class_names
. 希望这会有所帮助!
推荐阅读
- wordpress - 重新排序 woocommerce 中的浮动菜单项
- c# - How to join two tables using Entity Framework and match foreign keys
- javascript - 无论我尝试什么,我都无法设置工作间隔
- javascript - 无法将多个变量从 Flask 返回到 Javascript AJAX 函数
- django - 如何在 django postgresql 中上传 geojson 文件
- kubernetes-helm - 如何向范围运算符传递使用 helm 模板的变量构建的列表值?
- javascript - 如何在 2d 画布和 WebGL 画布之间共享纹理?
- android-studio - 如何为任何屏幕选择理想的图像尺寸?
- javascript - 比较两个具有相同值的对象数组,并在 Vue.js2 中将一个数组的属性转换/添加到另一个数组
- ios - 带有许多粒子的逐帧动画?