Selenium + Python: 打印元素的文本属性
Selenium + Python: Print the text attribute of an element
我想浏览一个网站,找到一个元素并打印它。
Python版本:3.10; Selenium Webdriver:Firefox; IDE: PyCharm 2021.3.2 (CE);
OS:Fedora 35 虚拟机
我能够导航到在下拉菜单 中生成文本的适当页面。
当我通过 CSS 选择器定位元素并尝试打印它时,输出会打印文本“None”。
我希望它打印计划名称,在本例中为“Dual Complete Plan 1”。
该元素并不总是存在,所以我还需要捕获任何异常。
我要打印的元素的相关HTML代码:
<span class="OSFillParent" data-expression="" style="font-size: 12px; margin-top: 5px;">Dual Complete Plan 1</span>
我要打印的元素的更多 HTML 代码(我要捕获的元素在第四个 div 以下):
<td data-header="Plan Name">
<div id="b8-b40-l1_0-132_0-$b2" class="OSBlockWidget" data-block="Content.AccordionItem">
<div id="b8-b40-l1_0-132_0-b2-SectionItem" class="section-expandable open is--open small-accordion" data-container="" data-expanded="true" aria-expanded="true" aria-disabled="false" role="tab">
<div id="b8-b40-l1_0-132_0-b2-TitleWrapper" class="section-expandable-title" data-container="" style="cursor: pointer;" role+"button" aria-hidden="false" aria-expanmded="true" tabindex="0" aria-controls="b8-b40-l1_0-132_0-b2-Content" EVENT FLEX
<div id="b8-b40-l1_0-132_0-b2-Title" class="dividers full-width">
<span class="OSFillParent" data-expression="" style="font-size: 12px; margin-top: 5px;">Dual Complete Plan 1</span>
</div>
<div class="section-expandable-icon" data-container="" aria-hidden="true"
::after
</div>
</div>
<div id="b8-b40-l1_0-132_0-b2-ContentWrapper" class="section-expandable-content no-padding is--expanded" data-container="" tabindex="0" aria-hidden="false" aria-labelledby="b8-b40-l1_0-132_0-b2-TitleWrapper">
<div id="b8-b40-l1_0-132_0-b2-Content" role="tabpanel">
<a data-link="" href="https://www.communityplan.com" target="_blank" title="Click for more information"> EVENT
<span class="OSFillParent" data-expression="" style="font-size: 12px;">www.CommunityPlan.com</span>
</a>
<span class="OSFillParent" data-expression="" style="font-size: 12px:">Phone Number: 8005224700</span>
</div>
</div>
</div>
</div>
</td>
我的相关 Selenium 代码:
# Find the Plan Name & if present set it to the variable "Advantage"
try:
Advantage = (WebDriverWait(driver, 5).until(
EC.presence_of_element_located((By.CSS_SELECTOR, "#b8-b40-l1_0-132_0-b2-Title > span:nth-child(1)"))).get_attribute("value"))
except:
pass
print('3[91;46m', Advantage, '3[0m')
我希望输出是“Dual Complete Plan 1”,这是我在屏幕和 HTML 中看到的。相反,我得到以下信息:
None
显然“优势”变量被设置为“None”。
为什么?
我可以在上面的 HTML 代码中看到要打印的文本“Dual Complete Plan 1”。
我究竟做错了什么?
我觉得我需要一本关于“获取属性”的入门书?
要获取文本 Dual Complete Plan 1
,您需要使用
element.text
或
element.get_attribute("innerHTML")
或
element.get_attribute("textContent")
而不是 presence_of_element_located()
使用 visibility_of_element_located()
并跟随css selector
识别
div[id*='Title'] > span.OSFillParent
或
div.dividers.full-width > span.OSFillParent
代码:
try:
Advantage = WebDriverWait(driver, 5).until(
EC.visibility_of_element_located((By.CSS_SELECTOR, "div[id*='Title'] > span.OSFillParent"))).text
except:
pass
print(Advantage )
我想浏览一个网站,找到一个元素并打印它。
Python版本:3.10; Selenium Webdriver:Firefox; IDE: PyCharm 2021.3.2 (CE); OS:Fedora 35 虚拟机
我能够导航到在下拉菜单 中生成文本的适当页面。 当我通过 CSS 选择器定位元素并尝试打印它时,输出会打印文本“None”。 我希望它打印计划名称,在本例中为“Dual Complete Plan 1”。 该元素并不总是存在,所以我还需要捕获任何异常。
我要打印的元素的相关HTML代码:
<span class="OSFillParent" data-expression="" style="font-size: 12px; margin-top: 5px;">Dual Complete Plan 1</span>
我要打印的元素的更多 HTML 代码(我要捕获的元素在第四个 div 以下):
<td data-header="Plan Name">
<div id="b8-b40-l1_0-132_0-$b2" class="OSBlockWidget" data-block="Content.AccordionItem">
<div id="b8-b40-l1_0-132_0-b2-SectionItem" class="section-expandable open is--open small-accordion" data-container="" data-expanded="true" aria-expanded="true" aria-disabled="false" role="tab">
<div id="b8-b40-l1_0-132_0-b2-TitleWrapper" class="section-expandable-title" data-container="" style="cursor: pointer;" role+"button" aria-hidden="false" aria-expanmded="true" tabindex="0" aria-controls="b8-b40-l1_0-132_0-b2-Content" EVENT FLEX
<div id="b8-b40-l1_0-132_0-b2-Title" class="dividers full-width">
<span class="OSFillParent" data-expression="" style="font-size: 12px; margin-top: 5px;">Dual Complete Plan 1</span>
</div>
<div class="section-expandable-icon" data-container="" aria-hidden="true"
::after
</div>
</div>
<div id="b8-b40-l1_0-132_0-b2-ContentWrapper" class="section-expandable-content no-padding is--expanded" data-container="" tabindex="0" aria-hidden="false" aria-labelledby="b8-b40-l1_0-132_0-b2-TitleWrapper">
<div id="b8-b40-l1_0-132_0-b2-Content" role="tabpanel">
<a data-link="" href="https://www.communityplan.com" target="_blank" title="Click for more information"> EVENT
<span class="OSFillParent" data-expression="" style="font-size: 12px;">www.CommunityPlan.com</span>
</a>
<span class="OSFillParent" data-expression="" style="font-size: 12px:">Phone Number: 8005224700</span>
</div>
</div>
</div>
</div>
</td>
我的相关 Selenium 代码:
# Find the Plan Name & if present set it to the variable "Advantage"
try:
Advantage = (WebDriverWait(driver, 5).until(
EC.presence_of_element_located((By.CSS_SELECTOR, "#b8-b40-l1_0-132_0-b2-Title > span:nth-child(1)"))).get_attribute("value"))
except:
pass
print('3[91;46m', Advantage, '3[0m')
我希望输出是“Dual Complete Plan 1”,这是我在屏幕和 HTML 中看到的。相反,我得到以下信息:
None
显然“优势”变量被设置为“None”。 为什么? 我可以在上面的 HTML 代码中看到要打印的文本“Dual Complete Plan 1”。 我究竟做错了什么? 我觉得我需要一本关于“获取属性”的入门书?
要获取文本 Dual Complete Plan 1
,您需要使用
element.text
或
element.get_attribute("innerHTML")
或
element.get_attribute("textContent")
而不是 presence_of_element_located()
使用 visibility_of_element_located()
并跟随css selector
识别
div[id*='Title'] > span.OSFillParent
或
div.dividers.full-width > span.OSFillParent
代码:
try:
Advantage = WebDriverWait(driver, 5).until(
EC.visibility_of_element_located((By.CSS_SELECTOR, "div[id*='Title'] > span.OSFillParent"))).text
except:
pass
print(Advantage )