[英]How do I get to the sub-element of the elements found with FindElement Xpath in Selenium Python
[英]How do I cycle through these elements using selenium in python and get the XPATH value in return?
我希望能夠循環瀏覽此表的選項卡並返回 XPATH 和選項卡名稱。
我正在使用 python selenium webdriver。
這是包含我想要數據的所有選項卡的主容器
當我將網站輸入 selenium webdriver 時,我希望它首先找到這個 chart_table_container。
<div id="chart_table_container" class="tab_container ui-tabs ui-corner-all ui-widget ui-widget-content">
<ul class="tabs ui-tabs-nav ui-corner-all ui-helper-reset ui-helper-clearfix ui-widget-header" role="tablist">
然后我希望它循環瀏覽下面的 3 個選項卡,有時可能會超過 3 個。而且 XPATH 可能不同,所以我想自動化。
有沒有辦法循環瀏覽下面的選項卡並將 XPATH (///*[@id="ui-id-3"]) 以及選項卡的名稱(First Order)返回到字典中?
這是一個選項卡的示例
<li role="tab" tabindex="0" class="ui-tabs-tab ui-corner-top ui-state-default ui-tab ui-tabs-active ui-state-active" aria-controls="chart_wrapper_datatable_first_order" aria-labelledby="ui-id-3" aria-selected="true" aria-expanded="true">
<a href="#chart_wrapper_datatable_first_order" role="presentation" tabindex="-1" class="ui-tabs-anchor" id="ui-id-3">First Order</a></li>
這是另一個標簽
<li role="tab" tabindex="-1" class="ui-tabs-tab ui-corner-top ui-state-default ui-tab" aria-controls="chart_wrapper_datatable_second_order" aria-labelledby="ui-id-4" aria-selected="false" aria-expanded="false">
<a href="#chart_wrapper_datatable_second_order" role="presentation" tabindex="-1" class="ui-tabs-anchor" id="ui-id-4">Second Order</a></li>
這是另一個標簽
<li role="tab" tabindex="-1" class="ui-tabs-tab ui-corner-top ui-state-default ui-tab" aria-controls="chart_wrapper_datatable_third_order" aria-labelledby="ui-id-5" aria-selected="false" aria-expanded="false">
<a href="#chart_wrapper_datatable_third_order" role="presentation" tabindex="-1" class="ui-tabs-anchor" id="ui-id-5">Third Order</a></li>
硒有能力做到這一點嗎? 我查看了文檔,但我只找到了使用 XPATH 搜索實際選項卡的方法,而不是一次找到所有 XPATH。
試試這個:
tabs = driver.find_elements_by_xpath('.//li[@role= "tab"]/a')
tabs = [[a.get_attribute("innerHTML"), "//*[@id=" + "".join(a.get_attribute("id")) + "]"] for a in tabs ]
如果 li classes 始終相同,請將 xpath 更改為 [@class="li class"] 或 [@role="tab" and @class="li class"]
要打印諸如First Order 、 Second Order 、 Third Order等表名,您必須為visibility_of_all_elements_located()
引入WebDriverWait ,您可以使用以下任一定位器策略:
使用CSS_SELECTOR
:
print([my_elem.get_attribute("innerHTML") for my_elem in WebDriverWait(driver, 5).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "div#chart_table_container>ul.ui-tabs-nav li>a.ui-tabs-anchor[id^='ui-id-']")))])
使用XPATH
:
print([my_elem.get_attribute("innerHTML") for my_elem in WebDriverWait(driver, 5).until(EC.visibility_of_all_elements_located((By.XPATH, "//div[@id='chart_table_container']/ul[contains(@class, 'ui-tabs-nav')]//li/a[@class='ui-tabs-anchor' and starts-with(@id, 'ui-id-')]")))])
注意:您必須添加以下導入:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.