Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中使用selenium遍历这些元素并获得XPATH值?_Python_Selenium_Xpath_Css Selectors_Webdriverwait - Fatal编程技术网

如何在python中使用selenium遍历这些元素并获得XPATH值?

如何在python中使用selenium遍历这些元素并获得XPATH值?,python,selenium,xpath,css-selectors,webdriverwait,Python,Selenium,Xpath,Css Selectors,Webdriverwait,我希望能够循环浏览此表的选项卡,并返回XPath和选项卡名称 我正在使用python selenium Web驱动程序 这是一个主容器,包含我想要从中获取数据的所有选项卡 当我将网站输入SeleniumWebDriver时,我希望它首先找到这个图表表容器 <div id="chart_table_container" class="tab_container ui-tabs ui-corner-all ui-widget ui-widget-content"> <ul cla

我希望能够循环浏览此表的选项卡,并返回XPath和选项卡名称

我正在使用python selenium Web驱动程序

这是一个主容器,包含我想要从中获取数据的所有选项卡

当我将网站输入SeleniumWebDriver时,我希望它首先找到这个图表表容器

<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可能会有所不同,所以我想实现自动化

有没有办法循环浏览下面的选项卡,并将XPATHs/*[@id=ui-id-3]和选项卡的名称按顺序返回到字典中

这是一个单一选项卡的示例

这是另一个标签

这是另一张表

硒有能力做到这一点吗?我浏览了文档,但我只找到了使用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类始终相同,请将xpath更改为[@class=li class]或[@role=tab和@class=li class]

要打印表名,如一阶、二阶、三阶等,您必须诱导WebDriverWait以显示所定位的所有元素,并且可以使用以下任一方法:

使用CSS_选择器:

使用XPATH:

注意:您必须添加以下导入:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

请参阅:SO的期望是,用户提问时不仅要进行研究以回答自己的问题,还要分享研究、代码尝试和结果。这表明你花了时间来帮助自己,它使我们避免重复显而易见的答案,最重要的是,它帮助你得到一个更具体和相关的答案!另请参阅:是否有方法为此添加等待,因为有时某些元素没有被记录,我认为页面在完全加载之前会被跳过这是正确的吗?tabs=WebDriverWaitdriver,5.untelec.visibility\u all\u elements\u locatedBy.XPATH,'.//li[@role=tab]/a'tabs=[[a.get\u attributeinnerHTML,/*[@id=+.joina.get\u attributeid+]a in tabs]@anarchy,是的,看起来是正确的代码。它会很好用的。或者,您可以将等待条件更改为“所有元素的存在”是否也可以使用此方法获取xpath?@anarchy xpath是您需要构造以定位元素的东西。
<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>
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 ]
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-']")))])
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