如何在 python 中使用 selenium 循环遍历这些元素并在 return 中获取 XPATH 值?
How do I cycle through these elements using selenium in python and get the XPATH value in return?
我希望能够循环浏览此 table 的选项卡以及 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 可能不同,所以我想自动化它。
有没有办法循环浏览下面的选项卡和 return 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>
selenium 有能力做到这一点吗?我查看了文档,但我只找到了使用 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"]
打印table名称如一阶、二阶, 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
我希望能够循环浏览此 table 的选项卡以及 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 可能不同,所以我想自动化它。
有没有办法循环浏览下面的选项卡和 return 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>
selenium 有能力做到这一点吗?我查看了文档,但我只找到了使用 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"]
打印table名称如一阶、二阶, 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