簡體   English   中英

如何在 python 中使用 selenium 循環這些元素並獲得 XPATH 值作為回報?

[英]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 OrderSecond OrderThird 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM